From 0b63b0478462bbe4906a2b69d8c867698b7306dd Mon Sep 17 00:00:00 2001 From: David Gay Date: Fri, 6 Oct 2023 23:33:06 -0400 Subject: Add classes and ability scores --- src/data/rules/classes.yaml | 92 +++++++++++++++++++++++++++++++++++++++++++++ src/lib.rs | 1 + src/rules.rs | 2 + src/rules/ability_scores.rs | 24 ++++++++++++ src/rules/classes.rs | 15 ++++++++ 5 files changed, 134 insertions(+) create mode 100644 src/data/rules/classes.yaml create mode 100644 src/rules.rs create mode 100644 src/rules/ability_scores.rs create mode 100644 src/rules/classes.rs diff --git a/src/data/rules/classes.yaml b/src/data/rules/classes.yaml new file mode 100644 index 0000000..88bf6ef --- /dev/null +++ b/src/data/rules/classes.yaml @@ -0,0 +1,92 @@ +cleric: + name: "Cleric" + prime_requisites: + - Wisdom + npc_ability_score_modifiers: + - ability_score: Wisdom + modifier: +2 + +druid: + name: "Druid" + prime_requisites: + - Wisdom + - Charisma + +fighter: + name: "Fighter" + prime_requisites: + - Strength + npc_ability_score_modifiers: + - ability_score: Strength + modifier: +2 + - ability_score: Constitution + modifier: +1 + +paladin: + name: "Paladin" + prime_requisites: + - Strength + - Wisdom + npc_ability_score_modifiers: + - ability_score: Strength + modifier: +2 + - ability_score: Constitution + modifier: +1 + +ranger: + name: "Ranger" + prime_requisites: + - Strength + - Intelligence + - Wisdom + npc_ability_score_modifiers: + - ability_score: Strength + modifier: +2 + - ability_score: Constitution + modifier: +1 + +magic_user: + name: "Magic-user" + prime_requisites: + - Intelligence + npc_ability_score_modifiers: + - ability_score: Intelligence + modifier: +2 + - ability_score: Dexterity + modifier: +1 + +illusionist: + name: "Illusionist" + prime_requisites: + - Intelligence + - Dexterity + +thief: + name: "Thief" + prime_requisites: + - Dexterity + npc_ability_score_modifiers: + - ability_score: Dexterity + modifier: +2 + - ability_score: Intelligence + modifier: +1 + +assassin: + name: "Assassin" + prime_requisites: + - Strength + - Dexterity + npc_ability_score_modifiers: + - ability_score: Strength + modifier: +1 + - ability_score: Dexterity + modifier: +2 + - ability_score: Intelligence + modifier: +1 + +monk: + name: "Monk" + prime_requisites: + - Strength + - Wisdom + - Dexterity diff --git a/src/lib.rs b/src/lib.rs index 88e14db..342b0f3 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,2 +1,3 @@ pub mod dice; pub mod random_tables; +pub mod rules; diff --git a/src/rules.rs b/src/rules.rs new file mode 100644 index 0000000..9a925db --- /dev/null +++ b/src/rules.rs @@ -0,0 +1,2 @@ +mod ability_scores; +mod classes; diff --git a/src/rules/ability_scores.rs b/src/rules/ability_scores.rs new file mode 100644 index 0000000..a0da9d9 --- /dev/null +++ b/src/rules/ability_scores.rs @@ -0,0 +1,24 @@ +use serde::Deserialize; + +#[derive(Debug, Deserialize, PartialEq, Clone, Copy)] +pub enum AbilityScore { + Strength, + Intelligence, + Wisdom, + Dexterity, + Constitution, + Charisma, +} + +impl AbilityScore { + pub fn abbr(&self) -> &'static str { + match *self { + AbilityScore::Strength => "STR", + AbilityScore::Intelligence => "INT", + AbilityScore::Wisdom => "WIS", + AbilityScore::Dexterity => "DEX", + AbilityScore::Constitution => "CON", + AbilityScore::Charisma => "CHA", + } + } +} diff --git a/src/rules/classes.rs b/src/rules/classes.rs new file mode 100644 index 0000000..4d8f809 --- /dev/null +++ b/src/rules/classes.rs @@ -0,0 +1,15 @@ +use crate::rules::ability_scores::AbilityScore; +use serde::Deserialize; + +#[derive(Deserialize)] +pub struct Class { + pub name: String, + pub prime_requisites: Vec, + pub npc_ability_score_modifiers: Vec, +} + +#[derive(Deserialize)] +pub struct NpcAbilityScoreModifier { + pub ability_score: AbilityScore, + pub modifier: i32, +} -- cgit v1.2.3