summaryrefslogtreecommitdiff
path: root/src/rules
diff options
context:
space:
mode:
Diffstat (limited to 'src/rules')
-rw-r--r--src/rules/npcs.rs16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/rules/npcs.rs b/src/rules/npcs.rs
index dc65dbb..696ba0a 100644
--- a/src/rules/npcs.rs
+++ b/src/rules/npcs.rs
@@ -1,4 +1,5 @@
use crate::dice::roll_formula;
+use crate::random_tables::RANDOM_TABLES;
use crate::rules::ability_scores::{AbilityScore, AbilityScoreCollection};
use crate::rules::classes::Class;
use crate::rules::races::Race;
@@ -11,6 +12,7 @@ pub struct Npc {
pub race: Option<&'static Race>,
pub class: Option<&'static Class>,
pub ability_scores: Option<AbilityScoreCollection>,
+ pub personality: Option<String>,
}
impl Npc {
@@ -19,12 +21,14 @@ impl Npc {
race: Option<&'static Race>,
class: Option<&'static Class>,
ability_scores: Option<AbilityScoreCollection>,
+ personality: Option<String>,
) -> Self {
Npc {
alignment,
race,
class,
ability_scores,
+ personality,
}
}
@@ -90,11 +94,23 @@ impl Npc {
self.ability_scores = Some(score_collection);
+ // TODO: Limit human starting ability scores to 18.
// TODO: Verify legality of class based on alignment.
// TODO: Verify legality of class based on race.
// TODO: Verify legality of class based on ability scores.
}
+ pub fn randomize_personality(&mut self) {
+ let appearance = RANDOM_TABLES
+ .roll_table("npc_general_appearance")
+ .to_string();
+ let tendencies = RANDOM_TABLES
+ .roll_table("npc_general_tendencies")
+ .to_string();
+ let components = vec![appearance, tendencies];
+ self.personality = Some(components.join(", "));
+ }
+
// TODO: Probably break this out later like this.
// fn increase_prime_requisites(&mut self, roll_result: &mut RollResult) {
// let class_ref = self.class.unwrap();