<commit_before>-- | Monsters and heroes for LambdaHack.
module Content.ActorKind ( cdefs ) where

import Data.List

import Game.LambdaHack.Common.Ability
import Game.LambdaHack.Common.Color
import Game.LambdaHack.Common.ContentDef
import Game.LambdaHack.Common.Dice
import Game.LambdaHack.Common.Misc
import Game.LambdaHack.Common.Time
import Game.LambdaHack.Content.ActorKind

cdefs :: ContentDef ActorKind
cdefs = ContentDef
  { getSymbol = asymbol
  , getName = aname
  , getFreq = afreq
  , validate = validateActorKind
  , content =
      [warrior, adventurer, blacksmith, forester, clerk, hairdresser, lawyer, peddler, taxCollector, projectile, eye, fastEye, nose, elbow, armadillo, gilaMonster, komodoDragon, hyena, alligator, thornbush]
  }
warrior,        adventurer, blacksmith, forester, clerk, hairdresser, lawyer, peddler, taxCollector, projectile, eye, fastEye, nose, elbow, armadillo, gilaMonster, komodoDragon, hyena, alligator, thornbush :: ActorKind

warrior = ActorKind
  { asymbol = '@'
  , aname   = "warrior"  -- modified if in hero faction
  , afreq   = [("hero", 1), ("civilian", 1)]
  , acolor  = BrBlack  -- modified if in hero faction
  , ahp     = 50
  , acalm   = 50
  , aspeed  = toSpeed 2
  , acanDo  = [minBound..maxBound]
  , aitems  = [("fist", CBody), ("foot", CBody), ("eye 12", CBody)]
  }
adventurer = warrior
  { aname   = "adventurer" }
blacksmith = warrior
  { aname   = "blacksmith"  }
forester = warrior
  { aname   = "forester"  }

clerk = warrior
  { aname   = "clerk"
  , afreq   = [("civilian", 1)] }
hairdresser = clerk
  { aname   = "hairdresser" }
lawyer = clerk
  { aname   = "lawyer" }
peddler = clerk
  { aname   = "peddler" }
taxCollector = clerk
  { aname   = "tax collector" }

projectile = ActorKind  -- includes homing missiles
  { asymbol = '*'
  , aname   = "projectile"
  , afreq   = [("projectile", 1)]  -- Does not appear randomly in the dungeon.
  , acolor  = BrWhite
  , ahp     = 0
  , acalm   = 0
  , aspeed  = toSpeed 0
  , acanDo  = []
  , aitems  = []
  }

eye = ActorKind
  { asymbol = 'e'
  , aname   = "reducible eye"
  , afreq   = [("monster", 60), ("horror", 60)]
  , acolor  = BrRed
  , ahp     = 7 * d 4
  , acalm   = 50
  , aspeed  = toSpeed 2
  , acanDo  = [minBound..maxBound]
  , aitems  = [("lash", CBody), ("tentacle", CBody), ("pupil", CBody)]
  }
fastEye = ActorKind
  { asymbol = 'e'
  , aname   = "super-fast eye"
  , afreq   = [("monster", 15), ("horror", 15)]
  , acolor  = BrBlue
  , ahp     = d 6
  , acalm   = 50
  , aspeed  = toSpeed 4
  , acanDo  = [minBound..maxBound]
  , aitems  = [ ("lash", CBody), ("tentacle", CBody), ("tentacle", CBody)
              , ("speed gland 5", CBody), ("pupil", CBody) ]
  }
nose = ActorKind
  { asymbol = 'n'
  , aname   = "point-free nose"
  , afreq   = [("monster", 20), ("horror", 20)]
  , acolor  = Green
  , ahp     = 17 * d 2
  , acalm   = 50
  , aspeed  = toSpeed 1.8
  , acanDo  = [minBound..maxBound]
  , aitems  = [("nose tip", CBody), ("lip", CBody), ("nostril", CBody)]
  }
elbow = ActorKind
  { asymbol = 'e'
  , aname   = "ground elbow"
  , afreq   = [("monster", 20), ("horror", 20)]
  , acolor  = Magenta
  , ahp     = 12 * d 2
  , acalm   = 50
  , aspeed  = toSpeed 2
  , acanDo  = [AbWait, AbMoveItem, AbProject, AbApply]
  , aitems  = [ ("eye 15", CBody), ("armored skin", CBody)
              , ("speed gland 2", CBody)
              , ("any scroll", CEqp), ("any scroll", CEqp), ("any scroll", CEqp)
              , ("any arrow", CEqp), ("any arrow", CEqp) ]
  }

armadillo = ActorKind
  { asymbol = 'a'<commit_msg>Make ground elbow slow, but moving<commit_after>-- | Monsters and heroes for LambdaHack.
module Content.ActorKind ( cdefs ) where

import Data.List

import Game.LambdaHack.Common.Ability
import Game.LambdaHack.Common.Color
import Game.LambdaHack.Common.ContentDef
import Game.LambdaHack.Common.Dice
import Game.LambdaHack.Common.Misc
import Game.LambdaHack.Common.Time
import Game.LambdaHack.Content.ActorKind

cdefs :: ContentDef ActorKind
cdefs = ContentDef
  { getSymbol = asymbol
  , getName = aname
  , getFreq = afreq
  , validate = validateActorKind
  , content =
      [warrior, adventurer, blacksmith, forester, clerk, hairdresser, lawyer, peddler, taxCollector, projectile, eye, fastEye, nose, elbow, armadillo, gilaMonster, komodoDragon, hyena, alligator, thornbush]
  }
warrior,        adventurer, blacksmith, forester, clerk, hairdresser, lawyer, peddler, taxCollector, projectile, eye, fastEye, nose, elbow, armadillo, gilaMonster, komodoDragon, hyena, alligator, thornbush :: ActorKind

warrior = ActorKind
  { asymbol = '@'
  , aname   = "warrior"  -- modified if in hero faction
  , afreq   = [("hero", 1), ("civilian", 1)]
  , acolor  = BrBlack  -- modified if in hero faction
  , ahp     = 50
  , acalm   = 50
  , aspeed  = toSpeed 2
  , acanDo  = [minBound..maxBound]
  , aitems  = [("fist", CBody), ("foot", CBody), ("eye 12", CBody)]
  }
adventurer = warrior
  { aname   = "adventurer" }
blacksmith = warrior
  { aname   = "blacksmith"  }
forester = warrior
  { aname   = "forester"  }

clerk = warrior
  { aname   = "clerk"
  , afreq   = [("civilian", 1)] }
hairdresser = clerk
  { aname   = "hairdresser" }
lawyer = clerk
  { aname   = "lawyer" }
peddler = clerk
  { aname   = "peddler" }
taxCollector = clerk
  { aname   = "tax collector" }

projectile = ActorKind  -- includes homing missiles
  { asymbol = '*'
  , aname   = "projectile"
  , afreq   = [("projectile", 1)]  -- Does not appear randomly in the dungeon.
  , acolor  = BrWhite
  , ahp     = 0
  , acalm   = 0
  , aspeed  = toSpeed 0
  , acanDo  = []
  , aitems  = []
  }

eye = ActorKind
  { asymbol = 'e'
  , aname   = "reducible eye"
  , afreq   = [("monster", 60), ("horror", 60)]
  , acolor  = BrRed
  , ahp     = 7 * d 4
  , acalm   = 50
  , aspeed  = toSpeed 2
  , acanDo  = [minBound..maxBound]
  , aitems  = [("lash", CBody), ("tentacle", CBody), ("pupil", CBody)]
  }
fastEye = ActorKind
  { asymbol = 'e'
  , aname   = "super-fast eye"
  , afreq   = [("monster", 15), ("horror", 15)]
  , acolor  = BrBlue
  , ahp     = d 6
  , acalm   = 50
  , aspeed  = toSpeed 4
  , acanDo  = [minBound..maxBound]
  , aitems  = [ ("lash", CBody), ("tentacle", CBody), ("tentacle", CBody)
              , ("speed gland 5", CBody), ("pupil", CBody) ]
  }
nose = ActorKind
  { asymbol = 'n'
  , aname   = "point-free nose"
  , afreq   = [("monster", 20), ("horror", 20)]
  , acolor  = Green
  , ahp     = 17 * d 2
  , acalm   = 50
  , aspeed  = toSpeed 1.8
  , acanDo  = [minBound..maxBound]
  , aitems  = [("nose tip", CBody), ("lip", CBody), ("nostril", CBody)]
  }
elbow = ActorKind
  { asymbol = 'e'
  , aname   = "ground elbow"
  , afreq   = [("monster", 10), ("horror", 20)]
  , acolor  = Magenta
  , ahp     = 15 * d 2
  , acalm   = 50
  , aspeed  = toSpeed 1.5
  , acanDo  = delete AbMelee [minBound..maxBound]
  , aitems  = [ ("eye 15", CBody), ("armored skin", CBody)
              , ("speed gland 2", CBody)
              , ("any scroll", CEqp), ("any scroll", CEqp), ("any scroll", CEqp)
              , ("any arrow", CEqp), ("any arrow", CEqp), ("any arrow", CEqp) ]
  }

armadillo = ActorKind
  { asymbol = 'a'
{'fraction_non_alphanumeric': 0.15301994699400195, 'fraction_numerical': 0.015762309945599108, 'mean_word_length': 2.873581847649919, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4919814', 'n_tokens_mistral': 2937, 'n_tokens_neox': 2726, 'n_words': 696}