module Species (player_race_names, SpeciesData(..), speciesInfo) where import Data.Char import CreatureData import CharacterData import SpeciesData import CreatureAttribute import Data.Monoid import TerrainData player_race_names :: [String] player_race_names = map (map toLower . show) player_species data SpeciesData = SpeciesData { species_recurring_attributes :: CreatureAttribute, species_starting_attributes :: [CreatureAttributeGenerator] } -- | Give a minimum and maximum ability score, along with a list of special aptitudes that are doubled. aptitudeBlock :: Integer -> Integer -> [CreatureAptitude] -> CreatureAttributeGenerator aptitudeBlock minimal maximal special = mconcat $ map (\a -> attributeMinMax (minimal,maximal) a) [minBound..maxBound :: CreatureAptitude] ++ map (\a -> attributeMinMax (minimal,maximal) a) special -- | Low probability, large magnitude bonuses to aptitude scores. surpriseAptitudes :: CreatureAttributeGenerator surpriseAptitudes = mconcat $ map (\a -> attributeChoice 0.05 [attributeMinMax (1,30) a] []) [minBound..maxBound :: CreatureAptitude] speciesInfo :: Species -> SpeciesData speciesInfo Anachronid = SpeciesData (Speed & Mindfulness & SpotSkill) [ gender 0.8 [aptitudeBlock 1 10 [Speed,Mindfulness], attributeStatic 2 SpotSkill] [aptitudeBlock 10 25 [Speed,Mindfulness], attributeStatic 15 SpotSkill, surpriseAptitudes], attributeStatic 1 $ FavoredClass Barbarian, attributeStatic 1 $ FavoredClass Pirate] speciesInfo Androsynth = SpeciesData (Strength & Intellect) [ aptitudeBlock 12 17 [Strength,Intellect], attributeStatic 1 $ FavoredClass Engineer] speciesInfo Ascendant = SpeciesData (Strength & Mindfulness) [ gender 0.45 [] [], aptitudeBlock 5 15 [Strength,Mindfulness], surpriseAptitudes, attributeStatic 10 JumpSkill, attributeStatic 1 $ FavoredClass Shepherd, attributeStatic 1 $ FavoredClass ForceAdept] speciesInfo Caduceator = SpeciesData (Strength & Charisma) [ gender 0.6 [] [], aptitudeBlock 5 15 [Strength,Charisma], surpriseAptitudes, attributeStatic 1 $ FavoredClass Consular] speciesInfo Encephalon = SpeciesData (Constitution & Intellect) [ gender 0.95 [] [], aptitudeBlock 3 20 [Constitution,Intellect], attributeStatic 1 $ FavoredClass Engineer] speciesInfo Hellion = SpeciesData (Strength & Perception) [ gender 0.5 [] [], aptitudeBlock 5 15 [Strength,Perception], surpriseAptitudes, attributeStatic 5 $ HideSkill, attributeStatic 1 $ FavoredClass Scout, attributeStatic 1 $ FavoredClass Marine, attributeStatic 1 $ FavoredClass Thief, attributeStatic 1 $ FavoredClass Pirate] speciesInfo Goliath = SpeciesData (Constitution & Perception) [ gender 0.55 [] [], aptitudeBlock 3 20 [Constitution,Perception], surpriseAptitudes, attributeStatic 4 $ DamageReductionTrait Melee, attributeStatic 4 $ DamageReductionTrait Ranged, attributeStatic 4 $ DamageReductionTrait Unarmed, attributeStatic 1 $ FavoredClass Barbarian, attributeStatic 1 $ FavoredClass Warrior, attributeStatic 1 $ FavoredClass Scout] speciesInfo Kraken = SpeciesData (Constitution & Charisma) [ gender 0.5 [] [], aptitudeBlock 3 20 [Constitution,Charisma], attributeStatic 1 $ TerrainAffinity Water, surpriseAptitudes, attributeStatic 1 $ FavoredClass Consular] speciesInfo Myrmidon = SpeciesData (Speed & Intellect) [ gender 0.0 [] [], aptitudeBlock 5 15 [Speed,Intellect], surpriseAptitudes, attributeStatic 1 $ FavoredClass Barbarian, attributeStatic 1 $ FavoredClass Engineer, attributeStatic 1 $ FavoredClass Warrior, attributeStatic 5 $ AttackSkill Melee, attributeStatic 5 $ DefenseSkill Melee] speciesInfo Perennial = SpeciesData (Constitution & Mindfulness) [ aptitudeBlock 1 25 [Constitution, Mindfulness], attributeStatic 1 $ TerrainAffinity Forest, attributeStatic 1 $ TerrainAffinity DeepForest, surpriseAptitudes, attributeStatic 1 $ FavoredClass Barbarian, attributeStatic 1 $ FavoredClass Engineer, attributeStatic 1 $ FavoredClass Consular, attributeStatic 1 $ FavoredClass Shepherd] speciesInfo Recreant = SpeciesData (Speed & Perception) [ aptitudeBlock 2 5 [Speed,Perception], surpriseAptitudes, surpriseAptitudes, attributeStatic 5 $ AttackSkill Ranged, attributeStatic 5 $ DamageSkill Ranged, attributeStatic 1 $ FavoredClass Marine, attributeStatic 1 $ FavoredClass Scout] speciesInfo Reptilian = SpeciesData (Speed & Charisma) [ gender 0.35 [] [], aptitudeBlock 5 15 [Speed,Charisma], surpriseAptitudes, attributeStatic 5 $ AttackSkill Unarmed, attributeStatic 5 $ DefenseSkill Unarmed, attributeStatic 1 $ FavoredClass Warrior, attributeStatic 1 $ FavoredClass Consular]