class FTLTools::CharacterBuilder
Builds characters within standard guidelines.
Constants
- DATA_PATH
Attributes
character[R]
Public Class Methods
new()
click to toggle source
# File lib/ftl_tools/character_builder.rb, line 14 def initialize() @character = FTLTools::Character.new @dice = FTLTools::Dice.new @tdm = DataMine.adapter_for(:text) @sdm = DataMine.adapter_for(:sqlite) end
Public Instance Methods
generate_age()
click to toggle source
Assumes base age 18, career terms of four years each, and a random (0-3) number of years.
# File lib/ftl_tools/character_builder.rb, line 47 def generate_age base_age = 18 @character.age = base_age + ( @dice.roll_1 / 2) + ( @character.terms * 4 ) end
generate_appearance()
click to toggle source
Assumes a variety of hair options and skin tones.
# File lib/ftl_tools/character_builder.rb, line 75 def generate_appearance @tdm.start(File.join(FTLTools.root, "data", "appearance", "hair_body.txt")) hb = @tdm.item.capitalize @tdm.start(File.join(FTLTools.root, "data", "appearance", "hair_tone.txt")) ht = @tdm.item @tdm.start(File.join(FTLTools.root, "data", "appearance", "hair_colors.txt")) hc = @tdm.item @tdm.start(File.join(FTLTools.root, "data", "appearance", "hair_length.txt")) hl = @tdm.item @tdm.start(File.join(FTLTools.root, "data", "appearance", "skin_tones.txt")) st = @tdm.item app_string = "#{hb} #{ht} #{hc} #{hl} hair, #{st} skin." @character.appearance = app_string end
generate_career()
click to toggle source
# File lib/ftl_tools/character_builder.rb, line 90 def generate_career @character.social_status.capitalize end
generate_culture()
click to toggle source
Other cultures can be added as user's discretion.
# File lib/ftl_tools/character_builder.rb, line 95 def generate_culture "humaniti" end
generate_gender()
click to toggle source
Only dealing with biological genders.
# File lib/ftl_tools/character_builder.rb, line 100 def generate_gender %w(M F).sample end
generate_name()
click to toggle source
Use the Name
library. Requires @gender in @opts.
# File lib/ftl_tools/character_builder.rb, line 105 def generate_name Name.new(@opts).to_s end
generate_plot()
click to toggle source
Generate a plot
# File lib/ftl_tools/character_builder.rb, line 53 def generate_plot @tdm.start(File.join(FTLTools.root, "data", "mindset", "plots.txt")) @character.plot = @tdm.item.capitalize end
generate_temperament()
click to toggle source
Generate a temperament
# File lib/ftl_tools/character_builder.rb, line 59 def generate_temperament @tdm.start(File.join(FTLTools.root, "data", "mindset", "temperaments.txt")) @character.temperament = @tdm.item.capitalize end
generate_terms()
click to toggle source
Set terms in range 1-5.
# File lib/ftl_tools/character_builder.rb, line 110 def generate_terms [ @dice.roll_1, 5 ].min end
generate_traits()
click to toggle source
Generate emotional traits
# File lib/ftl_tools/character_builder.rb, line 65 def generate_traits @traits = Array.new @tdm.start(File.join(FTLTools.root, "data", "mindset", "positive_traits.txt")) @traits << @tdm.item.capitalize @tdm.start(File.join(FTLTools.root, "data", "mindset", "negative_traits.txt")) @traits << @tdm.item.capitalize @traits end
generate_upp()
click to toggle source
Creates a hash for upp.
# File lib/ftl_tools/character_builder.rb, line 115 def generate_upp upp = Hash.new %i[ str dex end int edu soc ].each { |stat| upp[stat] = @dice.roll_2 } upp end
reset()
click to toggle source
Resets the builder to clear out old objects.
# File lib/ftl_tools/character_builder.rb, line 22 def reset @character = FTLTools::Character.new end
run_career()
click to toggle source
Runs character through a career. This concept of a career assumes the character learns a variety of things,
based on their "normal" life, career, and their specific role, if any.
# File lib/ftl_tools/character_builder.rb, line 126 def run_career @tdm.start(File.join(FTLTools.root, "data", "skills", "role_skills.txt")) role_skills = @tdm.hash_from_data soc_skills = { 'citizen' => @tdm.start(File.join(FTLTools.root, "data", "skills", "citizen_skills.txt")), 'other' => @tdm.start(File.join(FTLTools.root, "data", "skills", "other_skills.txt")), 'noble' => @tdm.start(File.join(FTLTools.root, "data", "skills", "noble_skills.txt")), } ( (@character.terms / 2.0) + 1 ).floor.times { @character.add_skill(role_skills[@character.role]) if role_skills.has_key?(@character.role) @character.add_skill(soc_skills[@character.social_status].sample) } end
setup(char = {})
click to toggle source
Queries provided data and fills in the gaps.
# File lib/ftl_tools/character_builder.rb, line 27 def setup(char = {}) @char = char @character.gender = @char.fetch('gender', generate_gender) @character.culture = @char.fetch('culture', generate_culture) @opts = { 'gender' => @character.gender, 'culture' => @character.culture } @character.name = @char.fetch('name', generate_name) @character.upp = @char.fetch('upp', generate_upp) @character.career = @char.fetch('career', generate_career) @character.role = @char.fetch('role', nil) @character.terms = @char.fetch('terms', generate_terms) @character.age = @char.fetch('age', generate_age) @character.appearance = @char.fetch('appearance', generate_appearance) @character.plot = @char.fetch('plot', generate_plot) @character.temperament = @char.fetch('temperament', generate_temperament) @character.traits = @char.fetch('traits', generate_traits) run_career return @character end