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