    -- | Actor (or rather actor body trunk) definitions.
    module Content.ItemKindActor
      ( -- * Group name patterns
        pattern S_WOODEN_TORCH, pattern S_SANDSTONE_ROCK
      , pattern HERO, pattern SCOUT_HERO, pattern RANGER_HERO, pattern ESCAPIST_HERO, pattern AMBUSHER_HERO, pattern BRAWLER_HERO, pattern SOLDIER_HERO, pattern CIVILIAN, pattern MONSTER, pattern MOBILE_MONSTER, pattern SCOUT_MONSTER, pattern ANIMAL, pattern MOBILE_ANIMAL, pattern IMMOBILE_ANIMAL, pattern INSECT, pattern GEOPHENOMENON
      , pattern ADD_SIGHT, pattern ARMOR_RANGED, pattern ADD_NOCTO_1, pattern WEAK_ARROW, pattern LIGHT_ATTENUATOR, pattern FIREPROOF_CLOTH, pattern RING_OF_OPPORTUNITY_SNIPER, pattern ANY_ARROW, pattern STARTING_ARMOR, pattern STARTING_WEAPON, pattern GEM
      , actorsGN, actorsGNSingleton
      , -- * Content
        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.DefsInternal
    import Game.LambdaHack.Definition.Flavour

    import Content.ItemKindOrgan

    -- * Group name patterns

    actorsGNSingleton :: [GroupName ItemKind]
    actorsGNSingleton :: [GroupName ItemKind]
    actorsGNSingleton =
           [GroupName ItemKind
    S_WOODEN_TORCH, GroupName ItemKind
    S_SANDSTONE_ROCK]

    pattern S_WOODEN_TORCH, S_SANDSTONE_ROCK :: GroupName ItemKind

    actorsGN :: [GroupName ItemKind]
    actorsGN :: [GroupName ItemKind]
    actorsGN =
           [GroupName ItemKind
    HERO, GroupName ItemKind
    SCOUT_HERO, GroupName ItemKind
    RANGER_HERO, GroupName ItemKind
    ESCAPIST_HERO, GroupName ItemKind
    AMBUSHER_HERO, GroupName ItemKind
    BRAWLER_HERO, GroupName ItemKind
    SOLDIER_HERO, GroupName ItemKind
    CIVILIAN, GroupName ItemKind
    MONSTER, GroupName ItemKind
    MOBILE_MONSTER, GroupName ItemKind
    SCOUT_MONSTER, GroupName ItemKind
    ANIMAL, GroupName ItemKind
    MOBILE_ANIMAL, GroupName ItemKind
    IMMOBILE_ANIMAL, GroupName ItemKind
    INSECT, GroupName ItemKind
    GEOPHENOMENON]
        [GroupName ItemKind]
    -> [GroupName ItemKind] -> [GroupName ItemKind]
    forall a. [a] -> [a] -> [a]
    ++ [GroupName ItemKind
    ADD_SIGHT, GroupName ItemKind
    ARMOR_RANGED, GroupName ItemKind
    ADD_NOCTO_1, GroupName ItemKind
    WEAK_ARROW, GroupName ItemKind
    LIGHT_ATTENUATOR, GroupName ItemKind
    FIREPROOF_CLOTH, GroupName ItemKind
    RING_OF_OPPORTUNITY_SNIPER, GroupName ItemKind
    ANY_ARROW, GroupName ItemKind
    STARTING_ARMOR, GroupName ItemKind
    STARTING_WEAPON, GroupName ItemKind
    GEM]

    pattern HERO, SCOUT_HERO, RANGER_HERO, ESCAPIST_HERO, AMBUSHER_HERO, BRAWLER_HERO, SOLDIER_HERO, CIVILIAN, MONSTER, MOBILE_MONSTER, SCOUT_MONSTER, ANIMAL, MOBILE_ANIMAL, IMMOBILE_ANIMAL, INSECT, GEOPHENOMENON :: GroupName ItemKind

    pattern ADD_SIGHT, ARMOR_RANGED, ADD_NOCTO_1, WEAK_ARROW, LIGHT_ATTENUATOR, FIREPROOF_CLOTH, RING_OF_OPPORTUNITY_SNIPER, ANY_ARROW, STARTING_ARMOR, STARTING_WEAPON, GEM :: GroupName ItemKind

    pattern $mHERO :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bHERO :: GroupName ItemKind
    HERO = GroupName "adventurer"
    pattern $mSCOUT_HERO :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bSCOUT_HERO :: GroupName ItemKind
    SCOUT_HERO = GroupName "scout"
    pattern $mRANGER_HERO :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bRANGER_HERO :: GroupName ItemKind
    RANGER_HERO = GroupName "ranger"
    pattern $mESCAPIST_HERO :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bESCAPIST_HERO :: GroupName ItemKind
    ESCAPIST_HERO = GroupName "escapist"
    pattern $mAMBUSHER_HERO :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bAMBUSHER_HERO :: GroupName ItemKind
    AMBUSHER_HERO = GroupName "ambusher"
    pattern $mBRAWLER_HERO :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bBRAWLER_HERO :: GroupName ItemKind
    BRAWLER_HERO = GroupName "brawler"
    pattern $mSOLDIER_HERO :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bSOLDIER_HERO :: GroupName ItemKind
    SOLDIER_HERO = GroupName "soldier"
    pattern $mCIVILIAN :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bCIVILIAN :: GroupName ItemKind
    CIVILIAN = GroupName "civilian"
    pattern $mMONSTER :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bMONSTER :: GroupName ItemKind
    MONSTER = GroupName "monstrosity"
    pattern $mMOBILE_MONSTER :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bMOBILE_MONSTER :: GroupName ItemKind
    MOBILE_MONSTER = GroupName "mobile monstrosity"
    pattern $mSCOUT_MONSTER :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bSCOUT_MONSTER :: GroupName ItemKind
    SCOUT_MONSTER = GroupName "scout monstrosity"
    pattern $mANIMAL :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bANIMAL :: GroupName ItemKind
    ANIMAL = GroupName "animal"
    pattern $mMOBILE_ANIMAL :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bMOBILE_ANIMAL :: GroupName ItemKind
    MOBILE_ANIMAL = GroupName "mobile animal"
    pattern $mIMMOBILE_ANIMAL :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bIMMOBILE_ANIMAL :: GroupName ItemKind
    IMMOBILE_ANIMAL = GroupName "immobile animal"
    pattern $mINSECT :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bINSECT :: GroupName ItemKind
    INSECT = GroupName "insect"
    pattern $mGEOPHENOMENON :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bGEOPHENOMENON :: GroupName ItemKind
    GEOPHENOMENON = GroupName "geological phenomenon"

    pattern $mS_WOODEN_TORCH :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_WOODEN_TORCH :: GroupName ItemKind
    S_WOODEN_TORCH = GroupName "wooden torch"
    pattern $mS_SANDSTONE_ROCK :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_SANDSTONE_ROCK :: GroupName ItemKind
    S_SANDSTONE_ROCK = GroupName "sandstone rock"

    pattern $mADD_SIGHT :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bADD_SIGHT :: GroupName ItemKind
    ADD_SIGHT = GroupName "sight improvement"
    pattern $mARMOR_RANGED :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bARMOR_RANGED :: GroupName ItemKind
    ARMOR_RANGED = GroupName "ranged armor"
    pattern $mADD_NOCTO_1 :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bADD_NOCTO_1 :: GroupName ItemKind
    ADD_NOCTO_1 = GroupName "noctovision improvement"
    pattern $mWEAK_ARROW :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bWEAK_ARROW :: GroupName ItemKind
    WEAK_ARROW = GroupName "weak arrow"
    pattern $mLIGHT_ATTENUATOR :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bLIGHT_ATTENUATOR :: GroupName ItemKind
    LIGHT_ATTENUATOR = GroupName "light attenuator"
    pattern $mFIREPROOF_CLOTH :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bFIREPROOF_CLOTH :: GroupName ItemKind
    FIREPROOF_CLOTH = GroupName "fireproof cloth"
    pattern $mRING_OF_OPPORTUNITY_SNIPER :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bRING_OF_OPPORTUNITY_SNIPER :: GroupName ItemKind
    RING_OF_OPPORTUNITY_SNIPER = GroupName "ring of sniper"
    pattern $mANY_ARROW :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bANY_ARROW :: GroupName ItemKind
    ANY_ARROW = GroupName "arrow"
    pattern $mSTARTING_ARMOR :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bSTARTING_ARMOR :: GroupName ItemKind
    STARTING_ARMOR = GroupName "starting armor"
    pattern $mSTARTING_WEAPON :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bSTARTING_WEAPON :: GroupName ItemKind
    STARTING_WEAPON = GroupName "starting weapon"
    pattern $mGEM :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bGEM :: GroupName ItemKind
    GEM = GroupName "gem"

    -- * Content

    actors :: [ItemKind]
    actors :: [ItemKind]
    actors =
      [ItemKind
    warrior, ItemKind
    warrior2, ItemKind
    warrior3, ItemKind
    warrior4, ItemKind
    warrior5, ItemKind
    scout, ItemKind
    ranger, ItemKind
    escapist, ItemKind
    ambusher, ItemKind
    brawler, 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, brawler, 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

    -- TODO: bring back S_EAR_3 when character progression permits hearing boosts.
    humanOrgans :: [(GroupName ItemKind, CStore)]
    humanOrgans :: [(GroupName ItemKind, CStore)]
    humanOrgans = [ (GroupName ItemKind
    S_FIST, CStore
    COrgan), (GroupName ItemKind
    S_FOOT, CStore
    COrgan)
                  , (GroupName ItemKind
    S_EYE_6, CStore
    COrgan), (GroupName ItemKind
    S_EAR_6, CStore
    COrgan)
                  , (GroupName ItemKind
    S_SAPIENT_BRAIN, CStore
    COrgan) ]
    warrior :: ItemKind
    warrior = ItemKind
      { isymbol :: ContentSymbol ItemKind
    isymbol  = ContentSymbol ItemKind -> ContentSymbol ItemKind
    forall c. ContentSymbol ItemKind -> ContentSymbol ItemKind
    toContentSymbol ContentSymbol ItemKind
    '@'
      , iname :: Text
    iname    = Text
    "adventurer"  -- modified if initial actors in hero faction
      , ifreq :: Freqs ItemKind
    ifreq    = [(GroupName ItemKind
    HERO, Int
    100), (GroupName ItemKind
    MOBILE, Int
    1)]
      , iflavour :: [Flavour]
    iflavour = [Color] -> [Flavour]
    zipPlain [Color
    BrWhite]
      , icount :: Dice
    icount   = Dice
    1
      , irarity :: Rarity
    irarity  = [(Double
    1, Int
    5)]
      , iverbHit :: Text
    iverbHit = Text
    "thud"
      , iweight :: Int
    iweight  = Int
    80000
      , idamage :: Dice
    idamage  = Dice
    0
      , iaspects :: [Aspect]
    iaspects = [ Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxHP Dice
    80  -- partially from clothes and first aid
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxCalm Dice
    70
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkSpeed Dice
    20
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkNocto Dice
    2
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkWait Dice
    1  -- can lurk
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkProject Dice
    2  -- can lob
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkApply Dice
    2  -- can even apply periodic items
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkOdor Dice
    1
                   , Flag -> Aspect
    SetFlag Flag
    Durable ]
      , ieffects :: [Effect]
    ieffects = []
      , ikit :: [(GroupName ItemKind, CStore)]
    ikit     = [(GroupName ItemKind, CStore)]
    humanOrgans
                   [(GroupName ItemKind, CStore)]
    -> [(GroupName ItemKind, CStore)] -> [(GroupName ItemKind, CStore)]
    forall a. [a] -> [a] -> [a]
    ++ [(GroupName ItemKind
    S_SANDSTONE_ROCK, CStore
    CStash)]
      , idesc :: Text
    idesc    = Text
    ""  -- "A hardened veteran of combat."
      }
    warrior2 :: ItemKind
    warrior2 = ItemKind
    warrior
      { iname    = "warrior"
      , ikit     = humanOrgans
                   ++ [(COMMON_ITEM, CStash)]
      -- , idesc    = ""
      }
    warrior3 :: ItemKind
    warrior3 = ItemKind
    warrior
      { iname    = "blacksmith"
      -- , idesc    = ""
      }
    warrior4 :: ItemKind
    warrior4 = ItemKind
    warrior
      { iname    = "forester"
      -- , idesc    = ""
      }
    warrior5 :: ItemKind
    warrior5 = ItemKind
    warrior
      { iname    = "scientist"
      -- , idesc    = ""
      }

    scout :: ItemKind
    scout = ItemKind
    warrior
      { ifreq    = [(SCOUT_HERO, 100), (MOBILE, 1)]
      , ikit     = humanOrgans
                   ++ [ (ADD_SIGHT, CEqp)
                      , (ARMOR_RANGED, CEqp)
                      , (ADD_NOCTO_1, CStash) ]
      -- , idesc    = ""
      }
    ranger :: ItemKind
    ranger = ItemKind
    warrior
      { ifreq    = [(RANGER_HERO, 100), (MOBILE, 1)]
      , ikit     = humanOrgans
                   ++ [ (ARMOR_RANGED, CEqp)
                      , (WEAK_ARROW, CStash) ]
      -- , idesc    = ""
      }
    escapist :: ItemKind
    escapist = ItemKind
    warrior
      { ifreq    = [(ESCAPIST_HERO, 100), (MOBILE, 1)]
      , ikit     = humanOrgans
                   ++ [ (ADD_SIGHT, CEqp)
                      , (STARTING_ARMOR, CEqp)
                      , (WEAK_ARROW, CStash)  -- mostly for probing
                      , (LIGHT_ATTENUATOR, CStash)
                      , (S_WOODEN_TORCH, CStash)
                      , (FIREPROOF_CLOTH, CStash) ]
      -- , idesc    = ""
      }
    ambusher :: ItemKind
    ambusher = ItemKind
    warrior
      { ifreq    = [(AMBUSHER_HERO, 100), (MOBILE, 1)]
      , ikit     = humanOrgans  -- dark and numerous, so more kit without exploring
                   ++ [ (RING_OF_OPPORTUNITY_SNIPER, CEqp)
                      , (ANY_ARROW, CStash), (ANY_ARROW, CStash)
                      , (WEAK_ARROW, CStash)
                      , (EXPLOSIVE, CStash)
                      , (LIGHT_ATTENUATOR, CEqp)
                      , (S_WOODEN_TORCH, CStash) ]
      -- , idesc    = ""
      }
    brawler :: ItemKind
    brawler = ItemKind
    warrior
      { ifreq    = [(BRAWLER_HERO, 100), (MOBILE, 1)]
      , ikit     = humanOrgans
                   ++ [ (STARTING_WEAPON, CEqp)
                      , (ANY_POTION, CStash) ]
      -- , idesc    = ""
      }
    soldier :: ItemKind
    soldier = ItemKind
    brawler
      { ifreq    = [(SOLDIER_HERO, 100), (MOBILE, 1)]
      , ikit     = ikit brawler
                   ++ [(EXPLOSIVE, CStash)]
      -- , idesc    = ""
      }

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

    -- * Monsters

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

    eye :: ItemKind
    eye = ItemKind
      { isymbol :: ContentSymbol ItemKind
    isymbol  = ContentSymbol ItemKind -> ContentSymbol ItemKind
    forall c. ContentSymbol ItemKind -> ContentSymbol ItemKind
    toContentSymbol ContentSymbol ItemKind
    'e'
      , iname :: Text
    iname    = Text
    "reducible eye"
      , ifreq :: Freqs ItemKind
    ifreq    = [ (GroupName ItemKind
    MONSTER, Int
    100), (GroupName ItemKind
    MOBILE, Int
    1)
                   , (GroupName ItemKind
    MOBILE_MONSTER, Int
    100), (GroupName ItemKind
    SCOUT_MONSTER, Int
    10) ]
      , iflavour :: [Flavour]
    iflavour = [Color] -> [Flavour]
    zipFancy [Color
    BrRed]
      , icount :: Dice
    icount   = Dice
    1
      , irarity :: Rarity
    irarity  = [(Double
    3, Int
    0), (Double
    4, Int
    10), (Double
    10, Int
    8)]
      , iverbHit :: Text
    iverbHit = Text
    "thud"
      , iweight :: Int
    iweight  = Int
    80000
      , idamage :: Dice
    idamage  = Dice
    0
      , iaspects :: [Aspect]
    iaspects = [ Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxHP Dice
    16, Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxCalm Dice
    70
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkSpeed Dice
    20, Skill -> Dice -> Aspect
    AddSkill Skill
    SkNocto Dice
    2
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkAggression Dice
    1
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkProject Dice
    2  -- can lob
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkApply Dice
    1  -- can use even cultural artifacts
                   , Flag -> Aspect
    SetFlag Flag
    Durable ]
      , ieffects :: [Effect]
    ieffects = []
      , idesc :: Text
    idesc    = Text
    "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     = [ (GroupName ItemKind
    S_LASH, CStore
    COrgan), (GroupName ItemKind
    S_PUPIL, CStore
    COrgan)  -- at least one non-timed
                   , (GroupName ItemKind
    S_SAPIENT_BRAIN, CStore
    COrgan) ]  -- no hearing, it's all eyes
      }
    fastEye :: ItemKind
    fastEye = ItemKind
      { isymbol :: ContentSymbol ItemKind
    isymbol  = ContentSymbol ItemKind -> ContentSymbol ItemKind
    forall c. ContentSymbol ItemKind -> ContentSymbol ItemKind
    toContentSymbol ContentSymbol ItemKind
    'j'
      , iname :: Text
    iname    = Text
    "injective jaw"
      , ifreq :: Freqs ItemKind
    ifreq    = [ (GroupName ItemKind
    MONSTER, Int
    100), (GroupName ItemKind
    MOBILE, Int
    1)
                   , (GroupName ItemKind
    MOBILE_MONSTER, Int
    100), (GroupName ItemKind
    SCOUT_MONSTER, Int
    60) ]
      , iflavour :: [Flavour]
    iflavour = [Color] -> [Flavour]
    zipFancy [Color
    BrBlue]
      , icount :: Dice
    icount   = Dice
    1
      , irarity :: Rarity
    irarity  = [(Double
    3, Int
    0), (Double
    4, Int
    6), (Double
    10, Int
    12)]
      , iverbHit :: Text
    iverbHit = Text
    "thud"
      , iweight :: Int
    iweight  = Int
    80000
      , idamage :: Dice
    idamage  = Dice
    0
      , iaspects :: [Aspect]
    iaspects = [ Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxHP Dice
    5, Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxCalm Dice
    70
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkSpeed Dice
    30, Skill -> Dice -> Aspect
    AddSkill Skill
    SkNocto Dice
    2
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkAggression Dice
    1
                   , Flag -> Aspect
    SetFlag Flag
    Durable ]
      , ieffects :: [Effect]
    ieffects = []
      , idesc :: Text
    idesc    = Text
    "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     = [ (GroupName ItemKind
    S_TOOTH, CStore
    COrgan), (GroupName ItemKind
    S_LIP, CStore
    COrgan)  -- at least one non-timed
                   , (GroupName ItemKind
    S_SPEED_GLAND_10, CStore
    COrgan)
                   , (GroupName ItemKind
    S_VISION_6, CStore
    COrgan), (GroupName ItemKind
    S_EAR_3, CStore
    COrgan)
                   , (GroupName ItemKind
    S_SAPIENT_BRAIN, CStore
    COrgan) ]
      }
    nose :: ItemKind
    nose = ItemKind  -- depends solely on smell
      { isymbol :: ContentSymbol ItemKind
    isymbol  = ContentSymbol ItemKind -> ContentSymbol ItemKind
    forall c. ContentSymbol ItemKind -> ContentSymbol ItemKind
    toContentSymbol ContentSymbol ItemKind
    'n'
      , iname :: Text
    iname    = Text
    "point-free nose"
      , ifreq :: Freqs ItemKind
    ifreq    = [(GroupName ItemKind
    MONSTER, Int
    100), (GroupName ItemKind
    MOBILE, Int
    1), (GroupName ItemKind
    MOBILE_MONSTER, Int
    100)]
      , iflavour :: [Flavour]
    iflavour = [Color] -> [Flavour]
    zipFancy [Color
    BrGreen]
      , icount :: Dice
    icount   = Dice
    1
      , irarity :: Rarity
    irarity  = [(Double
    3, Int
    0), (Double
    4, Int
    5), (Double
    10, Int
    7)]
      , iverbHit :: Text
    iverbHit = Text
    "thud"
      , iweight :: Int
    iweight  = Int
    80000
      , idamage :: Dice
    idamage  = Dice
    0
      , iaspects :: [Aspect]
    iaspects = [ Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxHP Dice
    30, Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxCalm Dice
    30
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkSpeed Dice
    18, Skill -> Dice -> Aspect
    AddSkill Skill
    SkNocto Dice
    2
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkAggression Dice
    1
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkProject (-Dice
    1)  -- can't project
                   , Flag -> Aspect
    SetFlag Flag
    Durable ]
      , ieffects :: [Effect]
    ieffects = []
      , idesc :: Text
    idesc    = Text
    "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     = [ (GroupName ItemKind
    S_TIP, CStore
    COrgan), (GroupName ItemKind
    S_LIP, CStore
    COrgan)  -- at least one non-timed
                   , (GroupName ItemKind
    S_NOSTRIL, CStore
    COrgan)
                   , (GroupName ItemKind
    S_SAPIENT_BRAIN, CStore
    COrgan) ]  -- no sight nor hearing
      }
    elbow :: ItemKind
    elbow = ItemKind
      { isymbol :: ContentSymbol ItemKind
    isymbol  = ContentSymbol ItemKind -> ContentSymbol ItemKind
    forall c. ContentSymbol ItemKind -> ContentSymbol ItemKind
    toContentSymbol ContentSymbol ItemKind
    'e'
      , iname :: Text
    iname    = Text
    "commutative elbow"
      , ifreq :: Freqs ItemKind
    ifreq    = [ (GroupName ItemKind
    MONSTER, Int
    100), (GroupName ItemKind
    MOBILE, Int
    1)
                   , (GroupName ItemKind
    MOBILE_MONSTER, Int
    100), (GroupName ItemKind
    SCOUT_MONSTER, Int
    30) ]
      , iflavour :: [Flavour]
    iflavour = [Color] -> [Flavour]
    zipFancy [Color
    BrMagenta]
      , icount :: Dice
    icount   = Dice
    1
      , irarity :: Rarity
    irarity  = [(Double
    3, Int
    0), (Double
    4, Int
    1), (Double
    10, Int
    12)]
      , iverbHit :: Text
    iverbHit = Text
    "thud"
      , iweight :: Int
    iweight  = Int
    80000
      , idamage :: Dice
    idamage  = Dice
    0
      , iaspects :: [Aspect]
    iaspects = [ Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxHP Dice
    8, Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxCalm Dice
    80
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkSpeed Dice
    20, Skill -> Dice -> Aspect
    AddSkill Skill
    SkNocto Dice
    2
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkProject Dice
    2  -- can lob
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkApply Dice
    1  -- can even use cultural artifacts
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkMelee (-Dice
    1)
                   , Flag -> Aspect
    SetFlag Flag
    Durable ]
      , ieffects :: [Effect]
    ieffects = []
      , idesc :: Text
    idesc    = Text
    "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     = [ (GroupName ItemKind
    S_SPEED_GLAND_5, CStore
    COrgan), (GroupName ItemKind
    S_BARK, CStore
    COrgan)
                   , (GroupName ItemKind
    S_VISION_12, CStore
    COrgan), (GroupName ItemKind
    S_EAR_8, CStore
    COrgan)
                       -- too powerful to get stronger sight
                   , (GroupName ItemKind
    S_SAPIENT_BRAIN, CStore
    COrgan)
                   , (GroupName ItemKind
    ANY_ARROW, CStore
    CStash), (GroupName ItemKind
    ANY_ARROW, CStore
    CStash)
                   , (GroupName ItemKind
    WEAK_ARROW, CStore
    CStash), (GroupName ItemKind
    WEAK_ARROW, CStore
    CStash) ]
      }
    torsor :: ItemKind
    torsor = ItemKind
      { isymbol :: ContentSymbol ItemKind
    isymbol  = ContentSymbol ItemKind -> ContentSymbol ItemKind
    forall c. ContentSymbol ItemKind -> ContentSymbol ItemKind
    toContentSymbol ContentSymbol ItemKind
    'T'
      , iname :: Text
    iname    = Text
    "The Forgetful Torsor"
      , ifreq :: Freqs ItemKind
    ifreq    = [(GroupName ItemKind
    MONSTER, Int
    100), (GroupName ItemKind
    MOBILE, Int
    1)]
      , iflavour :: [Flavour]
    iflavour = [Color] -> [Flavour]
    zipFancy [Color
    BrCyan]
      , icount :: Dice
    icount   = Dice
    1
      , irarity :: Rarity
    irarity  = [(Double
    9, Int
    0), (Double
    10, Int
    1000)]  -- unique
      , iverbHit :: Text
    iverbHit = Text
    "thud"
      , iweight :: Int
    iweight  = Int
    80000
      , idamage :: Dice
    idamage  = Dice
    0
      , iaspects :: [Aspect]
    iaspects = [ Flag -> Aspect
    SetFlag Flag
    Unique
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxHP Dice
    300, Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxCalm Dice
    100
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkSpeed Dice
    15, Skill -> Dice -> Aspect
    AddSkill Skill
    SkNocto Dice
    2
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkAggression Dice
    3
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkProject Dice
    2  -- can lob
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkApply Dice
    1  -- can even use cultural artifacts
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkAlter (-Dice
    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    = Text
    "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     = [ (GroupName ItemKind
    S_RIGHT_TORSION, CStore
    COrgan), (GroupName ItemKind
    S_LEFT_TORSION, CStore
    COrgan)
                   , (GroupName ItemKind
    S_PUPIL, CStore
    COrgan)
                   , (GroupName ItemKind
    S_TENTACLE, CStore
    COrgan)  -- low timeout, so rarely a stall
                   , (GroupName ItemKind
    S_EAR_8, CStore
    COrgan)
                   , (GroupName ItemKind
    S_SAPIENT_BRAIN, CStore
    COrgan)
                   , (GroupName ItemKind
    GEM, CStore
    CStash), (GroupName ItemKind
    GEM, CStore
    CStash)
                   , (GroupName ItemKind
    GEM, CStore
    CStash), (GroupName ItemKind
    GEM, CStore
    CStash) ]
      }
    -- "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 = ItemKind  -- basically a much smaller, slower and nosy hyena
      { isymbol :: ContentSymbol ItemKind
    isymbol  = ContentSymbol ItemKind -> ContentSymbol ItemKind
    forall c. ContentSymbol ItemKind -> ContentSymbol ItemKind
    toContentSymbol ContentSymbol ItemKind
    'j'
      , iname :: Text
    iname    = Text
    "golden jackal"
      , ifreq :: Freqs ItemKind
    ifreq    = [ (GroupName ItemKind
    ANIMAL, Int
    100), (GroupName ItemKind
    MOBILE, Int
    1), (GroupName ItemKind
    MOBILE_ANIMAL, Int
    100)
                   , (GroupName ItemKind
    SCAVENGER, Int
    50) ]
      , iflavour :: [Flavour]
    iflavour = [Color] -> [Flavour]
    zipPlain [Color
    BrYellow]
      , icount :: Dice
    icount   = Dice
    1
      , irarity :: Rarity
    irarity  = [(Double
    1, Int
    4), (Double
    10, Int
    2)]
      , iverbHit :: Text
    iverbHit = Text
    "thud"
      , iweight :: Int
    iweight  = Int
    13000
      , idamage :: Dice
    idamage  = Dice
    0
      , iaspects :: [Aspect]
    iaspects = [ Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxHP Dice
    15, Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxCalm Dice
    70
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkSpeed Dice
    24, Skill -> Dice -> Aspect
    AddSkill Skill
    SkNocto Dice
    2
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkAggression Dice
    2  -- scout
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkDisplace Dice
    1  -- scout
                   , Flag -> Aspect
    SetFlag Flag
    Durable ]
      , ieffects :: [Effect]
    ieffects = []
      , idesc :: Text
    idesc    = Text
    "An opportunistic predator, feeding on carrion and the weak."
      , ikit :: [(GroupName ItemKind, CStore)]
    ikit     = [ (GroupName ItemKind
    S_SMALL_JAW, CStore
    COrgan)
                   , (GroupName ItemKind
    S_EYE_6, CStore
    COrgan), (GroupName ItemKind
    S_NOSTRIL, CStore
    COrgan), (GroupName ItemKind
    S_EAR_8, CStore
    COrgan)
                   , (GroupName ItemKind
    S_ANIMAL_BRAIN, CStore
    COrgan) ]
      }
    griffonVulture :: ItemKind
    griffonVulture = ItemKind  -- keep it boring and weak, because it summons
      { isymbol :: ContentSymbol ItemKind
    isymbol  = ContentSymbol ItemKind -> ContentSymbol ItemKind
    forall c. ContentSymbol ItemKind -> ContentSymbol ItemKind
    toContentSymbol ContentSymbol ItemKind
    'v'
      , iname :: Text
    iname    = Text
    "griffon vulture"
      , ifreq :: Freqs ItemKind
    ifreq    = [ (GroupName ItemKind
    ANIMAL, Int
    100), (GroupName ItemKind
    MOBILE, Int
    1), (GroupName ItemKind
    MOBILE_ANIMAL, Int
    100)
                   , (GroupName ItemKind
    SCAVENGER, Int
    30) ]
      , iflavour :: [Flavour]
    iflavour = [Color] -> [Flavour]
    zipPlain [Color
    BrYellow]
      , icount :: Dice
    icount   = Dice
    1
      , irarity :: Rarity
    irarity  = [(Double
    1, Int
    3), (Double
    10, Int
    3)]
      , iverbHit :: Text
    iverbHit = Text
    "thud"
      , iweight :: Int
    iweight  = Int
    13000
      , idamage :: Dice
    idamage  = Dice
    0
      , iaspects :: [Aspect]
    iaspects = [ Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxHP Dice
    15, Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxCalm Dice
    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 Dice
    22, Skill -> Dice -> Aspect
    AddSkill Skill
    SkNocto Dice
    2
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkAlter (-Dice
    2)  -- can't use hard stairs nor doors
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkFlying Dice
    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.
      , ieffects :: [Effect]
    ieffects = []
      , idesc :: Text
    idesc    = Text
    "It soars high above, searching for vulnerable prey."
      , ikit :: [(GroupName ItemKind, CStore)]
    ikit     = [ (GroupName ItemKind
    S_SCREECHING_BEAK, CStore
    COrgan)  -- in reality it grunts and hisses
                   , (GroupName ItemKind
    S_SMALL_CLAW, CStore
    COrgan)
                   , (GroupName ItemKind
    S_EYE_8, CStore
    COrgan), (GroupName ItemKind
    S_EAR_8, CStore
    COrgan)
                       -- can't shoot, so strong sight is OK
                   , (GroupName ItemKind
    S_ANIMAL_BRAIN, CStore
    COrgan) ]
      }
    skunk :: ItemKind
    skunk = ItemKind
      { isymbol :: ContentSymbol ItemKind
    isymbol  = ContentSymbol ItemKind -> ContentSymbol ItemKind
    forall c. ContentSymbol ItemKind -> ContentSymbol ItemKind
    toContentSymbol ContentSymbol ItemKind
    's'
      , iname :: Text
    iname    = Text
    "hog-nosed skunk"
      , ifreq :: Freqs ItemKind
    ifreq    = [(GroupName ItemKind
    ANIMAL, Int
    100), (GroupName ItemKind
    MOBILE, Int
    1), (GroupName ItemKind
    MOBILE_ANIMAL, Int
    100)]
      , iflavour :: [Flavour]
    iflavour = [Color] -> [Flavour]
    zipPlain [Color
    White]
      , icount :: Dice
    icount   = Dice
    1
      , irarity :: Rarity
    irarity  = [(Double
    1, Int
    8), (Double
    5, Int
    1)]
      , iverbHit :: Text
    iverbHit = Text
    "thud"
      , iweight :: Int
    iweight  = Int
    4000
      , idamage :: Dice
    idamage  = Dice
    0
      , iaspects :: [Aspect]
    iaspects = [ Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxHP Dice
    13, Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxCalm Dice
    30
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkSpeed Dice
    22, Skill -> Dice -> Aspect
    AddSkill Skill
    SkNocto Dice
    2
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkAlter (-Dice
    2)  -- can't use hard stairs nor doors
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkOdor Dice
    5  -- and no smell skill, to let it leave smell
                   , Flag -> Aspect
    SetFlag Flag
    Durable ]
      , ieffects :: [Effect]
    ieffects = []
      , idesc :: Text
    idesc    = Text
    "Its only defence is the terrible stench."
      , ikit :: [(GroupName ItemKind, CStore)]
    ikit     = [ (GroupName ItemKind
    S_SCENT_GLAND, CStore
    COrgan)
                   , (GroupName ItemKind
    S_SMALL_CLAW, CStore
    COrgan), (GroupName ItemKind
    S_SNOUT, CStore
    COrgan)
                   , (GroupName ItemKind
    S_EYE_3, CStore
    COrgan), (GroupName ItemKind
    S_EAR_6, CStore
    COrgan)
                   , (GroupName ItemKind
    S_ANIMAL_BRAIN, CStore
    COrgan) ]
      }
    armadillo :: ItemKind
    armadillo = ItemKind
      { isymbol :: ContentSymbol ItemKind
    isymbol  = ContentSymbol ItemKind -> ContentSymbol ItemKind
    forall c. ContentSymbol ItemKind -> ContentSymbol ItemKind
    toContentSymbol ContentSymbol ItemKind
    'a'
      , iname :: Text
    iname    = Text
    "giant armadillo"
      , ifreq :: Freqs ItemKind
    ifreq    = [(GroupName ItemKind
    ANIMAL, Int
    100), (GroupName ItemKind
    MOBILE, Int
    1), (GroupName ItemKind
    MOBILE_ANIMAL, Int
    100)]
      , iflavour :: [Flavour]
    iflavour = [Color] -> [Flavour]
    zipPlain [Color
    Brown]
      , icount :: Dice
    icount   = Dice
    1
      , irarity :: Rarity
    irarity  = [(Double
    1, Int
    7)]
      , iverbHit :: Text
    iverbHit = Text
    "thud"
      , iweight :: Int
    iweight  = Int
    54000
      , idamage :: Dice
    idamage  = Dice
    0
      , iaspects :: [Aspect]
    iaspects = [ Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxHP Dice
    25, Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxCalm Dice
    30
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkSpeed Dice
    20, Skill -> Dice -> Aspect
    AddSkill Skill
    SkNocto Dice
    2
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkHurtMelee (-Dice
    70)  -- quite harmless rolled in a ball
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkAlter (-Dice
    2)  -- can't use hard stairs nor doors
                   , Flag -> Aspect
    SetFlag Flag
    Durable ]
      , ieffects :: [Effect]
    ieffects = []
      , idesc :: Text
    idesc    = Text
    "When threatened, it rolls into a ball."
      , ikit :: [(GroupName ItemKind, CStore)]
    ikit     = [ (GroupName ItemKind
    S_HOOKED_CLAW, CStore
    COrgan), (GroupName ItemKind
    S_SNOUT, CStore
    COrgan)
                   , (GroupName ItemKind
    S_ARMORED_SKIN, CStore
    COrgan), (GroupName ItemKind
    S_ARMORED_SKIN, CStore
    COrgan)
                   , (GroupName ItemKind
    S_EYE_3, CStore
    COrgan), (GroupName ItemKind
    S_NOSTRIL, CStore
    COrgan), (GroupName ItemKind
    S_EAR_6, CStore
    COrgan)
                   , (GroupName ItemKind
    S_ANIMAL_BRAIN, CStore
    COrgan) ]
      }
    gilaMonster :: ItemKind
    gilaMonster = ItemKind
      { isymbol :: ContentSymbol ItemKind
    isymbol  = ContentSymbol ItemKind -> ContentSymbol ItemKind
    forall c. ContentSymbol ItemKind -> ContentSymbol ItemKind
    toContentSymbol ContentSymbol ItemKind
    'g'
      , iname :: Text
    iname    = Text
    "Gila monster"
      , ifreq :: Freqs ItemKind
    ifreq    = [(GroupName ItemKind
    ANIMAL, Int
    100), (GroupName ItemKind
    MOBILE, Int
    1), (GroupName ItemKind
    MOBILE_ANIMAL, Int
    100)]
      , iflavour :: [Flavour]
    iflavour = [Color] -> [Flavour]
    zipPlain [Color
    Magenta]
      , icount :: Dice
    icount   = Dice
    1
      , irarity :: Rarity
    irarity  = [(Double
    2, Int
    5), (Double
    10, Int
    2)]
      , iverbHit :: Text
    iverbHit = Text
    "thud"
      , iweight :: Int
    iweight  = Int
    80000
      , idamage :: Dice
    idamage  = Dice
    0
      , iaspects :: [Aspect]
    iaspects = [ Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxHP Dice
    15, Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxCalm Dice
    50
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkSpeed Dice
    18, Skill -> Dice -> Aspect
    AddSkill Skill
    SkNocto Dice
    2
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkAlter (-Dice
    2)  -- can't use hard stairs nor doors
                   , Flag -> Aspect
    SetFlag Flag
    Durable ]
      , ieffects :: [Effect]
    ieffects = []
      , idesc :: Text
    idesc    = Text
    "Numbing venom ensures that even the fastest prey has no escape."
      , ikit :: [(GroupName ItemKind, CStore)]
    ikit     = [ (GroupName ItemKind
    S_VENOM_TOOTH, CStore
    COrgan), (GroupName ItemKind
    S_SMALL_CLAW, CStore
    COrgan)
                   , (GroupName ItemKind
    S_EYE_3, CStore
    COrgan), (GroupName ItemKind
    S_NOSTRIL, CStore
    COrgan), (GroupName ItemKind
    S_EAR_6, CStore
    COrgan)
                   , (GroupName ItemKind
    S_ANIMAL_BRAIN, CStore
    COrgan) ]
      }
    rattlesnake :: ItemKind
    rattlesnake = ItemKind
      { isymbol :: ContentSymbol ItemKind
    isymbol  = ContentSymbol ItemKind -> ContentSymbol ItemKind
    forall c. ContentSymbol ItemKind -> ContentSymbol ItemKind
    toContentSymbol ContentSymbol ItemKind
    's'
      , iname :: Text
    iname    = Text
    "rattlesnake"
      , ifreq :: Freqs ItemKind
    ifreq    = [(GroupName ItemKind
    ANIMAL, Int
    100), (GroupName ItemKind
    MOBILE, Int
    1), (GroupName ItemKind
    MOBILE_ANIMAL, Int
    100)]
      , iflavour :: [Flavour]
    iflavour = [Color] -> [Flavour]
    zipPlain [Color
    Brown]
      , icount :: Dice
    icount   = Dice
    1
      , irarity :: Rarity
    irarity  = [(Double
    5, Int
    1), (Double
    10, Int
    7), (Double
    20, Int
    10)]  -- common among late spawns
      , iverbHit :: Text
    iverbHit = Text
    "thud"
      , iweight :: Int
    iweight  = Int
    80000
      , idamage :: Dice
    idamage  = Dice
    0
      , iaspects :: [Aspect]
    iaspects = [ Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxHP Dice
    28, Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxCalm Dice
    60
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkSpeed Dice
    16, Skill -> Dice -> Aspect
    AddSkill Skill
    SkNocto Dice
    2
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkAggression Dice
    2  -- often discharged. so flees anyway
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkAlter (-Dice
    2)  -- can't use hard stairs nor doors
                   , Flag -> Aspect
    SetFlag Flag
    Durable ]
      , ieffects :: [Effect]
    ieffects = []
      , idesc :: Text
    idesc    = Text
    "Beware its rattle - it serves as a warning of an agonising death."
      , ikit :: [(GroupName ItemKind, CStore)]
    ikit     = [ (GroupName ItemKind
    S_VENOM_FANG, CStore
    COrgan)  -- when discharged, it's weaponless
                   , (GroupName ItemKind
    S_RATLLE, CStore
    COrgan)
                   , (GroupName ItemKind
    S_EYE_3, CStore
    COrgan), (GroupName ItemKind
    S_NOSTRIL, CStore
    COrgan), (GroupName ItemKind
    S_EAR_6, CStore
    COrgan)
                   , (GroupName ItemKind
    S_ANIMAL_BRAIN, CStore
    COrgan) ]
      }
    hyena :: ItemKind
    hyena = ItemKind
      { isymbol :: ContentSymbol ItemKind
    isymbol  = ContentSymbol ItemKind -> ContentSymbol ItemKind
    forall c. ContentSymbol ItemKind -> ContentSymbol ItemKind
    toContentSymbol ContentSymbol ItemKind
    'h'
      , iname :: Text
    iname    = Text
    "spotted hyena"
      , ifreq :: Freqs ItemKind
    ifreq    = [ (GroupName ItemKind
    ANIMAL, Int
    100), (GroupName ItemKind
    MOBILE, Int
    1), (GroupName ItemKind
    MOBILE_ANIMAL, Int
    100)
                   , (GroupName ItemKind
    SCAVENGER, Int
    20) ]
      , iflavour :: [Flavour]
    iflavour = [Color] -> [Flavour]
    zipPlain [Color
    BrYellow]
      , icount :: Dice
    icount   = Dice
    1
      , irarity :: Rarity
    irarity  = [(Double
    4, Int
    1), (Double
    10, Int
    5), (Double
    20, Int
    10)]
          -- gets summoned often, so low base rarity, except among late spawns
      , iverbHit :: Text
    iverbHit = Text
    "thud"
      , iweight :: Int
    iweight  = Int
    60000
      , idamage :: Dice
    idamage  = Dice
    0
      , iaspects :: [Aspect]
    iaspects = [ Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxHP Dice
    23, Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxCalm Dice
    70
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkSpeed Dice
    32, Skill -> Dice -> Aspect
    AddSkill Skill
    SkNocto Dice
    2
                   , Flag -> Aspect
    SetFlag Flag
    Durable ]
      , ieffects :: [Effect]
    ieffects = []
      , idesc :: Text
    idesc    = Text
    "Skulking in the shadows, waiting for easy prey."
      , ikit :: [(GroupName ItemKind, CStore)]
    ikit     = [ (GroupName ItemKind
    S_JAW, CStore
    COrgan), (GroupName ItemKind
    S_SMALL_CLAW, CStore
    COrgan)
                   , (GroupName ItemKind
    S_EYE_6, CStore
    COrgan), (GroupName ItemKind
    S_NOSTRIL, CStore
    COrgan), (GroupName ItemKind
    S_EAR_8, CStore
    COrgan)
                   , (GroupName ItemKind
    S_ANIMAL_BRAIN, CStore
    COrgan) ]
      }
    komodoDragon :: ItemKind
    komodoDragon = ItemKind
      { isymbol :: ContentSymbol ItemKind
    isymbol  = ContentSymbol ItemKind -> ContentSymbol ItemKind
    forall c. ContentSymbol ItemKind -> ContentSymbol ItemKind
    toContentSymbol ContentSymbol ItemKind
    'k'
      , iname :: Text
    iname    = Text
    "Komodo dragon"
      , ifreq :: Freqs ItemKind
    ifreq    = [(GroupName ItemKind
    ANIMAL, Int
    100), (GroupName ItemKind
    MOBILE, Int
    1), (GroupName ItemKind
    MOBILE_ANIMAL, Int
    100)]
      , iflavour :: [Flavour]
    iflavour = [Color] -> [Flavour]
    zipPlain [Color
    BrRed]  -- speedy, so bright red
      , icount :: Dice
    icount   = Dice
    1
      , irarity :: Rarity
    irarity  = [(Double
    9, Int
    0), (Double
    10, Int
    11), (Double
    20, Int
    20)]
      , iverbHit :: Text
    iverbHit = Text
    "thud"
      , iweight :: Int
    iweight  = Int
    80000
      , idamage :: Dice
    idamage  = Dice
    0
      , iaspects :: [Aspect]
    iaspects = [ Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxHP Dice
    40, Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxCalm Dice
    60  -- regens
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkSpeed Dice
    17, Skill -> Dice -> Aspect
    AddSkill Skill
    SkNocto Dice
    2
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkHurtMelee Dice
    60  -- great fighter with low cooldowns
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkAggression Dice
    1  -- match the description
                   , Flag -> Aspect
    SetFlag Flag
    Durable ]
      , ieffects :: [Effect]
    ieffects = []
      , idesc :: Text
    idesc    = Text
    "Larger and more aggressive than any other lizard, but as easily recovering from wounds as its lesser cousins."
      , ikit :: [(GroupName ItemKind, CStore)]
    ikit     = [ (GroupName ItemKind
    S_LARGE_TAIL, CStore
    COrgan), (GroupName ItemKind
    S_JAW, CStore
    COrgan)
                   , (GroupName ItemKind
    S_LIP, CStore
    COrgan), (GroupName ItemKind
    S_FOOT, CStore
    COrgan)
                   , (GroupName ItemKind
    S_SPEED_GLAND_5, CStore
    COrgan), (GroupName ItemKind
    S_ARMORED_SKIN, CStore
    COrgan)
                   , (GroupName ItemKind
    S_EYE_3, CStore
    COrgan), (GroupName ItemKind
    S_NOSTRIL, CStore
    COrgan), (GroupName ItemKind
    S_EAR_3, CStore
    COrgan)
                   , (GroupName ItemKind
    S_ANIMAL_BRAIN, CStore
    COrgan) ]
      }
    alligator :: ItemKind
    alligator = ItemKind  -- late, slow, deadly semi-tank with some armor;
                          -- too deadly to get more HP; bombs the only recourse
      { isymbol :: ContentSymbol ItemKind
    isymbol  = ContentSymbol ItemKind -> ContentSymbol ItemKind
    forall c. ContentSymbol ItemKind -> ContentSymbol ItemKind
    toContentSymbol ContentSymbol ItemKind
    'a'
      , iname :: Text
    iname    = Text
    "alligator"
      , ifreq :: Freqs ItemKind
    ifreq    = [(GroupName ItemKind
    ANIMAL, Int
    100), (GroupName ItemKind
    MOBILE, Int
    1), (GroupName ItemKind
    MOBILE_ANIMAL, Int
    100)]
      , iflavour :: [Flavour]
    iflavour = [Color] -> [Flavour]
    zipPlain [Color
    Blue]
      , icount :: Dice
    icount   = Dice
    1
      , irarity :: Rarity
    irarity  = [(Double
    9, Int
    0), (Double
    10, Int
    12), (Double
    20, Int
    10), (Double
    40, Int
    40)]
      , iverbHit :: Text
    iverbHit = Text
    "thud"
      , iweight :: Int
    iweight  = Int
    80000
      , idamage :: Dice
    idamage  = Dice
    0
      , iaspects :: [Aspect]
    iaspects = [ Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxHP Dice
    55, Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxCalm Dice
    70
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkSpeed Dice
    18, Skill -> Dice -> Aspect
    AddSkill Skill
    SkNocto Dice
    2
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkSwimming Dice
    100  -- swims better than walks
                   , Flag -> Aspect
    SetFlag Flag
    Durable ]
      , ieffects :: [Effect]
    ieffects = []
      , idesc :: Text
    idesc    = Text
    "An armored predator from the dawn of time. You better not get within its reach."
      , ikit :: [(GroupName ItemKind, CStore)]
    ikit     = [ (GroupName ItemKind
    S_HUGE_TAIL, CStore
    COrgan)  -- the special trick, breaking frontline
                   , (GroupName ItemKind
    S_LARGE_JAW, CStore
    COrgan)
                   , (GroupName ItemKind
    S_SMALL_CLAW, CStore
    COrgan)
                   , (GroupName ItemKind
    S_ARMORED_SKIN, CStore
    COrgan)
                   , (GroupName ItemKind
    S_EYE_6, CStore
    COrgan), (GroupName ItemKind
    S_EAR_8, CStore
    COrgan)
                   , (GroupName ItemKind
    S_ANIMAL_BRAIN, CStore
    COrgan) ]
      }
    rhinoceros :: ItemKind
    rhinoceros = ItemKind
      { isymbol :: ContentSymbol ItemKind
    isymbol  = ContentSymbol ItemKind -> ContentSymbol ItemKind
    forall c. ContentSymbol ItemKind -> ContentSymbol ItemKind
    toContentSymbol ContentSymbol ItemKind
    'R'
      , iname :: Text
    iname    = Text
    "The Maddened Rhinoceros"
      , ifreq :: Freqs ItemKind
    ifreq    = [(GroupName ItemKind
    ANIMAL, Int
    100), (GroupName ItemKind
    MOBILE, Int
    1)]
      , iflavour :: [Flavour]
    iflavour = [Color] -> [Flavour]
    zipPlain [Color
    Brown]
      , icount :: Dice
    icount   = Dice
    1
      , irarity :: Rarity
    irarity  = [(Double
    2, Int
    0), (Double
    3, Int
    1000), (Double
    4, Int
    0)]  -- an early unique
      , iverbHit :: Text
    iverbHit = Text
    "thud"
      , iweight :: Int
    iweight  = Int
    80000
      , idamage :: Dice
    idamage  = Dice
    0
      , iaspects :: [Aspect]
    iaspects = [ Flag -> Aspect
    SetFlag Flag
    Unique
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxHP Dice
    90, Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxCalm Dice
    60
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkSpeed Dice
    27, Skill -> Dice -> Aspect
    AddSkill Skill
    SkNocto Dice
    2
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkAggression Dice
    2
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkAlter (-Dice
    1)  -- can't use hard stairs nor dig;
                                            -- a weak miniboss
                   , Flag -> Aspect
    SetFlag Flag
    Durable ]
      , ieffects :: [Effect]
    ieffects = []
      , idesc :: Text
    idesc    = Text
    "The last of its kind. Blind with rage. Charges at deadly speed."
      , ikit :: [(GroupName ItemKind, CStore)]
    ikit     = [ (GroupName ItemKind
    S_RHINO_HORN, CStore
    COrgan), (GroupName ItemKind
    S_SNOUT, CStore
    COrgan)
                   , (GroupName ItemKind
    S_ARMORED_SKIN, CStore
    COrgan)
                   , (GroupName ItemKind
    S_EYE_3, CStore
    COrgan), (GroupName ItemKind
    S_EAR_8, CStore
    COrgan)
                   , (GroupName ItemKind
    S_ANIMAL_BRAIN, CStore
    COrgan) ]
      }

    -- * Non-animal animals

    beeSwarm :: ItemKind
    beeSwarm = ItemKind
      { isymbol :: ContentSymbol ItemKind
    isymbol  = ContentSymbol ItemKind -> ContentSymbol ItemKind
    forall c. ContentSymbol ItemKind -> ContentSymbol ItemKind
    toContentSymbol ContentSymbol ItemKind
    'b'
      , iname :: Text
    iname    = Text
    "bee swarm"
      , ifreq :: Freqs ItemKind
    ifreq    = [(GroupName ItemKind
    ANIMAL, Int
    100), (GroupName ItemKind
    INSECT, Int
    50), (GroupName ItemKind
    MOBILE, Int
    1)]
      , iflavour :: [Flavour]
    iflavour = [Color] -> [Flavour]
    zipPlain [Color
    Brown]
      , icount :: Dice
    icount   = Dice
    1
      , irarity :: Rarity
    irarity  = [(Double
    1, Int
    3), (Double
    10, Int
    4)]
      , iverbHit :: Text
    iverbHit = Text
    "buzz"
      , iweight :: Int
    iweight  = Int
    1000
      , idamage :: Dice
    idamage  = Dice
    0
      , iaspects :: [Aspect]
    iaspects = [ Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxHP Dice
    10, Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxCalm Dice
    60
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkSpeed Dice
    30, Skill -> Dice -> Aspect
    AddSkill Skill
    SkNocto Dice
    2  -- armor in sting
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkAlter (-Dice
    2)  -- can't use hard stairs nor doors
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkWait (-Dice
    2)  -- can't brace, sleep and lurk
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkFlying Dice
    10  -- flies slowly, but far
                   , Flag -> Aspect
    SetFlag Flag
    Durable ]
      , ieffects :: [Effect]
    ieffects = []
      , idesc :: Text
    idesc    = Text
    "Every bee would die for the queen."
      , ikit :: [(GroupName ItemKind, CStore)]
    ikit     = [ (GroupName ItemKind
    S_BEE_STING, CStore
    COrgan)  -- weaponless when it's used up
                   , (GroupName ItemKind
    S_VISION_6, CStore
    COrgan), (GroupName ItemKind
    S_EAR_6, CStore
    COrgan)
                   , (GroupName ItemKind
    S_INSECT_MORTALITY, CStore
    COrgan), (GroupName ItemKind
    S_ANIMAL_BRAIN, CStore
    COrgan) ]
      }
    hornetSwarm :: ItemKind
    hornetSwarm = ItemKind  -- kind of tank with armor, but short-lived
      { isymbol :: ContentSymbol ItemKind
    isymbol  = ContentSymbol ItemKind -> ContentSymbol ItemKind
    forall c. ContentSymbol ItemKind -> ContentSymbol ItemKind
    toContentSymbol ContentSymbol ItemKind
    'h'
      , iname :: Text
    iname    = Text
    "hornet swarm"
      , ifreq :: Freqs ItemKind
    ifreq    = [(GroupName ItemKind
    ANIMAL, Int
    100), (GroupName ItemKind
    INSECT, Int
    100), (GroupName ItemKind
    MOBILE, Int
    1), (GroupName ItemKind
    MOBILE_ANIMAL, Int
    100)]
      , iflavour :: [Flavour]
    iflavour = [Color] -> [Flavour]
    zipPlain [Color
    Magenta]
      , icount :: Dice
    icount   = Dice
    1
      , irarity :: Rarity
    irarity  = [(Double
    5, Int
    1), (Double
    10, Int
    4), (Double
    20, Int
    10)]
          -- should be many, because die after a time
      , iverbHit :: Text
    iverbHit = Text
    "buzz"
      , iweight :: Int
    iweight  = Int
    1000
      , idamage :: Dice
    idamage  = Dice
    0
      , iaspects :: [Aspect]
    iaspects = [ Skill -> Dice -> Aspect
    AddSkill Skill
    SkArmorMelee Dice
    80, Skill -> Dice -> Aspect
    AddSkill Skill
    SkArmorRanged Dice
    40
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkHurtMelee Dice
    50
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxHP Dice
    10, Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxCalm Dice
    70
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkSpeed Dice
    30, Skill -> Dice -> Aspect
    AddSkill Skill
    SkNocto Dice
    2
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkAlter (-Dice
    2)  -- can't use hard stairs nor doors
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkWait (-Dice
    2)  -- can't brace, sleep and lurk
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkFlying Dice
    10  -- flies slowly, but far
                   , Flag -> Aspect
    SetFlag Flag
    Durable ]
      , ieffects :: [Effect]
    ieffects = []
      , idesc :: Text
    idesc    = Text
    "A vicious cloud of stings and hate."
      , ikit :: [(GroupName ItemKind, CStore)]
    ikit     = [ (GroupName ItemKind
    S_STING, CStore
    COrgan)  -- when on cooldown, it's weaponless
                   , (GroupName ItemKind
    S_VISION_6, CStore
    COrgan), (GroupName ItemKind
    S_EAR_6, CStore
    COrgan)
                   , (GroupName ItemKind
    S_INSECT_MORTALITY, CStore
    COrgan), (GroupName ItemKind
    S_ANIMAL_BRAIN, CStore
    COrgan) ]
      }
    thornbush :: ItemKind
    thornbush = ItemKind  -- the wimpiest kind of early tank
      { isymbol :: ContentSymbol ItemKind
    isymbol  = ContentSymbol ItemKind -> ContentSymbol ItemKind
    forall c. ContentSymbol ItemKind -> ContentSymbol ItemKind
    toContentSymbol ContentSymbol ItemKind
    't'
      , iname :: Text
    iname    = Text
    "thornbush"
      , ifreq :: Freqs ItemKind
    ifreq    = [(GroupName ItemKind
    ANIMAL, Int
    20), (GroupName ItemKind
    IMMOBILE_ANIMAL, Int
    20)]
      , iflavour :: [Flavour]
    iflavour = [Color] -> [Flavour]
    zipPlain [Color
    Brown]
      , icount :: Dice
    icount   = Dice
    1
      , irarity :: Rarity
    irarity  = [(Double
    1, Int
    13)]
      , iverbHit :: Text
    iverbHit = Text
    "scrape"
      , iweight :: Int
    iweight  = Int
    80000
      , idamage :: Dice
    idamage  = Dice
    0
      , iaspects :: [Aspect]
    iaspects = [ Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxHP Dice
    30, Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxCalm Dice
    999
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkSpeed Dice
    22, Skill -> Dice -> Aspect
    AddSkill Skill
    SkNocto Dice
    2
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkWait Dice
    1, Skill -> Dice -> Aspect
    AddSkill Skill
    SkMelee Dice
    1  -- no brain
                   , Flag -> Aspect
    SetFlag Flag
    Durable ]
      , ieffects :: [Effect]
    ieffects = []
      , idesc :: Text
    idesc    = Text
    "Each branch bears long, curved thorns."
      , ikit :: [(GroupName ItemKind, CStore)]
    ikit     = [ (GroupName ItemKind
    S_THORN, CStore
    COrgan)  -- after all run out, it's weaponless
                   , (GroupName ItemKind
    S_BARK, CStore
    COrgan) ]
      }
    geyserBoiling :: ItemKind
    geyserBoiling = ItemKind
      { isymbol :: ContentSymbol ItemKind
    isymbol  = ContentSymbol ItemKind -> ContentSymbol ItemKind
    forall c. ContentSymbol ItemKind -> ContentSymbol ItemKind
    toContentSymbol ContentSymbol ItemKind
    'g'
      , iname :: Text
    iname    = Text
    "geyser"
      , ifreq :: Freqs ItemKind
    ifreq    = [(GroupName ItemKind
    ANIMAL, Int
    8), (GroupName ItemKind
    IMMOBILE_ANIMAL, Int
    30), (GroupName ItemKind
    GEOPHENOMENON, Int
    1)]
      , iflavour :: [Flavour]
    iflavour = [Color] -> [Flavour]
    zipPlain [Color
    Blue]
      , icount :: Dice
    icount   = Dice
    1
      , irarity :: Rarity
    irarity  = [(Double
    1, Int
    10), (Double
    10, Int
    6)]
      , iverbHit :: Text
    iverbHit = Text
    "thud"
      , iweight :: Int
    iweight  = Int
    80000
      , idamage :: Dice
    idamage  = Dice
    0
      , iaspects :: [Aspect]
    iaspects = [ Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxHP Dice
    10, Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxCalm Dice
    999
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkSpeed Dice
    11, Skill -> Dice -> Aspect
    AddSkill Skill
    SkNocto Dice
    2
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkWait Dice
    1, Skill -> Dice -> Aspect
    AddSkill Skill
    SkMelee Dice
    1  -- no brain
                   , Flag -> Aspect
    SetFlag Flag
    Durable ]
      , ieffects :: [Effect]
    ieffects = []
      , idesc :: Text
    idesc    = Text
    "A jet of acidic water, hot enough to melt flesh."
      , ikit :: [(GroupName ItemKind, CStore)]
    ikit     = [(GroupName ItemKind
    S_BOILING_VENT, CStore
    COrgan), (GroupName ItemKind
    S_BOILING_FISSURE, CStore
    COrgan)]
      }
    geyserArsenic :: ItemKind
    geyserArsenic = ItemKind
      { isymbol :: ContentSymbol ItemKind
    isymbol  = ContentSymbol ItemKind -> ContentSymbol ItemKind
    forall c. ContentSymbol ItemKind -> ContentSymbol ItemKind
    toContentSymbol ContentSymbol ItemKind
    'g'
      , iname :: Text
    iname    = Text
    "arsenic geyser"
      , ifreq :: Freqs ItemKind
    ifreq    = [(GroupName ItemKind
    ANIMAL, Int
    8), (GroupName ItemKind
    IMMOBILE_ANIMAL, Int
    40), (GroupName ItemKind
    GEOPHENOMENON, Int
    1)]
      , iflavour :: [Flavour]
    iflavour = [Color] -> [Flavour]
    zipPlain [Color
    Cyan]
      , icount :: Dice
    icount   = Dice
    1
      , irarity :: Rarity
    irarity  = [(Double
    1, Int
    10), (Double
    10, Int
    6)]
      , iverbHit :: Text
    iverbHit = Text
    "thud"
      , iweight :: Int
    iweight  = Int
    80000
      , idamage :: Dice
    idamage  = Dice
    0
      , iaspects :: [Aspect]
    iaspects = [ Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxHP Dice
    20, Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxCalm Dice
    999
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkSpeed Dice
    22, Skill -> Dice -> Aspect
    AddSkill Skill
    SkNocto Dice
    2, Skill -> Dice -> Aspect
    AddSkill Skill
    SkShine Dice
    3
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkWait Dice
    1, Skill -> Dice -> Aspect
    AddSkill Skill
    SkMelee Dice
    1  -- no brain
                   , Flag -> Aspect
    SetFlag Flag
    Durable ]
      , ieffects :: [Effect]
    ieffects = []
      , idesc :: Text
    idesc    = Text
    "The sharp scent betrays the poison within the spray."
      , ikit :: [(GroupName ItemKind, CStore)]
    ikit     = [(GroupName ItemKind
    S_ARSENIC_VENT, CStore
    COrgan), (GroupName ItemKind
    S_ARSENIC_FISSURE, CStore
    COrgan)]
      }
    geyserSulfur :: ItemKind
    geyserSulfur = ItemKind
      { isymbol :: ContentSymbol ItemKind
    isymbol  = ContentSymbol ItemKind -> ContentSymbol ItemKind
    forall c. ContentSymbol ItemKind -> ContentSymbol ItemKind
    toContentSymbol ContentSymbol ItemKind
    'g'
      , iname :: Text
    iname    = Text
    "sulfur geyser"
      , ifreq :: Freqs ItemKind
    ifreq    = [(GroupName ItemKind
    ANIMAL, Int
    8), (GroupName ItemKind
    IMMOBILE_ANIMAL, Int
    120), (GroupName ItemKind
    GEOPHENOMENON, Int
    1)]
      , iflavour :: [Flavour]
    iflavour = [Color] -> [Flavour]
    zipPlain [Color
    BrYellow]  -- exception, animal with bright color
      , icount :: Dice
    icount   = Dice
    1
      , irarity :: Rarity
    irarity  = [(Double
    1, Int
    10), (Double
    10, Int
    6)]
      , iverbHit :: Text
    iverbHit = Text
    "thud"
      , iweight :: Int
    iweight  = Int
    80000
      , idamage :: Dice
    idamage  = Dice
    0
      , iaspects :: [Aspect]
    iaspects = [ Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxHP Dice
    20, Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxCalm Dice
    999
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkSpeed Dice
    22, Skill -> Dice -> Aspect
    AddSkill Skill
    SkNocto Dice
    2, Skill -> Dice -> Aspect
    AddSkill Skill
    SkShine Dice
    3
                   , Skill -> Dice -> Aspect
    AddSkill Skill
    SkWait Dice
    1, Skill -> Dice -> Aspect
    AddSkill Skill
    SkMelee Dice
    1  -- no brain
                   , Flag -> Aspect
    SetFlag Flag
    Durable ]
      , ieffects :: [Effect]
    ieffects = []
      , idesc :: Text
    idesc    = Text
    "The pool boils and bubbles, stinking of rotten eggs. Despite the smell, these waters purify and strengthen."
      , ikit :: [(GroupName ItemKind, CStore)]
    ikit     = [(GroupName ItemKind
    S_SULFUR_VENT, CStore
    COrgan), (GroupName ItemKind
    S_SULFUR_FISSURE, CStore
    COrgan)]
      }