diff options
Diffstat (limited to 'src/rules')
-rw-r--r-- | src/rules/npcs.rs | 16 |
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(); |