-- | Actor organ definitions.
module Content.ItemKindOrgan
  ( organs
  ) 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.Flavour

organs :: [ItemKind]
organs :: [ItemKind]
organs =
  [ItemKind
fist, ItemKind
foot, ItemKind
hookedClaw, ItemKind
smallClaw, ItemKind
snout, ItemKind
smallJaw, ItemKind
jaw, ItemKind
largeJaw, ItemKind
antler, ItemKind
horn, ItemKind
rhinoHorn, ItemKind
tentacle, ItemKind
thorn, ItemKind
boilingFissure, ItemKind
arsenicFissure, ItemKind
sulfurFissure, ItemKind
beeSting, ItemKind
sting, ItemKind
venomTooth, ItemKind
venomFang, ItemKind
screechingBeak, ItemKind
largeTail, ItemKind
hugeTail, ItemKind
armoredSkin, ItemKind
bark, ItemKind
eye3, ItemKind
eye6, ItemKind
eye8, ItemKind
vision6, ItemKind
vision12, ItemKind
vision16, ItemKind
nostril, ItemKind
ear3, ItemKind
ear6, ItemKind
ear8, ItemKind
rattleOrgan, ItemKind
insectMortality, ItemKind
sapientBrain, ItemKind
animalBrain, ItemKind
speedGland5, ItemKind
speedGland10, ItemKind
scentGland, ItemKind
boilingVent, ItemKind
arsenicVent, ItemKind
sulfurVent, ItemKind
bonusHP, ItemKind
braced, ItemKind
asleep, ItemKind
impressed]
  -- LH-specific
  [ItemKind] -> [ItemKind] -> [ItemKind]
forall a. [a] -> [a] -> [a]
++ [ItemKind
tooth, ItemKind
lash, ItemKind
noseTip, ItemKind
lip, ItemKind
torsionRight, ItemKind
torsionLeft, ItemKind
pupil]

fist,    foot, hookedClaw, smallClaw, snout, smallJaw, jaw, largeJaw, antler, horn, rhinoHorn, tentacle, thorn, boilingFissure, arsenicFissure, sulfurFissure, beeSting, sting, venomTooth, venomFang, screechingBeak, largeTail, hugeTail, armoredSkin, bark, eye3, eye6, eye8, vision6, vision12, vision16, nostril, ear3, ear6, ear8, rattleOrgan, insectMortality, sapientBrain, animalBrain, speedGland5, speedGland10, scentGland, boilingVent, arsenicVent, sulfurVent, bonusHP, braced, asleep, impressed :: ItemKind
-- LH-specific
tooth, lash, noseTip, lip, torsionRight, torsionLeft, pupil :: ItemKind

-- Weapons

-- * Human weapon organs

fist :: ItemKind
fist = $WItemKind :: Char
-> Text
-> Freqs ItemKind
-> [Flavour]
-> Dice
-> Rarity
-> Text
-> Int
-> Dice
-> [Aspect]
-> [Effect]
-> [(GroupName ItemKind, CStore)]
-> Text
-> ItemKind
ItemKind
  { isymbol :: Char
isymbol  = ','
  , iname :: Text
iname    = "fist"
  , ifreq :: Freqs ItemKind
ifreq    = [("fist", 100)]
  , iflavour :: [Flavour]
iflavour = [Color] -> [Flavour]
zipPlain [Color
Red]
  , icount :: Dice
icount   = 2
  , irarity :: Rarity
irarity  = [(1, 1)]
  , iverbHit :: Text
iverbHit = "punch"
  , iweight :: Int
iweight  = 2000
  , idamage :: Dice
idamage  = 4 Int -> Int -> Dice
`d` 1
  , iaspects :: [Aspect]
iaspects = [Flag -> Aspect
SetFlag Flag
Durable, Flag -> Aspect
SetFlag Flag
Meleeable]
  , ieffects :: [Effect]
ieffects = []
  , idesc :: Text
idesc    = "Simple but effective."
  , ikit :: [(GroupName ItemKind, CStore)]
ikit     = []
  }
foot :: ItemKind
foot = ItemKind
fist
  { iname :: Text
iname    = "foot"
  , ifreq :: Freqs ItemKind
ifreq    = [("foot", 50)]
  , iverbHit :: Text
iverbHit = "kick"
  , idamage :: Dice
idamage  = 4 Int -> Int -> Dice
`d` 1
  , idesc :: Text
idesc    = "A weapon you can still use if disarmed."
                 -- great example of tutorial hints inside a flavourful text
  }

-- * Other weapon organs

hookedClaw :: ItemKind
hookedClaw = ItemKind
fist
  { iname :: Text
iname    = "hooked claw"
  , ifreq :: Freqs ItemKind
ifreq    = [("hooked claw", 50)]
  , icount :: Dice
icount   = 2  -- even if more, only the fore claws used for fighting
  , iverbHit :: Text
iverbHit = "hook"
  , idamage :: Dice
idamage  = 2 Int -> Int -> Dice
`d` 1
  , iaspects :: [Aspect]
iaspects = Dice -> Aspect
Timeout (12 Dice -> Dice -> Dice
forall a. Num a => a -> a -> a
- 1 Int -> Int -> Dice
`dL` 3)
               Aspect -> [Aspect] -> [Aspect]
forall a. a -> [a] -> [a]
: ItemKind -> [Aspect]
iaspects ItemKind
fist
  , ieffects :: [Effect]
ieffects = [GroupName ItemKind -> Dice -> Effect
toOrganBad "slowed" 2]
  , idesc :: Text
idesc    = "A curved talon."
  }
smallClaw :: ItemKind
smallClaw = ItemKind
fist
  { iname :: Text
iname    = "small claw"
  , ifreq :: Freqs ItemKind
ifreq    = [("small claw", 50)]
  , iverbHit :: Text
iverbHit = "slash"
  , idamage :: Dice
idamage  = 2 Int -> Int -> Dice
`d` 1
  , idesc :: Text
idesc    = "A pearly spike."
  }
snout :: ItemKind
snout = ItemKind
fist
  { iname :: Text
iname    = "snout"
  , ifreq :: Freqs ItemKind
ifreq    = [("snout", 10)]
  , icount :: Dice
icount   = 1
  , iverbHit :: Text
iverbHit = "bite"
  , idamage :: Dice
idamage  = 2 Int -> Int -> Dice
`d` 1
  , idesc :: Text
idesc    = "Sensitive and wide-nostrilled."
  }
smallJaw :: ItemKind
smallJaw = ItemKind
fist
  { iname :: Text
iname    = "small jaw"
  , ifreq :: Freqs ItemKind
ifreq    = [("small jaw", 20)]
  , icount :: Dice
icount   = 1
  , iverbHit :: Text
iverbHit = "rip"
  , idamage :: Dice
idamage  = 3 Int -> Int -> Dice
`d` 1
  , idesc :: Text
idesc    = "Filled with small, even teeth."
  }
jaw :: ItemKind
jaw = ItemKind
fist
  { iname :: Text
iname    = "jaw"
  , ifreq :: Freqs ItemKind
ifreq    = [("jaw", 20)]
  , icount :: Dice
icount   = 1
  , iverbHit :: Text
iverbHit = "rip"
  , idamage :: Dice
idamage  = 5 Int -> Int -> Dice
`d` 1
  , idesc :: Text
idesc    = "Delivers a powerful bite."
  }
largeJaw :: ItemKind
largeJaw = ItemKind
fist
  { iname :: Text
iname    = "large jaw"
  , ifreq :: Freqs ItemKind
ifreq    = [("large jaw", 100)]
  , icount :: Dice
icount   = 1
  , iverbHit :: Text
iverbHit = "crush"
  , idamage :: Dice
idamage  = 10 Int -> Int -> Dice
`d` 1
  , iaspects :: [Aspect]
iaspects = [Dice -> Aspect
Timeout (Dice -> Aspect) -> Dice -> Aspect
forall a b. (a -> b) -> a -> b
$ 2 Dice -> Dice -> Dice
forall a. Num a => a -> a -> a
+ 1 Int -> Int -> Dice
`d` 2]  -- no effect, but limit raw damage
               [Aspect] -> [Aspect] -> [Aspect]
forall a. [a] -> [a] -> [a]
++ ItemKind -> [Aspect]
iaspects ItemKind
fist
  , idesc :: Text
idesc    = "Enough to swallow anything in a single gulp."
  }
antler :: ItemKind
antler = ItemKind
fist
  { iname :: Text
iname    = "antler"
  , ifreq :: Freqs ItemKind
ifreq    = [("antler", 100)]
  , icount :: Dice
icount   = 2
  , iverbHit :: Text
iverbHit = "ram"
  , idamage :: Dice
idamage  = 4 Int -> Int -> Dice
`d` 1
  , iaspects :: [Aspect]
iaspects = [ Dice -> Aspect
Timeout (Dice -> Aspect) -> Dice -> Aspect
forall a b. (a -> b) -> a -> b
$ 3 Dice -> Dice -> Dice
forall a. Num a => a -> a -> a
+ (1 Int -> Int -> Dice
`d` 3) Dice -> Dice -> Dice
forall a. Num a => a -> a -> a
* 3
               , Skill -> Dice -> Aspect
AddSkill Skill
SkArmorMelee 10 ]  -- bonus doubled
               [Aspect] -> [Aspect] -> [Aspect]
forall a. [a] -> [a] -> [a]
++ ItemKind -> [Aspect]
iaspects ItemKind
fist
  , ieffects :: [Effect]
ieffects = [ThrowMod -> Effect
PushActor (Int -> Int -> Int -> ThrowMod
ThrowMod 100 50 1)]  -- 1 step, slow
  , idesc :: Text
idesc    = ""
  }
horn :: ItemKind
horn = ItemKind
fist
  { iname :: Text
iname    = "horn"
  , ifreq :: Freqs ItemKind
ifreq    = [("horn", 100)]
  , icount :: Dice
icount   = 2
  , iverbHit :: Text
iverbHit = "impale"
  , idamage :: Dice
idamage  = 5 Int -> Int -> Dice
`d` 1
  , iaspects :: [Aspect]
iaspects = [ Skill -> Dice -> Aspect
AddSkill Skill
SkHurtMelee 10
               , Skill -> Dice -> Aspect
AddSkill Skill
SkArmorMelee 10 ]  -- bonus doubled
               [Aspect] -> [Aspect] -> [Aspect]
forall a. [a] -> [a] -> [a]
++ ItemKind -> [Aspect]
iaspects ItemKind
fist
  , idesc :: Text
idesc    = "Sharp and long, for defence or attack."
  }
rhinoHorn :: ItemKind
rhinoHorn = ItemKind
fist
  { iname :: Text
iname    = "ugly horn"  -- made of keratin, unlike real horns
  , ifreq :: Freqs ItemKind
ifreq    = [("rhino horn", 100)]
  , icount :: Dice
icount   = 1  -- single, unlike real horns
  , iverbHit :: Text
iverbHit = "gore"
  , idamage :: Dice
idamage  = 5 Int -> Int -> Dice
`d` 1
  , iaspects :: [Aspect]
iaspects = [Dice -> Aspect
Timeout 5, Skill -> Dice -> Aspect
AddSkill Skill
SkHurtMelee 20]
               [Aspect] -> [Aspect] -> [Aspect]
forall a. [a] -> [a] -> [a]
++ ItemKind -> [Aspect]
iaspects ItemKind
fist
  , ieffects :: [Effect]
ieffects = [Effect
Impress, Effect
Yell]  -- the owner is a mid-boss, after all
  , idesc :: Text
idesc    = "Very solid, considering it has the same composition as fingernails."
  }
tentacle :: ItemKind
tentacle = ItemKind
fist
  { iname :: Text
iname    = "tentacle"
  , ifreq :: Freqs ItemKind
ifreq    = [("tentacle", 50)]
  , icount :: Dice
icount   = 4
  , iverbHit :: Text
iverbHit = "slap"
  , idamage :: Dice
idamage  = 4 Int -> Int -> Dice
`d` 1
  , idesc :: Text
idesc    = "Damp and dextrous."
  }
thorn :: ItemKind
thorn = ItemKind
fist
  { iname :: Text
iname    = "thorn"
  , ifreq :: Freqs ItemKind
ifreq    = [("thorn", 100)]
  , icount :: Dice
icount   = 2 Dice -> Dice -> Dice
forall a. Num a => a -> a -> a
+ 1 Int -> Int -> Dice
`d` 3
  , iverbHit :: Text
iverbHit = "puncture"
  , idamage :: Dice
idamage  = 2 Int -> Int -> Dice
`d` 1
  , iaspects :: [Aspect]
iaspects = [Flag -> Aspect
SetFlag Flag
Meleeable]  -- not Durable
  , ieffects :: [Effect]
ieffects = [Text -> Effect
VerbNoLonger "be not so thorny any more"]
  , idesc :: Text
idesc    = "Sharp yet brittle."
  }
boilingFissure :: ItemKind
boilingFissure = ItemKind
fist
  { iname :: Text
iname    = "fissure"
  , ifreq :: Freqs ItemKind
ifreq    = [("boiling fissure", 100)]
  , icount :: Dice
icount   = 5 Dice -> Dice -> Dice
forall a. Num a => a -> a -> a
+ 1 Int -> Int -> Dice
`d` 5
  , iverbHit :: Text
iverbHit = "hiss at"
  , idamage :: Dice
idamage  = 1 Int -> Int -> Dice
`d` 1
  , iaspects :: [Aspect]
iaspects = [ Skill -> Dice -> Aspect
AddSkill Skill
SkHurtMelee 20  -- decreasing as count decreases
               , Flag -> Aspect
SetFlag Flag
Meleeable ]  -- not Durable
  , ieffects :: [Effect]
ieffects = [ Int -> Int -> CStore -> GroupName ItemKind -> Effect
DropItem 1 1 CStore
COrgan "condition"  -- useful; limited
               , Text -> Effect
VerbNoLonger "widen the crack, releasing pressure" ]
  , idesc :: Text
idesc    = "A deep crack to the underworld."
  }
arsenicFissure :: ItemKind
arsenicFissure = ItemKind
boilingFissure
  { iname :: Text
iname    = "fissure"
  , ifreq :: Freqs ItemKind
ifreq    = [("arsenic fissure", 100)]
  , icount :: Dice
icount   = 3 Dice -> Dice -> Dice
forall a. Num a => a -> a -> a
+ 1 Int -> Int -> Dice
`d` 3
  , idamage :: Dice
idamage  = 2 Int -> Int -> Dice
`d` 1
  , ieffects :: [Effect]
ieffects = [ GroupName ItemKind -> Dice -> Effect
toOrganBad "parsimonious" (5 Dice -> Dice -> Dice
forall a. Num a => a -> a -> a
+ 1 Int -> Int -> Dice
`d` 3)
               -- weaken/poison, impacting intellectual abilities first
               , Text -> Effect
VerbNoLonger "stop exuding stupefying vapours" ]
  , idesc :: Text
idesc    = ""
  }
sulfurFissure :: ItemKind
sulfurFissure = ItemKind
boilingFissure
  { iname :: Text
iname    = "fissure"
  , ifreq :: Freqs ItemKind
ifreq    = [("sulfur fissure", 100)]
  , icount :: Dice
icount   = 2 Dice -> Dice -> Dice
forall a. Num a => a -> a -> a
+ 1 Int -> Int -> Dice
`d` 2
  , idamage :: Dice
idamage  = 0  -- heal not via (negative) idamage, for armour would block it
  , ieffects :: [Effect]
ieffects = [ Int -> Effect
RefillHP 5
               , Text -> Effect
VerbNoLonger "run out of the healing fumes" ]
  , idesc :: Text
idesc    = ""
  }
beeSting :: ItemKind
beeSting = ItemKind
fist
  { iname :: Text
iname    = "bee sting"
  , ifreq :: Freqs ItemKind
ifreq    = [("bee sting", 100)]
  , icount :: Dice
icount   = 1
  , iverbHit :: Text
iverbHit = "sting"
  , idamage :: Dice
idamage  = 0
  , iaspects :: [Aspect]
iaspects = [ Skill -> Dice -> Aspect
AddSkill Skill
SkArmorMelee 200, Skill -> Dice -> Aspect
AddSkill Skill
SkArmorRanged 45
               , Flag -> Aspect
SetFlag Flag
Meleeable ]  -- not Durable
  , ieffects :: [Effect]
ieffects = [Dice -> Effect
Paralyze 6, Int -> Effect
RefillHP 4]
                 -- no special message when runs out, because it's 1 copy
  , idesc :: Text
idesc    = "Painful, but beneficial."
  }
sting :: ItemKind
sting = ItemKind
fist
  { iname :: Text
iname    = "sting"
  , ifreq :: Freqs ItemKind
ifreq    = [("sting", 100)]
  , icount :: Dice
icount   = 1
  , iverbHit :: Text
iverbHit = "inject"
  , idamage :: Dice
idamage  = 1 Int -> Int -> Dice
`d` 1
  , iaspects :: [Aspect]
iaspects = [Dice -> Aspect
Timeout (Dice -> Aspect) -> Dice -> Aspect
forall a b. (a -> b) -> a -> b
$ 10 Dice -> Dice -> Dice
forall a. Num a => a -> a -> a
- 1 Int -> Int -> Dice
`dL` 4, Skill -> Dice -> Aspect
AddSkill Skill
SkHurtMelee 40]
               [Aspect] -> [Aspect] -> [Aspect]
forall a. [a] -> [a] -> [a]
++ ItemKind -> [Aspect]
iaspects ItemKind
fist
  , ieffects :: [Effect]
ieffects = [GroupName ItemKind -> Dice -> Effect
toOrganBad "retaining" (3 Dice -> Dice -> Dice
forall a. Num a => a -> a -> a
+ 1 Int -> Int -> Dice
`d` 3)]
  , idesc :: Text
idesc    = "Painful, debilitating and harmful."
  }
venomTooth :: ItemKind
venomTooth = ItemKind
fist
  { iname :: Text
iname    = "venom tooth"
  , ifreq :: Freqs ItemKind
ifreq    = [("venom tooth", 100)]
  , icount :: Dice
icount   = 2
  , iverbHit :: Text
iverbHit = "bite"
  , idamage :: Dice
idamage  = 1 Int -> Int -> Dice
`d` 1
  , iaspects :: [Aspect]
iaspects = Dice -> Aspect
Timeout (7 Dice -> Dice -> Dice
forall a. Num a => a -> a -> a
- 1 Int -> Int -> Dice
`dL` 3)
               Aspect -> [Aspect] -> [Aspect]
forall a. a -> [a] -> [a]
: ItemKind -> [Aspect]
iaspects ItemKind
fist
  , ieffects :: [Effect]
ieffects = [GroupName ItemKind -> Dice -> Effect
toOrganBad "slowed" (3 Dice -> Dice -> Dice
forall a. Num a => a -> a -> a
+ 1 Int -> Int -> Dice
`d` 3)]
  , idesc :: Text
idesc    = "A chilling numbness spreads from its bite."
  }
venomFang :: ItemKind
venomFang = ItemKind
fist
  { iname :: Text
iname    = "venom fang"
  , ifreq :: Freqs ItemKind
ifreq    = [("venom fang", 100)]
  , icount :: Dice
icount   = 2
  , iverbHit :: Text
iverbHit = "bite"
  , idamage :: Dice
idamage  = 0
  , iaspects :: [Aspect]
iaspects = Dice -> Aspect
Timeout (10 Dice -> Dice -> Dice
forall a. Num a => a -> a -> a
- 1 Int -> Int -> Dice
`dL` 5)
               Aspect -> [Aspect] -> [Aspect]
forall a. a -> [a] -> [a]
: ItemKind -> [Aspect]
iaspects ItemKind
fist
  , ieffects :: [Effect]
ieffects = [GroupName ItemKind -> Effect
toOrganNoTimer "poisoned"]
  , idesc :: Text
idesc    = "Dripping with deadly venom."
  }
screechingBeak :: ItemKind
screechingBeak = ItemKind
fist
  { iname :: Text
iname    = "screeching beak"
  , ifreq :: Freqs ItemKind
ifreq    = [("screeching beak", 100)]
  , icount :: Dice
icount   = 1
  , iverbHit :: Text
iverbHit = "peck"
  , idamage :: Dice
idamage  = 3 Int -> Int -> Dice
`d` 1
  , iaspects :: [Aspect]
iaspects = Dice -> Aspect
Timeout (7 Dice -> Dice -> Dice
forall a. Num a => a -> a -> a
- 1 Int -> Int -> Dice
`dL` 3)
               Aspect -> [Aspect] -> [Aspect]
forall a. a -> [a] -> [a]
: ItemKind -> [Aspect]
iaspects ItemKind
fist
  , ieffects :: [Effect]
ieffects = [GroupName ItemKind -> Dice -> Effect
Summon "scavenger" (Dice -> Effect) -> Dice -> Effect
forall a b. (a -> b) -> a -> b
$ 1 Int -> Int -> Dice
`dL` 3]
  , idesc :: Text
idesc    = "Both a weapon and a beacon, calling more scavengers to the meal."
  }
largeTail :: ItemKind
largeTail = ItemKind
fist
  { iname :: Text
iname    = "large tail"
  , ifreq :: Freqs ItemKind
ifreq    = [("large tail", 50)]
  , icount :: Dice
icount   = 1
  , iverbHit :: Text
iverbHit = "knock"
  , idamage :: Dice
idamage  = 7 Int -> Int -> Dice
`d` 1
  , iaspects :: [Aspect]
iaspects = [Dice -> Aspect
Timeout (Dice -> Aspect) -> Dice -> Aspect
forall a b. (a -> b) -> a -> b
$ 2 Dice -> Dice -> Dice
forall a. Num a => a -> a -> a
+ 1 Int -> Int -> Dice
`d` 2, Skill -> Dice -> Aspect
AddSkill Skill
SkHurtMelee 20]
               [Aspect] -> [Aspect] -> [Aspect]
forall a. [a] -> [a] -> [a]
++ ItemKind -> [Aspect]
iaspects ItemKind
fist
                 -- timeout higher, lest they regain push before closing again
  , ieffects :: [Effect]
ieffects = [ThrowMod -> Effect
PushActor (Int -> Int -> Int -> ThrowMod
ThrowMod 200 50 1)]  -- 1 step, fast
  , idesc :: Text
idesc    = "Almost as long as the trunk."
  }
hugeTail :: ItemKind
hugeTail = ItemKind
largeTail
  { iname :: Text
iname    = "huge tail"
  , ifreq :: Freqs ItemKind
ifreq    = [("huge tail", 50)]
  , iverbHit :: Text
iverbHit = "upend"
  , iaspects :: [Aspect]
iaspects = [Dice -> Aspect
Timeout (Dice -> Aspect) -> Dice -> Aspect
forall a b. (a -> b) -> a -> b
$ 3 Dice -> Dice -> Dice
forall a. Num a => a -> a -> a
+ 1 Int -> Int -> Dice
`d` 2, Skill -> Dice -> Aspect
AddSkill Skill
SkHurtMelee 20]
               [Aspect] -> [Aspect] -> [Aspect]
forall a. [a] -> [a] -> [a]
++ ItemKind -> [Aspect]
iaspects ItemKind
fist
                 -- timeout higher, lest they regain push before closing again
  , ieffects :: [Effect]
ieffects = [ThrowMod -> Effect
PushActor (Int -> Int -> Int -> ThrowMod
ThrowMod 400 50 1)]  -- 2 steps, fast
  , idesc :: Text
idesc    = "Slow but immensely heavy."
  }

-- Non-weapons

-- * Armor organs

armoredSkin :: ItemKind
armoredSkin = $WItemKind :: Char
-> Text
-> Freqs ItemKind
-> [Flavour]
-> Dice
-> Rarity
-> Text
-> Int
-> Dice
-> [Aspect]
-> [Effect]
-> [(GroupName ItemKind, CStore)]
-> Text
-> ItemKind
ItemKind
  { isymbol :: Char
isymbol  = ','
  , iname :: Text
iname    = "armored skin"
  , ifreq :: Freqs ItemKind
ifreq    = [("armored skin", 100)]
  , iflavour :: [Flavour]
iflavour = [Color] -> [Flavour]
zipPlain [Color
Red]
  , icount :: Dice
icount   = 1
  , irarity :: Rarity
irarity  = [(1, 1)]
  , iverbHit :: Text
iverbHit = "bash"
  , iweight :: Int
iweight  = 2000
  , idamage :: Dice
idamage  = 0
  , iaspects :: [Aspect]
iaspects = [ Skill -> Dice -> Aspect
AddSkill Skill
SkArmorMelee 30, Skill -> Dice -> Aspect
AddSkill Skill
SkArmorRanged 15
               , Flag -> Aspect
SetFlag Flag
Durable ]
  , ieffects :: [Effect]
ieffects = []
  , idesc :: Text
idesc    = "Homemade armour is just as good."  -- hmm, it may get confused with leather armor jackets, etc.
  , ikit :: [(GroupName ItemKind, CStore)]
ikit     = []
  }
bark :: ItemKind
bark = ItemKind
armoredSkin
  { iname :: Text
iname    = "bark"
  , ifreq :: Freqs ItemKind
ifreq    = [("bark", 100)]
  , idesc :: Text
idesc    = ""
  }

-- * Sense organs

eye :: Int -> ItemKind
eye :: Int -> ItemKind
eye n :: Int
n = ItemKind
armoredSkin
  { iname :: Text
iname    = "eye"
  , ifreq :: Freqs ItemKind
ifreq    = [(Text -> GroupName ItemKind
forall a. Text -> GroupName a
toGroupName (Text -> GroupName ItemKind) -> Text -> GroupName ItemKind
forall a b. (a -> b) -> a -> b
$ "eye" Text -> Text -> Text
<+> Int -> Text
forall a. Show a => a -> Text
tshow Int
n, 100)]
  , icount :: Dice
icount   = 2
  , iverbHit :: Text
iverbHit = "glare at"
  , iaspects :: [Aspect]
iaspects = [ Skill -> Dice -> Aspect
AddSkill Skill
SkSight (Int -> Dice
intToDice Int
n)
               , Flag -> Aspect
SetFlag Flag
Durable ]
  , idesc :: Text
idesc    = "A piercing stare."
  }
eye3 :: ItemKind
eye3 = Int -> ItemKind
eye 3
eye6 :: ItemKind
eye6 = Int -> ItemKind
eye 6
eye8 :: ItemKind
eye8 = Int -> ItemKind
eye 8
vision :: Int -> ItemKind
vision :: Int -> ItemKind
vision n :: Int
n = ItemKind
armoredSkin
  { iname :: Text
iname    = "vision"
  , ifreq :: Freqs ItemKind
ifreq    = [(Text -> GroupName ItemKind
forall a. Text -> GroupName a
toGroupName (Text -> GroupName ItemKind) -> Text -> GroupName ItemKind
forall a b. (a -> b) -> a -> b
$ "vision" Text -> Text -> Text
<+> Int -> Text
forall a. Show a => a -> Text
tshow Int
n, 100)]
  , iverbHit :: Text
iverbHit = "visualize"
  , iaspects :: [Aspect]
iaspects = [ Skill -> Dice -> Aspect
AddSkill Skill
SkSight (Int -> Dice
intToDice Int
n)
               , Flag -> Aspect
SetFlag Flag
Durable ]
  , idesc :: Text
idesc    = ""
  }
vision6 :: ItemKind
vision6 = Int -> ItemKind
vision 6
vision12 :: ItemKind
vision12 = Int -> ItemKind
vision 12
vision16 :: ItemKind
vision16 = Int -> ItemKind
vision 16
nostril :: ItemKind
nostril = ItemKind
armoredSkin
  { iname :: Text
iname    = "nostril"
  , ifreq :: Freqs ItemKind
ifreq    = [("nostril", 100)]
  , icount :: Dice
icount   = 2
  , iverbHit :: Text
iverbHit = "snuff"
  , iaspects :: [Aspect]
iaspects = [ Skill -> Dice -> Aspect
AddSkill Skill
SkSmell 1  -- times 2, from icount
               , Flag -> Aspect
SetFlag Flag
Durable ]
  , idesc :: Text
idesc    = ""
  }
ear   :: Int -> ItemKind
ear :: Int -> ItemKind
ear n :: Int
n = ItemKind
armoredSkin
  { iname :: Text
iname    = "ear"
  , ifreq :: Freqs ItemKind
ifreq    = [(Text -> GroupName ItemKind
forall a. Text -> GroupName a
toGroupName (Text -> GroupName ItemKind) -> Text -> GroupName ItemKind
forall a b. (a -> b) -> a -> b
$ "ear" Text -> Text -> Text
<+> Int -> Text
forall a. Show a => a -> Text
tshow Int
n, 100)]
  , icount :: Dice
icount   = 2
  , iverbHit :: Text
iverbHit = "overhear"
  , iaspects :: [Aspect]
iaspects = [ Skill -> Dice -> Aspect
AddSkill Skill
SkHearing (Int -> Dice
intToDice Int
n)
               , Flag -> Aspect
SetFlag Flag
Durable ]
  , idesc :: Text
idesc    = ""
  }
ear3 :: ItemKind
ear3 = Int -> ItemKind
ear 3
ear6 :: ItemKind
ear6 = Int -> ItemKind
ear 6
ear8 :: ItemKind
ear8 = Int -> ItemKind
ear 8

-- * Assorted

rattleOrgan :: ItemKind
rattleOrgan = ItemKind
armoredSkin
  { iname :: Text
iname    = "rattle"
  , ifreq :: Freqs ItemKind
ifreq    = [("rattle", 100)]
  , iverbHit :: Text
iverbHit = "announce"
  , iaspects :: [Aspect]
iaspects = [ Dice -> Aspect
Timeout (Dice -> Aspect) -> Dice -> Aspect
forall a b. (a -> b) -> a -> b
$ 10 Dice -> Dice -> Dice
forall a. Num a => a -> a -> a
+ (1 Int -> Int -> Dice
`d` 3) Dice -> Dice -> Dice
forall a. Num a => a -> a -> a
* 10  -- long, to limit spam
               , Flag -> Aspect
SetFlag Flag
Periodic, Flag -> Aspect
SetFlag Flag
Durable ]
  , ieffects :: [Effect]
ieffects = [Effect
Yell, Int -> Effect
RefillCalm 5]
  , idesc :: Text
idesc    = ""
  }
insectMortality :: ItemKind
insectMortality = ItemKind
armoredSkin
  { iname :: Text
iname    = "insect mortality"
  , ifreq :: Freqs ItemKind
ifreq    = [("insect mortality", 100)]
  , iverbHit :: Text
iverbHit = "age"
  , iaspects :: [Aspect]
iaspects = [ Skill -> Dice -> Aspect
AddSkill Skill
SkAggression 2  -- try to attack before you die
               , Dice -> Aspect
Timeout (Dice -> Aspect) -> Dice -> Aspect
forall a b. (a -> b) -> a -> b
$ 30 Dice -> Dice -> Dice
forall a. Num a => a -> a -> a
+ (1 Int -> Int -> Dice
`d` 3) Dice -> Dice -> Dice
forall a. Num a => a -> a -> a
* 10  -- die very slowly
               , Flag -> Aspect
SetFlag Flag
Periodic, Flag -> Aspect
SetFlag Flag
Durable ]
  , ieffects :: [Effect]
ieffects = [Int -> Effect
RefillHP (-1), Effect
Yell]
  , idesc :: Text
idesc    = ""
  }
sapientBrain :: ItemKind
sapientBrain = ItemKind
armoredSkin
  { iname :: Text
iname    = "sapient brain"
  , ifreq :: Freqs ItemKind
ifreq    = [("sapient brain", 100)]
  , iverbHit :: Text
iverbHit = "outbrain"
  , iaspects :: [Aspect]
iaspects = [Skill -> Dice -> Aspect
AddSkill Skill
sk 1 | Skill
sk <- [Skill
SkMove .. Skill
SkApply]]
               [Aspect] -> [Aspect] -> [Aspect]
forall a. [a] -> [a] -> [a]
++ [Skill -> Dice -> Aspect
AddSkill Skill
SkMove 4]  -- can move at once when waking up
               [Aspect] -> [Aspect] -> [Aspect]
forall a. [a] -> [a] -> [a]
++ [Skill -> Dice -> Aspect
AddSkill Skill
SkAlter 4]  -- can use all stairs; dig rubble, ice
               [Aspect] -> [Aspect] -> [Aspect]
forall a. [a] -> [a] -> [a]
++ [Skill -> Dice -> Aspect
AddSkill Skill
SkWait 2]  -- can brace and sleep
               [Aspect] -> [Aspect] -> [Aspect]
forall a. [a] -> [a] -> [a]
++ [Skill -> Dice -> Aspect
AddSkill Skill
SkApply 1]  -- can use most items, not just foods
               [Aspect] -> [Aspect] -> [Aspect]
forall a. [a] -> [a] -> [a]
++ [Flag -> Aspect
SetFlag Flag
Durable]
  , idesc :: Text
idesc    = ""
  }
animalBrain :: ItemKind
animalBrain = ItemKind
armoredSkin
  { iname :: Text
iname    = "animal brain"
  , ifreq :: Freqs ItemKind
ifreq    = [("animal brain", 100)]
  , iverbHit :: Text
iverbHit = "blank"
  , iaspects :: [Aspect]
iaspects = [Skill -> Dice -> Aspect
AddSkill Skill
sk 1 | Skill
sk <- [Skill
SkMove .. Skill
SkApply]]
               [Aspect] -> [Aspect] -> [Aspect]
forall a. [a] -> [a] -> [a]
++ [Skill -> Dice -> Aspect
AddSkill Skill
SkMove 4]  -- can move at once when waking up
               [Aspect] -> [Aspect] -> [Aspect]
forall a. [a] -> [a] -> [a]
++ [Skill -> Dice -> Aspect
AddSkill Skill
SkAlter 2]  -- can use normal stairs; can't dig
               [Aspect] -> [Aspect] -> [Aspect]
forall a. [a] -> [a] -> [a]
++ [Skill -> Dice -> Aspect
AddSkill Skill
SkWait 2]  -- can brace and sleep
               -- No @SkAppy@ bonus, so can only apply foods.
               [Aspect] -> [Aspect] -> [Aspect]
forall a. [a] -> [a] -> [a]
++ [Skill -> Dice -> Aspect
AddSkill Skill
SkDisplace (-1)]  -- no melee tactics
               [Aspect] -> [Aspect] -> [Aspect]
forall a. [a] -> [a] -> [a]
++ [Skill -> Dice -> Aspect
AddSkill Skill
SkMoveItem (-1)]  -- no item gathering
               [Aspect] -> [Aspect] -> [Aspect]
forall a. [a] -> [a] -> [a]
++ [Skill -> Dice -> Aspect
AddSkill Skill
SkProject (-1)]  -- nor item flinging
               [Aspect] -> [Aspect] -> [Aspect]
forall a. [a] -> [a] -> [a]
++ [Flag -> Aspect
SetFlag Flag
Durable]
  , idesc :: Text
idesc    = ""
  }
speedGland :: Int -> ItemKind
speedGland :: Int -> ItemKind
speedGland n :: Int
n = ItemKind
armoredSkin
  { iname :: Text
iname    = "speed gland"
  , ifreq :: Freqs ItemKind
ifreq    = [(Text -> GroupName ItemKind
forall a. Text -> GroupName a
toGroupName (Text -> GroupName ItemKind) -> Text -> GroupName ItemKind
forall a b. (a -> b) -> a -> b
$ "speed gland" Text -> Text -> Text
<+> Int -> Text
forall a. Show a => a -> Text
tshow Int
n, 100)]
  , iverbHit :: Text
iverbHit = "spit at"
  , iaspects :: [Aspect]
iaspects = [ Skill -> Dice -> Aspect
AddSkill Skill
SkSpeed (Dice -> Aspect) -> Dice -> Aspect
forall a b. (a -> b) -> a -> b
$ Int -> Dice
intToDice Int
n
               , Dice -> Aspect
Timeout (Dice -> Aspect) -> Dice -> Aspect
forall a b. (a -> b) -> a -> b
$ Int -> Dice
intToDice (100 Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div` Int
n)
               , Flag -> Aspect
SetFlag Flag
Periodic, Flag -> Aspect
SetFlag Flag
Durable ]
  , ieffects :: [Effect]
ieffects = [Int -> Effect
RefillHP 1]
  , idesc :: Text
idesc    = ""
  }
speedGland5 :: ItemKind
speedGland5 = Int -> ItemKind
speedGland 5
speedGland10 :: ItemKind
speedGland10 = Int -> ItemKind
speedGland 10
scentGland :: ItemKind
scentGland = ItemKind
armoredSkin
  { iname :: Text
iname    = "scent gland"
  , ifreq :: Freqs ItemKind
ifreq    = [("scent gland", 100)]
  , icount :: Dice
icount   = 10 Dice -> Dice -> Dice
forall a. Num a => a -> a -> a
+ 1 Int -> Int -> Dice
`d` 3  -- runs out
  , iverbHit :: Text
iverbHit = "spray at"
  , iaspects :: [Aspect]
iaspects = [ Dice -> Aspect
Timeout (Dice -> Aspect) -> Dice -> Aspect
forall a b. (a -> b) -> a -> b
$ (1 Int -> Int -> Dice
`d` 3) Dice -> Dice -> Dice
forall a. Num a => a -> a -> a
* 10
               , Flag -> Aspect
SetFlag Flag
Periodic, Flag -> Aspect
SetFlag Flag
Fragile ]  -- not Durable
  , ieffects :: [Effect]
ieffects = [ Text -> Effect
VerbNoLonger "look spent"
               , Effect
ApplyPerfume
               , GroupName ItemKind -> Effect
Explode "distressing odor" ]
                   -- keep explosion at the end to avoid the ambiguity of
                   -- "of ([foo explosion] of [bar])"
  , idesc :: Text
idesc    = ""
  }
boilingVent :: ItemKind
boilingVent = ItemKind
armoredSkin
  { iname :: Text
iname    = "vent"
  , ifreq :: Freqs ItemKind
ifreq    = [("boiling vent", 100)]
  , iflavour :: [Flavour]
iflavour = [Color] -> [Flavour]
zipPlain [Color
Blue]
  , iverbHit :: Text
iverbHit = "menace"
  , iaspects :: [Aspect]
iaspects = [ Dice -> Aspect
Timeout (Dice -> Aspect) -> Dice -> Aspect
forall a b. (a -> b) -> a -> b
$ (2 Dice -> Dice -> Dice
forall a. Num a => a -> a -> a
+ 1 Int -> Int -> Dice
`d` 3) Dice -> Dice -> Dice
forall a. Num a => a -> a -> a
* 5
               , Flag -> Aspect
SetFlag Flag
Periodic, Flag -> Aspect
SetFlag Flag
Durable ]
  , ieffects :: [Effect]
ieffects = [Int -> Effect
RefillHP 2, GroupName ItemKind -> Effect
Explode "boiling water"]
  , idesc :: Text
idesc    = ""
  }
arsenicVent :: ItemKind
arsenicVent = ItemKind
armoredSkin
  { iname :: Text
iname    = "vent"
  , ifreq :: Freqs ItemKind
ifreq    = [("arsenic vent", 100)]
  , iflavour :: [Flavour]
iflavour = [Color] -> [Flavour]
zipPlain [Color
Cyan]
  , iverbHit :: Text
iverbHit = "menace"
  , iaspects :: [Aspect]
iaspects = [ Dice -> Aspect
Timeout (Dice -> Aspect) -> Dice -> Aspect
forall a b. (a -> b) -> a -> b
$ (2 Dice -> Dice -> Dice
forall a. Num a => a -> a -> a
+ 1 Int -> Int -> Dice
`d` 3) Dice -> Dice -> Dice
forall a. Num a => a -> a -> a
* 5
               , Flag -> Aspect
SetFlag Flag
Periodic, Flag -> Aspect
SetFlag Flag
Durable ]
  , ieffects :: [Effect]
ieffects = [Int -> Effect
RefillHP 2, GroupName ItemKind -> Effect
Explode "sparse shower"]
  , idesc :: Text
idesc    = ""
  }
sulfurVent :: ItemKind
sulfurVent = ItemKind
armoredSkin
  { iname :: Text
iname    = "vent"
  , ifreq :: Freqs ItemKind
ifreq    = [("sulfur vent", 100)]
  , iflavour :: [Flavour]
iflavour = [Color] -> [Flavour]
zipPlain [Color
BrYellow]
  , iverbHit :: Text
iverbHit = "menace"
  , iaspects :: [Aspect]
iaspects = [ Dice -> Aspect
Timeout (Dice -> Aspect) -> Dice -> Aspect
forall a b. (a -> b) -> a -> b
$ (2 Dice -> Dice -> Dice
forall a. Num a => a -> a -> a
+ 1 Int -> Int -> Dice
`d` 3) Dice -> Dice -> Dice
forall a. Num a => a -> a -> a
* 5
               , Flag -> Aspect
SetFlag Flag
Periodic, Flag -> Aspect
SetFlag Flag
Durable ]
  , ieffects :: [Effect]
ieffects = [Int -> Effect
RefillHP 2, GroupName ItemKind -> Effect
Explode "dense shower"]
  , idesc :: Text
idesc    = ""
  }

-- * Special

bonusHP :: ItemKind
bonusHP = ItemKind
armoredSkin
  { isymbol :: Char
isymbol  = 'H'  -- '+' reserved for conditions
  , iname :: Text
iname    = "bonus HP"
  , ifreq :: Freqs ItemKind
ifreq    = [("bonus HP", 1)]
  , iflavour :: [Flavour]
iflavour = [Color] -> [Flavour]
zipPlain [Color
BrBlue]
  , iverbHit :: Text
iverbHit = "intimidate"
  , iweight :: Int
iweight  = 0
  , iaspects :: [Aspect]
iaspects = [Skill -> Dice -> Aspect
AddSkill Skill
SkMaxHP 1]
  , idesc :: Text
idesc    = "Growing up in a privileged background gave you the training and the discrete garment accessories that improve your posture and resilience."
  }
braced :: ItemKind
braced = ItemKind
armoredSkin
  { isymbol :: Char
isymbol  = 'B'
  , iname :: Text
iname    = "braced"
  , ifreq :: Freqs ItemKind
ifreq    = [("braced", 1)]
  , iflavour :: [Flavour]
iflavour = [Color] -> [Flavour]
zipPlain [Color
BrGreen]
  , iverbHit :: Text
iverbHit = "brace"
  , iweight :: Int
iweight  = 0
  , iaspects :: [Aspect]
iaspects = [ Skill -> Dice -> Aspect
AddSkill Skill
SkArmorMelee 50, Skill -> Dice -> Aspect
AddSkill Skill
SkArmorRanged 25
               , Skill -> Dice -> Aspect
AddSkill Skill
SkHearing 10
               , Flag -> Aspect
SetFlag Flag
Condition ] -- hack: display as condition
  , idesc :: Text
idesc    = "Apart of increased resilience to attacks, being braced protects from displacement by foes and other forms of forced translocation, e.g., pushing or pulling."
  }
asleep :: ItemKind
asleep = ItemKind
armoredSkin
  { isymbol :: Char
isymbol  = 'S'
  , iname :: Text
iname    = "asleep"
  , ifreq :: Freqs ItemKind
ifreq    = [("asleep", 1)]
  , iflavour :: [Flavour]
iflavour = [Color] -> [Flavour]
zipPlain [Color
BrGreen]  -- regenerates HP (very slowly)
  , icount :: Dice
icount   = 5
  , iverbHit :: Text
iverbHit = "slay"
  , iweight :: Int
iweight  = 0
  , iaspects :: [Aspect]
iaspects = [Skill -> Dice -> Aspect
AddSkill Skill
sk (-1) | Skill
sk <- [Skill
SkMove .. Skill
SkApply]]
               [Aspect] -> [Aspect] -> [Aspect]
forall a. [a] -> [a] -> [a]
++ [ Skill -> Dice -> Aspect
AddSkill Skill
SkMelee 1, Skill -> Dice -> Aspect
AddSkill Skill
SkAlter 1, Skill -> Dice -> Aspect
AddSkill Skill
SkWait 1
                  , Skill -> Dice -> Aspect
AddSkill Skill
SkSight (-3), Skill -> Dice -> Aspect
AddSkill Skill
SkArmorMelee (-10)
                  , Flag -> Aspect
SetFlag Flag
Condition ]  -- hack: display as condition
  , idesc :: Text
idesc    = "Sleep helps to regain health, albeit extremely slowly. Being asleep makes you vulnerable, with gradually diminishing effects as the slumber wears off over several turns. Any non-idle action, not only combat but even yawning or stretching removes a sizable portion of the sleepiness."
  }
impressed :: ItemKind
impressed = ItemKind
armoredSkin
  { isymbol :: Char
isymbol  = 'I'
  , iname :: Text
iname    = "impressed"
  , ifreq :: Freqs ItemKind
ifreq    = [("impressed", 1), ("condition", 1)]
  , iflavour :: [Flavour]
iflavour = [Color] -> [Flavour]
zipPlain [Color
BrRed]
  , iverbHit :: Text
iverbHit = "confuse"
  , iweight :: Int
iweight  = 0
  , iaspects :: [Aspect]
iaspects = [ Skill -> Dice -> Aspect
AddSkill Skill
SkMaxCalm (-1)  -- to help player notice on HUD
                                          -- and to count as bad condition
               , Flag -> Aspect
SetFlag Flag
Fragile  -- to announce "no longer" only when
                                  -- all impressions gone
               , Flag -> Aspect
SetFlag Flag
Condition ]  -- this is really a condition,
                                      -- just not a timed condition
  , ieffects :: [Effect]
ieffects = [ Effect -> Effect
OnSmash (Effect -> Effect) -> Effect -> Effect
forall a b. (a -> b) -> a -> b
$ Text -> Effect
verbMsgLess "impressed"
               , Effect -> Effect
OnSmash (Effect -> Effect) -> Effect -> Effect
forall a b. (a -> b) -> a -> b
$ Text -> Effect
verbMsgNoLonger "impressed" ]
                   -- not periodic, so no wear each turn, so only @OnSmash@
  , idesc :: Text
idesc    = "Being impressed by one's adversary sounds like fun, but on battlefield it equals treason. Almost. Throw in depleted battle calm and it leads to mindless desertion outright."
  }

-- * LH-specific

tooth :: ItemKind
tooth = ItemKind
fist
  { iname :: Text
iname    = "tooth"
  , ifreq :: Freqs ItemKind
ifreq    = [("tooth", 20)]
  , icount :: Dice
icount   = 3
  , iverbHit :: Text
iverbHit = "nail"
  , idamage :: Dice
idamage  = 2 Int -> Int -> Dice
`d` 1
  , idesc :: Text
idesc    = ""
  }
lash :: ItemKind
lash = ItemKind
fist
  { iname :: Text
iname    = "lash"
  , ifreq :: Freqs ItemKind
ifreq    = [("lash", 100)]
  , icount :: Dice
icount   = 1
  , iverbHit :: Text
iverbHit = "lash"
  , idamage :: Dice
idamage  = 3 Int -> Int -> Dice
`d` 1
  , idesc :: Text
idesc    = ""
  }
noseTip :: ItemKind
noseTip = ItemKind
fist
  { iname :: Text
iname    = "tip"
  , ifreq :: Freqs ItemKind
ifreq    = [("nose tip", 50)]
  , icount :: Dice
icount   = 1
  , iverbHit :: Text
iverbHit = "poke"
  , idamage :: Dice
idamage  = 2 Int -> Int -> Dice
`d` 1
  , idesc :: Text
idesc    = ""
  }
lip :: ItemKind
lip = ItemKind
fist
  { iname :: Text
iname    = "lip"
  , ifreq :: Freqs ItemKind
ifreq    = [("lip", 10)]
  , icount :: Dice
icount   = 1
  , iverbHit :: Text
iverbHit = "lap"
  , idamage :: Dice
idamage  = 1 Int -> Int -> Dice
`d` 1
  , iaspects :: [Aspect]
iaspects = Dice -> Aspect
Timeout (3 Dice -> Dice -> Dice
forall a. Num a => a -> a -> a
+ 1 Int -> Int -> Dice
`d` 2)
               Aspect -> [Aspect] -> [Aspect]
forall a. a -> [a] -> [a]
: ItemKind -> [Aspect]
iaspects ItemKind
fist
  , ieffects :: [Effect]
ieffects = [GroupName ItemKind -> Dice -> Effect
toOrganBad "weakened" (2 Dice -> Dice -> Dice
forall a. Num a => a -> a -> a
+ 1 Int -> Int -> Dice
`dL` 3)]
  , idesc :: Text
idesc    = ""
  }
torsionRight :: ItemKind
torsionRight = ItemKind
fist
  { iname :: Text
iname    = "right torsion"
  , ifreq :: Freqs ItemKind
ifreq    = [("right torsion", 100)]
  , icount :: Dice
icount   = 1
  , iverbHit :: Text
iverbHit = "twist"
  , idamage :: Dice
idamage  = 13 Int -> Int -> Dice
`d` 1
  , iaspects :: [Aspect]
iaspects = [Dice -> Aspect
Timeout (Dice -> Aspect) -> Dice -> Aspect
forall a b. (a -> b) -> a -> b
$ 5 Dice -> Dice -> Dice
forall a. Num a => a -> a -> a
+ 1 Int -> Int -> Dice
`d` 5, Skill -> Dice -> Aspect
AddSkill Skill
SkHurtMelee 20]
               [Aspect] -> [Aspect] -> [Aspect]
forall a. [a] -> [a] -> [a]
++ ItemKind -> [Aspect]
iaspects ItemKind
fist
  , ieffects :: [Effect]
ieffects = [GroupName ItemKind -> Dice -> Effect
toOrganBad "slowed" (3 Dice -> Dice -> Dice
forall a. Num a => a -> a -> a
+ 1 Int -> Int -> Dice
`d` 3)]
  , idesc :: Text
idesc    = ""
  }
torsionLeft :: ItemKind
torsionLeft = ItemKind
fist
  { iname :: Text
iname    = "left torsion"
  , ifreq :: Freqs ItemKind
ifreq    = [("left torsion", 100)]
  , icount :: Dice
icount   = 1
  , iverbHit :: Text
iverbHit = "untwist"
  , idamage :: Dice
idamage  = 13 Int -> Int -> Dice
`d` 1
  , iaspects :: [Aspect]
iaspects = [Dice -> Aspect
Timeout (Dice -> Aspect) -> Dice -> Aspect
forall a b. (a -> b) -> a -> b
$ 5 Dice -> Dice -> Dice
forall a. Num a => a -> a -> a
+ 1 Int -> Int -> Dice
`d` 5, Skill -> Dice -> Aspect
AddSkill Skill
SkHurtMelee 20]
               [Aspect] -> [Aspect] -> [Aspect]
forall a. [a] -> [a] -> [a]
++ ItemKind -> [Aspect]
iaspects ItemKind
fist
  , ieffects :: [Effect]
ieffects = [GroupName ItemKind -> Dice -> Effect
toOrganBad "weakened" (3 Dice -> Dice -> Dice
forall a. Num a => a -> a -> a
+ 1 Int -> Int -> Dice
`d` 3)]
  , idesc :: Text
idesc    = ""
  }
pupil :: ItemKind
pupil = ItemKind
fist
  { iname :: Text
iname    = "pupil"
  , ifreq :: Freqs ItemKind
ifreq    = [("pupil", 100)]
  , icount :: Dice
icount   = 1
  , iverbHit :: Text
iverbHit = "gaze at"
  , idamage :: Dice
idamage  = 1 Int -> Int -> Dice
`d` 1
  , iaspects :: [Aspect]
iaspects = [Skill -> Dice -> Aspect
AddSkill Skill
SkSight 12, Dice -> Aspect
Timeout 12]
               [Aspect] -> [Aspect] -> [Aspect]
forall a. [a] -> [a] -> [a]
++ ItemKind -> [Aspect]
iaspects ItemKind
fist
  , ieffects :: [Effect]
ieffects = [Int -> Int -> CStore -> GroupName ItemKind -> Effect
DropItem 1 Int
forall a. Bounded a => a
maxBound CStore
COrgan "condition", Int -> Effect
RefillCalm (-10)]
                 -- can be useful for the player, but Calm drain is a risk
  , idesc :: Text
idesc    = ""
  }