packages feed

roguestar-engine-0.6.0.0: src/Species.hs

module Species
    (player_species_names,
     SpeciesData(..),
     speciesInfo)
    where

import Data.Char
import CreatureData
import CharacterData
import SpeciesData
import CreatureAttribute
import Data.Monoid
import TerrainData

player_species_names :: [String]
player_species_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.0,
    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.5,
    aptitudeBlock 5 15 [Strength,Mindfulness],
    surpriseAptitudes,
    attributeStatic 10 JumpSkill,
    attributeStatic 1 $ FavoredClass Shepherd,
    attributeStatic 1 $ FavoredClass ForceAdept]

speciesInfo Caduceator = SpeciesData (Strength & Charisma) [
    gender 0.5,
    aptitudeBlock 5 15 [Strength,Charisma],
    surpriseAptitudes,
    attributeStatic 1 $ FavoredClass Consular]

speciesInfo DustVortex = SpeciesData (Speed & Mindfulness) [
    aptitudeBlock 3 5 [Speed,Mindfulness],
    attributeStatic 10 JumpSkill,
    attributeStatic 1 $ FavoredClass Barbarian]

speciesInfo Encephalon = SpeciesData (Constitution & Intellect) [
    gender 0.5,
    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.5,
    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.5,
    aptitudeBlock 5 15 [Speed,Charisma],
    surpriseAptitudes,
    attributeStatic 5 $ AttackSkill Unarmed,
    attributeStatic 5 $ DefenseSkill Unarmed,
    attributeStatic 1 $ FavoredClass Warrior,
    attributeStatic 1 $ FavoredClass Consular]