Compare commits
3 commits
56b29314ad
...
7d8bf5d857
Author | SHA1 | Date | |
---|---|---|---|
Nox Sluijtman | 7d8bf5d857 | ||
Nox Sluijtman | f12134bf55 | ||
Nox Sluijtman | 554a26fff6 |
12
flake.lock
12
flake.lock
|
@ -5,11 +5,11 @@
|
|||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1694529238,
|
||||
"narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=",
|
||||
"lastModified": 1731533236,
|
||||
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "ff7b65b44d01cf9ba6a71320833626af21126384",
|
||||
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -20,11 +20,11 @@
|
|||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1699169573,
|
||||
"narHash": "sha256-cvUb1xZkvOp3W2SzylStrTirhVd9zCeo5utJl9nSIhw=",
|
||||
"lastModified": 1704290814,
|
||||
"narHash": "sha256-LWvKHp7kGxk/GEtlrGYV68qIvPHkU9iToomNFGagixU=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "aeefe2054617cae501809b82b44a8e8f7be7cc4b",
|
||||
"rev": "70bdadeb94ffc8806c0570eb5c2695ad29f0e421",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
haskellPackages.haskell-language-server # you must build it with your ghc to work
|
||||
ghcid
|
||||
cabal-install
|
||||
stylish-haskell
|
||||
];
|
||||
inputsFrom = map (__getAttr "env") (__attrValues self.packages.${system});
|
||||
};
|
||||
|
|
|
@ -2,8 +2,10 @@ module DND
|
|||
( module DND.Sheet.Content
|
||||
, module DND.Sheet.Parser
|
||||
, module DND.Bob
|
||||
, module DND.Dice
|
||||
) where
|
||||
|
||||
import DND.Sheet.Content
|
||||
import DND.Sheet.Parser
|
||||
import DND.Bob
|
||||
import DND.Bob
|
||||
import DND.Dice
|
||||
import DND.Sheet.Content
|
||||
import DND.Sheet.Parser
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
module DND.Bob (bob) where
|
||||
|
||||
import DND.Sheet.Content
|
||||
import DND.Sheet.Content
|
||||
|
||||
bob :: Character
|
||||
bob = Character testPreamble testTrivia testStats (Just testSpells)
|
||||
bob = Character {skills = testSkills, trivia = testTrivia, stats = testStats, spells = Just testSpells, preamble = testPreamble, feats = Just testFeatures}
|
||||
|
||||
testStats :: [Stat]
|
||||
testStats = [strStat,dexStat,conStat,intStat,wisStat,chaStat]
|
||||
testStats = [strStat, dexStat, conStat, intStat, wisStat, chaStat]
|
||||
|
||||
testPreamble :: Preamble
|
||||
testPreamble = Preamble 1 "Bob" "Elf" "Fighter" False
|
||||
|
@ -15,65 +15,72 @@ testTrivia :: Trivia
|
|||
testTrivia = Trivia "farmer" "none" "I me likey fun things" "yay" "all" "idk"
|
||||
|
||||
strStat :: Stat
|
||||
strStat = Stat "Strength" 10 False strSkills
|
||||
strStat = Stat "Strength" 10 False
|
||||
|
||||
strSkills :: [Skill]
|
||||
strSkills = [ Skill "Athletics" None ]
|
||||
strSkills = [ Skill "Athletics" None "Strength" ]
|
||||
|
||||
dexStat :: Stat
|
||||
dexStat = Stat "Dexterity" 10 False dexSkills
|
||||
dexStat = Stat "Dexterity" 10 False
|
||||
|
||||
dexSkills :: [Skill]
|
||||
dexSkills = [ Skill "Acrobatics" None
|
||||
, Skill "Sleight of Hand" None
|
||||
, Skill "Stealth" None
|
||||
dexSkills = [ Skill "Acrobatics" None "Dexterity"
|
||||
, Skill "Sleight of Hand" None "Dexterity"
|
||||
, Skill "Stealth" None "Dexterity"
|
||||
]
|
||||
|
||||
conStat :: Stat
|
||||
conStat = Stat "Constitution" 10 False []
|
||||
conStat = Stat "Constitution" 10 False
|
||||
|
||||
intStat :: Stat
|
||||
intStat = Stat "Intelligence" 10 False intSkills
|
||||
intStat = Stat "Intelligence" 10 False
|
||||
|
||||
intSkills :: [Skill]
|
||||
intSkills = [ Skill "Arcana" None
|
||||
, Skill "History" None
|
||||
, Skill "Investigation" None
|
||||
, Skill "Nature" None
|
||||
, Skill "Religion" None
|
||||
intSkills = [ Skill "Arcana" None "Intelligence"
|
||||
, Skill "History" None "Intelligence"
|
||||
, Skill "Investigation" None "Intelligence"
|
||||
, Skill "Nature" None "Intelligence"
|
||||
, Skill "Religion" None "Intelligence"
|
||||
]
|
||||
|
||||
wisStat :: Stat
|
||||
wisStat = Stat "Wisdom" 10 False wisSkills
|
||||
wisStat = Stat "Wisdom" 10 False
|
||||
|
||||
wisSkills :: [Skill]
|
||||
wisSkills = [ Skill "Animal Handling" None
|
||||
, Skill "Insight" None
|
||||
, Skill "Medicine" None
|
||||
, Skill "Perception" None
|
||||
, Skill "Survival" None
|
||||
wisSkills = [ Skill "Animal Handling" None "Wisdom"
|
||||
, Skill "Insight" None "Wisdom"
|
||||
, Skill "Medicine" None "Wisdom"
|
||||
, Skill "Perception" None "Wisdom"
|
||||
, Skill "Survival" None "Wisdom"
|
||||
]
|
||||
|
||||
chaStat :: Stat
|
||||
chaStat = Stat "Charisma" 10 False chaSkills
|
||||
chaStat = Stat "Charisma" 10 False
|
||||
|
||||
chaSkills :: [Skill]
|
||||
chaSkills = [ Skill "Deception" None
|
||||
, Skill "Intimidation" None
|
||||
, Skill "Performance" None
|
||||
, Skill "Persuasion" None
|
||||
chaSkills = [ Skill "Deception" None "Charisma"
|
||||
, Skill "Intimidation" None "Charisma"
|
||||
, Skill "Performance" None "Charisma"
|
||||
, Skill "Persuasion" None "Charisma"
|
||||
]
|
||||
|
||||
testSkills :: [Skill]
|
||||
testSkills = strSkills ++ dexSkills ++ intSkills ++ wisSkills ++ chaSkills
|
||||
|
||||
testSpells :: [Spell]
|
||||
testSpells = [ Spell "Firetesticle" -- spellName
|
||||
3 -- spellLevel
|
||||
"3 Minutes" -- castingTime
|
||||
50 -- range
|
||||
[Verbal, Somatic] -- components
|
||||
"Instant" -- duration
|
||||
"Dexterity" -- attackSave
|
||||
"Fire" -- damge/effect
|
||||
"Shoots a huge testicle shaped fireball" -- description
|
||||
"Conjuration" -- school
|
||||
"Cast more of the sodding things" -- atHighLevel
|
||||
testSpells = [ Spell { spellName = "Firetesticle"
|
||||
, spellLevel = 3
|
||||
, castingTime = "3 Minutes"
|
||||
, range = 50
|
||||
, components = [Verbal, Somatic]
|
||||
, duration = "Instant"
|
||||
, attackSave = "Dexterity"
|
||||
, damageEffect = "Fire"
|
||||
, description = "Shoots a huge testicle shaped fireball"
|
||||
, school = "Conjuration"
|
||||
, atHighLevel = "Cast more of the sodding things"
|
||||
}
|
||||
]
|
||||
|
||||
testFeatures :: [Feature]
|
||||
testFeatures = [ Roleplay FeatInfo { featName = "fiets", featDescription = "allows you to ride a 'fiets'" } ]
|
||||
|
|
16
lib/DND/Dice.hs
Normal file
16
lib/DND/Dice.hs
Normal file
|
@ -0,0 +1,16 @@
|
|||
module DND.Dice
|
||||
( rolls
|
||||
, d20
|
||||
, advantage
|
||||
) where
|
||||
|
||||
import System.Random
|
||||
|
||||
rolls :: RandomGen a => Int -> Int -> a -> [Int]
|
||||
rolls x y = take x . randomRs (1, y)
|
||||
|
||||
d20 :: RandomGen a => a -> Int
|
||||
d20 = minimum . rolls 1 20
|
||||
|
||||
advantage :: RandomGen a => a -> Int
|
||||
advantage = maximum . rolls 2 20
|
|
@ -3,5 +3,5 @@ module DND.Sheet
|
|||
, module DND.Sheet.Parser
|
||||
) where
|
||||
|
||||
import DND.Sheet.Content
|
||||
import DND.Sheet.Parser
|
||||
import DND.Sheet.Content
|
||||
import DND.Sheet.Parser
|
||||
|
|
|
@ -10,10 +10,11 @@ module DND.Sheet.Content
|
|||
, Spell(..)
|
||||
, SpellComponent(..)
|
||||
, Feature(..)
|
||||
, FeatInfo(..)
|
||||
) where
|
||||
|
||||
import Data.Aeson ( FromJSON, ToJSON )
|
||||
import GHC.Generics ( Generic )
|
||||
import Data.Aeson (FromJSON, ToJSON)
|
||||
import GHC.Generics (Generic)
|
||||
|
||||
instance FromJSON Character
|
||||
instance ToJSON Character
|
||||
|
@ -36,6 +37,12 @@ instance ToJSON ScoreMod
|
|||
instance FromJSON Spell
|
||||
instance ToJSON Spell
|
||||
|
||||
instance FromJSON Feature
|
||||
instance ToJSON Feature
|
||||
|
||||
instance FromJSON FeatInfo
|
||||
instance ToJSON FeatInfo
|
||||
|
||||
instance FromJSON SpellComponent
|
||||
instance ToJSON SpellComponent
|
||||
|
||||
|
@ -46,53 +53,54 @@ data ScoreMod = None
|
|||
|
||||
data Character = Character
|
||||
{ preamble :: Preamble
|
||||
, trivia :: Trivia
|
||||
, stats :: [Stat]
|
||||
, spells :: Maybe [Spell]
|
||||
--, feats :: [Feat]
|
||||
, trivia :: Trivia
|
||||
, stats :: [Stat]
|
||||
, skills :: [Skill]
|
||||
, spells :: Maybe [Spell]
|
||||
, feats :: Maybe [Feature]
|
||||
} deriving ( Show, Eq, Ord, Generic)
|
||||
|
||||
data Preamble = Preamble
|
||||
{ charLevel :: Int
|
||||
, charName :: String
|
||||
, charRace :: String
|
||||
, charClass :: String
|
||||
{ charLevel :: Int
|
||||
, charName :: String
|
||||
, charRace :: String
|
||||
, charClass :: String
|
||||
, jackOfAllTrades :: Bool
|
||||
} deriving ( Show, Eq, Ord, Generic)
|
||||
|
||||
data Trivia = Trivia
|
||||
{ background :: String
|
||||
{ background :: String
|
||||
, personalityTrait :: String
|
||||
, ideals :: String
|
||||
, bonds :: String
|
||||
, flaws :: String
|
||||
, quirk :: String
|
||||
, ideals :: String
|
||||
, bonds :: String
|
||||
, flaws :: String
|
||||
, quirk :: String
|
||||
} deriving ( Show, Eq, Ord, Generic)
|
||||
|
||||
data Skill = Skill
|
||||
{ skillName :: String
|
||||
, skillMod :: ScoreMod
|
||||
{ skillName :: String
|
||||
, skillMod :: ScoreMod
|
||||
, relatedStat :: String
|
||||
} deriving ( Show, Eq, Ord, Generic)
|
||||
|
||||
data Stat = Stat
|
||||
{ stat :: String
|
||||
, score :: Int
|
||||
{ statName :: String
|
||||
, score :: Int
|
||||
, proficient :: Bool
|
||||
, skills :: [Skill]
|
||||
} deriving ( Show, Eq, Ord, Generic)
|
||||
|
||||
data Spell = Spell
|
||||
{ spellName :: String
|
||||
, spellLevel :: Int
|
||||
, castingTime :: String
|
||||
, range :: Int
|
||||
, components :: [SpellComponent]
|
||||
, duration :: String
|
||||
, attackSave :: String
|
||||
{ spellName :: String
|
||||
, spellLevel :: Int
|
||||
, castingTime :: String
|
||||
, range :: Int
|
||||
, components :: [SpellComponent]
|
||||
, duration :: String
|
||||
, attackSave :: String
|
||||
, damageEffect :: String
|
||||
, description :: String
|
||||
, school :: String
|
||||
, atHighLevel :: String
|
||||
, description :: String
|
||||
, school :: String
|
||||
, atHighLevel :: String
|
||||
} deriving ( Show, Eq, Ord, Generic)
|
||||
|
||||
data SpellComponent = Verbal
|
||||
|
@ -100,21 +108,25 @@ data SpellComponent = Verbal
|
|||
| Material
|
||||
deriving ( Show, Eq, Ord, Generic)
|
||||
|
||||
data FeatInfo = FeatInfo { featName :: String
|
||||
, featDescription :: String
|
||||
} deriving ( Show, Eq, Ord, Generic)
|
||||
|
||||
data Feature = StatIncrease
|
||||
{ increase :: [Stat] }
|
||||
| SetProficiency
|
||||
{ changeModState :: [ScoreMod]
|
||||
, featDescription :: String
|
||||
{ featInfo :: FeatInfo
|
||||
, increase :: [Stat] }
|
||||
| SetProficiency
|
||||
{ featInfo :: FeatInfo
|
||||
, changeModState :: [ScoreMod]
|
||||
}
|
||||
| SetExpertise
|
||||
{ changeModState :: [ScoreMod]
|
||||
, featDescription :: String
|
||||
{ featInfo :: FeatInfo
|
||||
, changeModState :: [ScoreMod]
|
||||
}
|
||||
| AddSpell
|
||||
{ addSpell :: [Spell]
|
||||
, featDescription :: String
|
||||
{ featInfo :: FeatInfo
|
||||
, addSpell :: [Spell]
|
||||
}
|
||||
| Roleplay
|
||||
{ featDescription :: String
|
||||
}
|
||||
deriving ( Show, Eq, Ord, Generic)
|
||||
| Roleplay
|
||||
{ featInfo :: FeatInfo }
|
||||
deriving ( Show, Eq, Ord, Generic)
|
||||
|
|
|
@ -4,16 +4,17 @@ module DND.Sheet.Parser
|
|||
, listSkills
|
||||
, createExample
|
||||
, getName
|
||||
, getStat
|
||||
, listSkillNames
|
||||
) where
|
||||
|
||||
import Data.Aeson
|
||||
import DND.Sheet.Content
|
||||
import DND.Bob(bob)
|
||||
import Control.Monad
|
||||
import qualified Data.ByteString.Lazy as B
|
||||
import Control.Monad
|
||||
import Data.Aeson
|
||||
import qualified Data.ByteString.Lazy as B
|
||||
import qualified Data.ByteString.Lazy.UTF8 as BSU
|
||||
import Data.Maybe (fromJust)
|
||||
import Data.Maybe (fromJust)
|
||||
import DND.Bob (bob)
|
||||
import DND.Sheet.Content
|
||||
|
||||
--getSheet :: FilePath -> IO B.ByteString
|
||||
--getSheet = B.readFile
|
||||
|
@ -34,3 +35,6 @@ createExample = flip encodeFile bob
|
|||
|
||||
getName :: Character -> String
|
||||
getName = charName . preamble
|
||||
|
||||
getStat :: Character -> String -> Stat
|
||||
getStat char s = head . filter (\a -> statName a == s) . stats $ char
|
||||
|
|
|
@ -58,6 +58,7 @@ library
|
|||
|
||||
exposed-modules: DND
|
||||
, DND.Bob
|
||||
, DND.Dice
|
||||
, DND.Sheet
|
||||
, DND.Sheet.Content
|
||||
, DND.Sheet.Parser
|
||||
|
@ -66,6 +67,7 @@ library
|
|||
, aeson
|
||||
, bytestring
|
||||
, utf8-string
|
||||
, random
|
||||
|
||||
hs-source-dirs: lib
|
||||
|
||||
|
|
Loading…
Reference in a new issue