summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Gay <eapoems@riseup.net>2023-10-06 23:33:06 -0400
committerDavid Gay <eapoems@riseup.net>2023-10-06 23:35:30 -0400
commit0b63b0478462bbe4906a2b69d8c867698b7306dd (patch)
treeac7a8a691b645a232f1660ebff4823837ccf8026
parent4ce7a6f13b4c57e449048591f17a06ec3fb63f96 (diff)
Add classes and ability scores
-rw-r--r--src/data/rules/classes.yaml92
-rw-r--r--src/lib.rs1
-rw-r--r--src/rules.rs2
-rw-r--r--src/rules/ability_scores.rs24
-rw-r--r--src/rules/classes.rs15
5 files changed, 134 insertions, 0 deletions
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<AbilityScore>,
+ pub npc_ability_score_modifiers: Vec<NpcAbilityScoreModifier>,
+}
+
+#[derive(Deserialize)]
+pub struct NpcAbilityScoreModifier {
+ pub ability_score: AbilityScore,
+ pub modifier: i32,
+}