    -- | Temporary pseudo-organ (condition) definitions.
    module Content.ItemKindTemporary
      ( -- * Group name patterns
        pattern S_IMMOBILE, pattern S_PACIFIED, pattern S_IRREPLACEABLE, pattern S_RETAINING, pattern S_IMPATIENT, pattern S_DISPOSSESSED, pattern S_WITHHOLDING, pattern S_PARSIMONIOUS
      , pattern S_MORE_MOBILE, pattern S_MORE_COMBATIVE, pattern S_MORE_DISPLACING, pattern S_MORE_MODIFYING, pattern S_MORE_PATIENT, pattern S_MORE_TIDY, pattern S_MORE_PROJECTING, pattern S_MORE_PRACTICAL
      , pattern S_STRENGTHENED, pattern S_WEAKENED, pattern S_PROTECTED_FROM_MELEE, pattern S_PROTECTED_FROM_RANGED, pattern S_DEFENSELESS, pattern S_RESOLUTE, pattern S_HASTED, pattern S_SLOWED, pattern S_FAR_SIGHTED, pattern S_BLIND, pattern S_KEEN_SMELLING, pattern S_FOUL_SMELLING, pattern S_ROSE_SMELLING, pattern S_RANGED_DEFLECTING, pattern S_MELEE_DEFLECTING, pattern S_SHINY_EYED, pattern S_DEAFENED, pattern S_DEAF, pattern S_DRUNK, pattern S_FRENZIED, pattern S_REGENERATING, pattern S_POISONED, pattern S_SLOW_RESISTANT, pattern S_POISON_RESISTANT
      , temporariesGNSingleton, noStatGN, bonusStatGN
      , -- * Content
        temporaries
      ) where

    import Prelude ()

    import Game.LambdaHack.Core.Prelude

    import Game.LambdaHack.Content.ItemKind
    import Game.LambdaHack.Core.Dice
    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

    -- * Group name patterns

    noStatGN :: [GroupName ItemKind]
    noStatGN :: [GroupName ItemKind]
    noStatGN =
           [GroupName ItemKind
    S_IMMOBILE, GroupName ItemKind
    S_PACIFIED, GroupName ItemKind
    S_IRREPLACEABLE, GroupName ItemKind
    S_RETAINING, GroupName ItemKind
    S_IMPATIENT, GroupName ItemKind
    S_DISPOSSESSED, GroupName ItemKind
    S_WITHHOLDING, GroupName ItemKind
    S_PARSIMONIOUS]

    bonusStatGN :: [GroupName ItemKind]
    bonusStatGN :: [GroupName ItemKind]
    bonusStatGN =
           [GroupName ItemKind
    S_MORE_MOBILE, GroupName ItemKind
    S_MORE_COMBATIVE, GroupName ItemKind
    S_MORE_DISPLACING, GroupName ItemKind
    S_MORE_MODIFYING, GroupName ItemKind
    S_MORE_PATIENT, GroupName ItemKind
    S_MORE_TIDY, GroupName ItemKind
    S_MORE_PROJECTING, GroupName ItemKind
    S_MORE_PRACTICAL]

    temporariesGNSingleton :: [GroupName ItemKind]
    temporariesGNSingleton :: [GroupName ItemKind]
    temporariesGNSingleton =
           [GroupName ItemKind
    S_STRENGTHENED, GroupName ItemKind
    S_WEAKENED, GroupName ItemKind
    S_PROTECTED_FROM_MELEE, GroupName ItemKind
    S_PROTECTED_FROM_RANGED, GroupName ItemKind
    S_DEFENSELESS, GroupName ItemKind
    S_RESOLUTE, GroupName ItemKind
    S_HASTED, GroupName ItemKind
    S_SLOWED, GroupName ItemKind
    S_FAR_SIGHTED, GroupName ItemKind
    S_BLIND, GroupName ItemKind
    S_KEEN_SMELLING, GroupName ItemKind
    S_FOUL_SMELLING, GroupName ItemKind
    S_ROSE_SMELLING, GroupName ItemKind
    S_RANGED_DEFLECTING, GroupName ItemKind
    S_MELEE_DEFLECTING, GroupName ItemKind
    S_SHINY_EYED, GroupName ItemKind
    S_DEAFENED, GroupName ItemKind
    S_DEAF, GroupName ItemKind
    S_DRUNK, GroupName ItemKind
    S_FRENZIED, GroupName ItemKind
    S_REGENERATING, GroupName ItemKind
    S_POISONED, GroupName ItemKind
    S_SLOW_RESISTANT, GroupName ItemKind
    S_POISON_RESISTANT]
        [GroupName ItemKind]
    -> [GroupName ItemKind] -> [GroupName ItemKind]
    forall a. [a] -> [a] -> [a]
    ++ [GroupName ItemKind]
    noStatGN [GroupName ItemKind]
    -> [GroupName ItemKind] -> [GroupName ItemKind]
    forall a. [a] -> [a] -> [a]
    ++ [GroupName ItemKind]
    bonusStatGN

    pattern S_IMMOBILE, S_PACIFIED, S_IRREPLACEABLE, S_RETAINING, S_IMPATIENT, S_DISPOSSESSED, S_WITHHOLDING, S_PARSIMONIOUS :: GroupName ItemKind

    pattern S_MORE_MOBILE, S_MORE_COMBATIVE, S_MORE_DISPLACING, S_MORE_MODIFYING, S_MORE_PATIENT, S_MORE_TIDY, S_MORE_PROJECTING, S_MORE_PRACTICAL :: GroupName ItemKind

    pattern S_STRENGTHENED, S_WEAKENED, S_PROTECTED_FROM_MELEE, S_PROTECTED_FROM_RANGED, S_DEFENSELESS, S_RESOLUTE, S_HASTED, S_SLOWED, S_FAR_SIGHTED, S_BLIND, S_KEEN_SMELLING, S_FOUL_SMELLING, S_ROSE_SMELLING, S_RANGED_DEFLECTING, S_MELEE_DEFLECTING, S_SHINY_EYED, S_DEAFENED, S_DEAF, S_DRUNK, S_FRENZIED, S_REGENERATING, S_POISONED, S_SLOW_RESISTANT, S_POISON_RESISTANT :: GroupName ItemKind

    pattern $mS_STRENGTHENED :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_STRENGTHENED :: GroupName ItemKind
    S_STRENGTHENED = GroupName "strengthened"
    pattern $mS_WEAKENED :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_WEAKENED :: GroupName ItemKind
    S_WEAKENED = GroupName "weakened"
    pattern $mS_PROTECTED_FROM_MELEE :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_PROTECTED_FROM_MELEE :: GroupName ItemKind
    S_PROTECTED_FROM_MELEE = GroupName "protected from melee"
    pattern $mS_PROTECTED_FROM_RANGED :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_PROTECTED_FROM_RANGED :: GroupName ItemKind
    S_PROTECTED_FROM_RANGED = GroupName "protected from ranged"
    pattern $mS_DEFENSELESS :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_DEFENSELESS :: GroupName ItemKind
    S_DEFENSELESS = GroupName "defenseless"
    pattern $mS_RESOLUTE :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_RESOLUTE :: GroupName ItemKind
    S_RESOLUTE = GroupName "resolute"
    pattern $mS_HASTED :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_HASTED :: GroupName ItemKind
    S_HASTED = GroupName "hasted"
    pattern $mS_SLOWED :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_SLOWED :: GroupName ItemKind
    S_SLOWED = GroupName "slowed"
    pattern $mS_FAR_SIGHTED :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_FAR_SIGHTED :: GroupName ItemKind
    S_FAR_SIGHTED = GroupName "far-sighted"
    pattern $mS_BLIND :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_BLIND :: GroupName ItemKind
    S_BLIND = GroupName "blind"
    pattern $mS_KEEN_SMELLING :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_KEEN_SMELLING :: GroupName ItemKind
    S_KEEN_SMELLING = GroupName "keen-smelling"
    pattern $mS_FOUL_SMELLING :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_FOUL_SMELLING :: GroupName ItemKind
    S_FOUL_SMELLING = GroupName "foul-smelling"
    pattern $mS_ROSE_SMELLING :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_ROSE_SMELLING :: GroupName ItemKind
    S_ROSE_SMELLING = GroupName "rose-smelling"
    pattern $mS_RANGED_DEFLECTING :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_RANGED_DEFLECTING :: GroupName ItemKind
    S_RANGED_DEFLECTING = GroupName "ranged-deflecting"
    pattern $mS_MELEE_DEFLECTING :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_MELEE_DEFLECTING :: GroupName ItemKind
    S_MELEE_DEFLECTING = GroupName "melee-deflecting"
    pattern $mS_SHINY_EYED :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_SHINY_EYED :: GroupName ItemKind
    S_SHINY_EYED = GroupName "shiny-eyed"
    pattern $mS_DEAFENED :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_DEAFENED :: GroupName ItemKind
    S_DEAFENED = GroupName "deafened"
    pattern $mS_DEAF :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_DEAF :: GroupName ItemKind
    S_DEAF = GroupName "deaf"
    pattern $mS_DRUNK :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_DRUNK :: GroupName ItemKind
    S_DRUNK = GroupName "drunk"
    pattern $mS_FRENZIED :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_FRENZIED :: GroupName ItemKind
    S_FRENZIED = GroupName "frenzied"
    pattern $mS_REGENERATING :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_REGENERATING :: GroupName ItemKind
    S_REGENERATING = GroupName "regenerating"
    pattern $mS_POISONED :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_POISONED :: GroupName ItemKind
    S_POISONED = GroupName "poisoned"
    pattern $mS_SLOW_RESISTANT :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_SLOW_RESISTANT :: GroupName ItemKind
    S_SLOW_RESISTANT = GroupName "slow resistant"
    pattern $mS_POISON_RESISTANT :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_POISON_RESISTANT :: GroupName ItemKind
    S_POISON_RESISTANT = GroupName "poison resistant"
    pattern $mS_IMMOBILE :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_IMMOBILE :: GroupName ItemKind
    S_IMMOBILE = GroupName "immobile"
    pattern $mS_PACIFIED :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_PACIFIED :: GroupName ItemKind
    S_PACIFIED = GroupName "pacified"
    pattern $mS_IRREPLACEABLE :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_IRREPLACEABLE :: GroupName ItemKind
    S_IRREPLACEABLE = GroupName "irreplaceable"
    pattern $mS_RETAINING :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_RETAINING :: GroupName ItemKind
    S_RETAINING = GroupName "retaining"
    pattern $mS_IMPATIENT :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_IMPATIENT :: GroupName ItemKind
    S_IMPATIENT = GroupName "impatient"
    pattern $mS_DISPOSSESSED :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_DISPOSSESSED :: GroupName ItemKind
    S_DISPOSSESSED = GroupName "dispossessed"
    pattern $mS_WITHHOLDING :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_WITHHOLDING :: GroupName ItemKind
    S_WITHHOLDING = GroupName "withholding"
    pattern $mS_PARSIMONIOUS :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_PARSIMONIOUS :: GroupName ItemKind
    S_PARSIMONIOUS = GroupName "parsimonious"
    pattern $mS_MORE_MOBILE :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_MORE_MOBILE :: GroupName ItemKind
    S_MORE_MOBILE = GroupName "super-mobile"
    pattern $mS_MORE_COMBATIVE :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_MORE_COMBATIVE :: GroupName ItemKind
    S_MORE_COMBATIVE = GroupName "super-combative"
    pattern $mS_MORE_DISPLACING :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_MORE_DISPLACING :: GroupName ItemKind
    S_MORE_DISPLACING = GroupName "super-displacing"
    pattern $mS_MORE_MODIFYING :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_MORE_MODIFYING :: GroupName ItemKind
    S_MORE_MODIFYING = GroupName "super-modifying"
    pattern $mS_MORE_PATIENT :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_MORE_PATIENT :: GroupName ItemKind
    S_MORE_PATIENT = GroupName "super-patient"
    pattern $mS_MORE_TIDY :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_MORE_TIDY :: GroupName ItemKind
    S_MORE_TIDY = GroupName "super-tidy"
    pattern $mS_MORE_PROJECTING :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_MORE_PROJECTING :: GroupName ItemKind
    S_MORE_PROJECTING = GroupName "super-projecting"
    pattern $mS_MORE_PRACTICAL :: forall {r}. GroupName ItemKind -> ((# #) -> r) -> ((# #) -> r) -> r
    $bS_MORE_PRACTICAL :: GroupName ItemKind
    S_MORE_PRACTICAL = GroupName "super-practical"

    -- * Content

    temporaries :: [ItemKind]
    temporaries :: [ItemKind]
    temporaries =
      [ItemKind
    tmpStrengthened, ItemKind
    tmpWeakened, ItemKind
    tmpProtectedMelee, ItemKind
    tmpProtectedRanged, ItemKind
    tmpDefenseless, ItemKind
    tmpResolute, ItemKind
    tmpFast20, ItemKind
    tmpSlow10, ItemKind
    tmpFarSighted, ItemKind
    tmpBlind, ItemKind
    tmpKeenSmelling, ItemKind
    tmpFoulSmelling, ItemKind
    tmpRoseSmelling, ItemKind
    tmpRangedDeflecting, ItemKind
    tmpMeleeDeflecting, ItemKind
    tmpNoctovision, ItemKind
    tmpDeafened, ItemKind
    tmpDeaf, ItemKind
    tmpDrunk, ItemKind
    tmpBonusSkAggresion, ItemKind
    tmpRegenerating, ItemKind
    tmpPoisoned, ItemKind
    tmpSlow10Resistant, ItemKind
    tmpPoisonResistant, ItemKind
    tmpNoSkMove, ItemKind
    tmpNoSkMelee, ItemKind
    tmpNoSkDisplace, ItemKind
    tmpNoSkAlter, ItemKind
    tmpNoSkWait, ItemKind
    tmpNoSkMoveItem, ItemKind
    tmpNoSkProject, ItemKind
    tmpNoSkApply, ItemKind
    tmpBonusSkMove, ItemKind
    tmpBonusSkMelee, ItemKind
    tmpBonusSkDisplace, ItemKind
    tmpBonusSkAlter, ItemKind
    tmpBonusSkWait, ItemKind
    tmpBonusSkMoveItem, ItemKind
    tmpBonusSkProject, ItemKind
    tmpBonusSkApply]

    tmpStrengthened,    tmpWeakened, tmpProtectedMelee, tmpProtectedRanged, tmpDefenseless, tmpResolute, tmpFast20, tmpSlow10, tmpFarSighted, tmpBlind, tmpKeenSmelling, tmpFoulSmelling, tmpRoseSmelling, tmpRangedDeflecting, tmpMeleeDeflecting, tmpNoctovision, tmpDeafened, tmpDeaf, tmpDrunk, tmpBonusSkAggresion, tmpRegenerating, tmpPoisoned, tmpSlow10Resistant, tmpPoisonResistant, tmpNoSkMove, tmpNoSkMelee, tmpNoSkDisplace, tmpNoSkAlter, tmpNoSkWait, tmpNoSkMoveItem, tmpNoSkProject, tmpNoSkApply, tmpBonusSkMove, tmpBonusSkMelee, tmpBonusSkDisplace, tmpBonusSkAlter, tmpBonusSkWait, tmpBonusSkMoveItem, tmpBonusSkProject, tmpBonusSkApply :: ItemKind

    -- The @name@ is be used in item description, so it should be an adjective
    -- describing the temporary set of aspects.
    -- The messages are needed also under @OnSmash@ to display when item removed
    -- via @DropItem@ and not via natural periodic activation.
    tmpAspects :: GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects :: GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects GroupName ItemKind
    grp [Aspect]
    aspects =
      let name :: Text
    name = GroupName ItemKind -> Text
    forall c. GroupName c -> Text
    fromGroupName GroupName ItemKind
    grp  -- @iname@ must match @ifreq@, see @myBadGrps@
      in ItemKind
        { isymbol :: ContentSymbol ItemKind
    isymbol  = ContentSymbol ItemKind -> ContentSymbol ItemKind
    forall c. ContentSymbol ItemKind -> ContentSymbol ItemKind
    toContentSymbol ContentSymbol ItemKind
    '+'
        , iname :: Text
    iname    = Text
    name
        , ifreq :: Freqs ItemKind
    ifreq    = [(GroupName ItemKind
    grp, Int
    1), (GroupName ItemKind
    CONDITION, Int
    1)]
        , iflavour :: [Flavour]
    iflavour = [Color] -> [Flavour]
    zipPlain [Color
    BrWhite]
        , icount :: Dice
    icount   = Dice
    1
        , irarity :: Rarity
    irarity  = [(Double
    1, Int
    1)]
        , iverbHit :: Text
    iverbHit = Text
    "affect"
        , iweight :: Int
    iweight  = Int
    0
        , idamage :: Dice
    idamage  = Dice
    0
        , iaspects :: [Aspect]
    iaspects = -- timeout is 0; activates and vanishes soon,
                     -- depending on initial timer setting
                     [Aspect]
    aspects
                     [Aspect] -> [Aspect] -> [Aspect]
    forall a. [a] -> [a] -> [a]
    ++ [Flag -> Aspect
    SetFlag Flag
    Periodic, Flag -> Aspect
    SetFlag Flag
    Fragile, Flag -> Aspect
    SetFlag Flag
    Condition]
        , ieffects :: [Effect]
    ieffects = [ Effect -> Effect
    OnSmash (Effect -> Effect) -> Effect -> Effect
    forall a b. (a -> b) -> a -> b
    $ Text -> Effect
    verbMsgLess Text
    name
                       -- announce partial neutralization, but don't spam
                       -- about normal periodic wear each turn
                     , Effect -> Effect
    OnSmash (Effect -> Effect) -> Effect -> Effect
    forall a b. (a -> b) -> a -> b
    $ Text -> Effect
    verbMsgNoLonger Text
    name  -- for forced neutralization
                     , Text -> Effect
    verbMsgNoLonger Text
    name ]  -- for periodic wear of last copy
        , idesc :: Text
    idesc    = Text
    ""  -- no description needed; powers are enough
        , ikit :: [(GroupName ItemKind, CStore)]
    ikit     = []
        }

    tmpEffects :: GroupName ItemKind -> Dice -> [Effect] -> ItemKind
    tmpEffects :: GroupName ItemKind -> Dice -> [Effect] -> ItemKind
    tmpEffects GroupName ItemKind
    grp Dice
    icount [Effect]
    effects =
      let tmp :: ItemKind
    tmp = GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects GroupName ItemKind
    grp []
      in ItemKind
    tmp { icount
             , ieffects = effects ++ ieffects tmp
             }

    tmpStrengthened :: ItemKind
    tmpStrengthened = GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects GroupName ItemKind
    S_STRENGTHENED [Skill -> Dice -> Aspect
    AddSkill Skill
    SkHurtMelee Dice
    20]
    tmpWeakened :: ItemKind
    tmpWeakened = GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects GroupName ItemKind
    S_WEAKENED
                             [Skill -> Dice -> Aspect
    AddSkill Skill
    SkHurtMelee (-Dice
    30)]  -- don't cancel out ^
    tmpProtectedMelee :: ItemKind
    tmpProtectedMelee = GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects GroupName ItemKind
    S_PROTECTED_FROM_MELEE
                                   [Skill -> Dice -> Aspect
    AddSkill Skill
    SkArmorMelee Dice
    50]
    tmpProtectedRanged :: ItemKind
    tmpProtectedRanged = GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects GroupName ItemKind
    S_PROTECTED_FROM_RANGED
                                    [Skill -> Dice -> Aspect
    AddSkill Skill
    SkArmorRanged Dice
    25]
    tmpDefenseless :: ItemKind
    tmpDefenseless = GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects GroupName ItemKind
    S_DEFENSELESS [ Skill -> Dice -> Aspect
    AddSkill Skill
    SkArmorMelee (-Dice
    50)
                                              , Skill -> Dice -> Aspect
    AddSkill Skill
    SkArmorRanged (-Dice
    25) ]
    tmpResolute :: ItemKind
    tmpResolute = GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects GroupName ItemKind
    S_RESOLUTE [ Skill -> Dice -> Aspect
    AddSkill Skill
    SkMaxCalm Dice
    60
                                        , Skill -> Dice -> Aspect
    AddSkill Skill
    SkHearing Dice
    10 ]
    tmpFast20 :: ItemKind
    tmpFast20 = GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects GroupName ItemKind
    S_HASTED [Skill -> Dice -> Aspect
    AddSkill Skill
    SkSpeed Dice
    20]
    tmpSlow10 :: ItemKind
    tmpSlow10 = GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects GroupName ItemKind
    S_SLOWED [Skill -> Dice -> Aspect
    AddSkill Skill
    SkSpeed (-Dice
    10)]
    tmpFarSighted :: ItemKind
    tmpFarSighted = GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects GroupName ItemKind
    S_FAR_SIGHTED [Skill -> Dice -> Aspect
    AddSkill Skill
    SkSight Dice
    5]
    tmpBlind :: ItemKind
    tmpBlind = GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects GroupName ItemKind
    S_BLIND [ Skill -> Dice -> Aspect
    AddSkill Skill
    SkSight (-Dice
    99)
                                  , Skill -> Dice -> Aspect
    AddSkill Skill
    SkArmorMelee (-Dice
    30)
                                  , Skill -> Dice -> Aspect
    AddSkill Skill
    SkHearing Dice
    10 ]
    tmpKeenSmelling :: ItemKind
    tmpKeenSmelling = GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects GroupName ItemKind
    S_KEEN_SMELLING [Skill -> Dice -> Aspect
    AddSkill Skill
    SkSmell Dice
    2]
    tmpFoulSmelling :: ItemKind
    tmpFoulSmelling = GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects GroupName ItemKind
    S_FOUL_SMELLING [Skill -> Dice -> Aspect
    AddSkill Skill
    SkOdor Dice
    2]
    tmpRoseSmelling :: ItemKind
    tmpRoseSmelling = GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects GroupName ItemKind
    S_ROSE_SMELLING [Skill -> Dice -> Aspect
    AddSkill Skill
    SkOdor (-Dice
    4)]
    tmpRangedDeflecting :: ItemKind
    tmpRangedDeflecting =
      GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects GroupName ItemKind
    S_RANGED_DEFLECTING [Skill -> Dice -> Aspect
    AddSkill Skill
    SkDeflectRanged Dice
    1]
    tmpMeleeDeflecting :: ItemKind
    tmpMeleeDeflecting =
      GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects GroupName ItemKind
    S_MELEE_DEFLECTING [Skill -> Dice -> Aspect
    AddSkill Skill
    SkDeflectMelee Dice
    1]
    tmpNoctovision :: ItemKind
    tmpNoctovision = GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects GroupName ItemKind
    S_SHINY_EYED [Skill -> Dice -> Aspect
    AddSkill Skill
    SkNocto Dice
    2]
    tmpDeafened :: ItemKind
    tmpDeafened = GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects GroupName ItemKind
    S_DEAFENED [Skill -> Dice -> Aspect
    AddSkill Skill
    SkHearing (-Dice
    6)]
    tmpDeaf :: ItemKind
    tmpDeaf = GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects GroupName ItemKind
    S_DEAF [ Skill -> Dice -> Aspect
    AddSkill Skill
    SkHearing (-Dice
    99)
                                , Skill -> Dice -> Aspect
    AddSkill Skill
    SkArmorMelee (-Dice
    30) ]
    tmpDrunk :: ItemKind
    tmpDrunk = GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects GroupName ItemKind
    S_DRUNK [ Skill -> Dice -> Aspect
    AddSkill Skill
    SkHurtMelee Dice
    30  -- fury
                                  , Skill -> Dice -> Aspect
    AddSkill Skill
    SkArmorRanged (-Dice
    30)
                                  , Skill -> Dice -> Aspect
    AddSkill Skill
    SkSight (-Dice
    8) ]

    tmpBonusSkAggresion :: ItemKind
    tmpBonusSkAggresion =
      GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects GroupName ItemKind
    S_FRENZIED [ Skill -> Dice -> Aspect
    AddSkill Skill
    SkAggression Dice
    5
                            , Skill -> Dice -> Aspect
    AddSkill Skill
    SkArmorMelee (-Dice
    30) ]

    tmpRegenerating :: ItemKind
    tmpRegenerating =
      GroupName ItemKind -> Dice -> [Effect] -> ItemKind
    tmpEffects GroupName ItemKind
    S_REGENERATING (Dice
    4 Dice -> Dice -> Dice
    forall a. Num a => a -> a -> a
    + Int
    1 Int -> Int -> Dice
    `d` Int
    2) [Int -> Effect
    RefillHP Int
    1]
    tmpPoisoned :: ItemKind
    tmpPoisoned =
      GroupName ItemKind -> Dice -> [Effect] -> ItemKind
    tmpEffects GroupName ItemKind
    S_POISONED (Dice
    3 Dice -> Dice -> Dice
    forall a. Num a => a -> a -> a
    + Int
    1 Int -> Int -> Dice
    `d` Int
    2) [Int -> Effect
    RefillHP (-Int
    1)]
    tmpSlow10Resistant :: ItemKind
    tmpSlow10Resistant =
      GroupName ItemKind -> Dice -> [Effect] -> ItemKind
    tmpEffects GroupName ItemKind
    S_SLOW_RESISTANT (Dice
    8 Dice -> Dice -> Dice
    forall a. Num a => a -> a -> a
    + Int
    1 Int -> Int -> Dice
    `d` Int
    4)
                 [Int -> Int -> CStore -> GroupName ItemKind -> Effect
    DropItem Int
    1 Int
    1 CStore
    COrgan GroupName ItemKind
    S_SLOWED]
    tmpPoisonResistant :: ItemKind
    tmpPoisonResistant =
      GroupName ItemKind -> Dice -> [Effect] -> ItemKind
    tmpEffects GroupName ItemKind
    S_POISON_RESISTANT (Dice
    8 Dice -> Dice -> Dice
    forall a. Num a => a -> a -> a
    + Int
    1 Int -> Int -> Dice
    `d` Int
    4)
                 [Int -> Int -> CStore -> GroupName ItemKind -> Effect
    DropItem Int
    1 Int
    forall a. Bounded a => a
    maxBound CStore
    COrgan GroupName ItemKind
    S_POISONED]

    tmpNoSkMove :: ItemKind
    tmpNoSkMove =
      GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects GroupName ItemKind
    S_IMMOBILE [Skill -> Dice -> Aspect
    AddSkill Skill
    SkMove (-Dice
    99)]
    tmpNoSkMelee :: ItemKind
    tmpNoSkMelee =
      GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects GroupName ItemKind
    S_PACIFIED [Skill -> Dice -> Aspect
    AddSkill Skill
    SkMelee (-Dice
    99)]
    tmpNoSkDisplace :: ItemKind
    tmpNoSkDisplace =
      GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects GroupName ItemKind
    S_IRREPLACEABLE [Skill -> Dice -> Aspect
    AddSkill Skill
    SkDisplace (-Dice
    99)]
    tmpNoSkAlter :: ItemKind
    tmpNoSkAlter =
      GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects GroupName ItemKind
    S_RETAINING [Skill -> Dice -> Aspect
    AddSkill Skill
    SkAlter (-Dice
    99)]
    tmpNoSkWait :: ItemKind
    tmpNoSkWait =
      GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects GroupName ItemKind
    S_IMPATIENT [Skill -> Dice -> Aspect
    AddSkill Skill
    SkWait (-Dice
    99)]
    tmpNoSkMoveItem :: ItemKind
    tmpNoSkMoveItem =
      GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects GroupName ItemKind
    S_DISPOSSESSED [Skill -> Dice -> Aspect
    AddSkill Skill
    SkMoveItem (-Dice
    99)]
    tmpNoSkProject :: ItemKind
    tmpNoSkProject =
      GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects GroupName ItemKind
    S_WITHHOLDING [Skill -> Dice -> Aspect
    AddSkill Skill
    SkProject (-Dice
    99)]
    tmpNoSkApply :: ItemKind
    tmpNoSkApply =
      GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects GroupName ItemKind
    S_PARSIMONIOUS [Skill -> Dice -> Aspect
    AddSkill Skill
    SkApply (-Dice
    99)]

    tmpBonusSkMove :: ItemKind
    tmpBonusSkMove =
      GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects GroupName ItemKind
    S_MORE_MOBILE [Skill -> Dice -> Aspect
    AddSkill Skill
    SkMove Dice
    5]
    tmpBonusSkMelee :: ItemKind
    tmpBonusSkMelee =
      GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects GroupName ItemKind
    S_MORE_COMBATIVE [Skill -> Dice -> Aspect
    AddSkill Skill
    SkMelee Dice
    5]
    tmpBonusSkDisplace :: ItemKind
    tmpBonusSkDisplace =
      GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects GroupName ItemKind
    S_MORE_DISPLACING [Skill -> Dice -> Aspect
    AddSkill Skill
    SkDisplace Dice
    5]
    tmpBonusSkAlter :: ItemKind
    tmpBonusSkAlter =
      GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects GroupName ItemKind
    S_MORE_MODIFYING [Skill -> Dice -> Aspect
    AddSkill Skill
    SkAlter Dice
    5]
    tmpBonusSkWait :: ItemKind
    tmpBonusSkWait =
      GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects GroupName ItemKind
    S_MORE_PATIENT [Skill -> Dice -> Aspect
    AddSkill Skill
    SkWait Dice
    5]
    tmpBonusSkMoveItem :: ItemKind
    tmpBonusSkMoveItem =
      GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects GroupName ItemKind
    S_MORE_TIDY [Skill -> Dice -> Aspect
    AddSkill Skill
    SkMoveItem Dice
    5]
    tmpBonusSkProject :: ItemKind
    tmpBonusSkProject =
      GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects GroupName ItemKind
    S_MORE_PROJECTING [Skill -> Dice -> Aspect
    AddSkill Skill
    SkProject Dice
    8]
        -- TODO: 11, but let player control potion throwing by non-pointmen;
        -- beware also of capReinforced and other sources of the skill
    tmpBonusSkApply :: ItemKind
    tmpBonusSkApply =
      GroupName ItemKind -> [Aspect] -> ItemKind
    tmpAspects GroupName ItemKind
    S_MORE_PRACTICAL [Skill -> Dice -> Aspect
    AddSkill Skill
    SkApply Dice
    5]