From cbcbd239551626a06b7b4dbfcee59f0532c1a358 Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Wed, 2 Nov 2022 18:10:50 -0500 Subject: [PATCH 01/45] wip --- src/data/custom/.gitignore | 1 + src/lib/data.rb | 7 ++++++- src/lib/data/custom.rb | 8 ++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 src/data/custom/.gitignore create mode 100644 src/lib/data/custom.rb diff --git a/src/data/custom/.gitignore b/src/data/custom/.gitignore new file mode 100644 index 0000000..72e8ffc --- /dev/null +++ b/src/data/custom/.gitignore @@ -0,0 +1 @@ +* diff --git a/src/lib/data.rb b/src/lib/data.rb index fc5abd3..833f71e 100644 --- a/src/lib/data.rb +++ b/src/lib/data.rb @@ -2,6 +2,7 @@ require_relative 'data/gold' require_relative 'data/wizard' require_relative 'data/dark_elf' require_relative 'data/troll' +require_relative 'data/custom' module Charred class Data @@ -9,6 +10,7 @@ module Charred include Charred::Wizard include Charred::DarkElf include Charred::Troll + include Charred::Custom attr :data @@ -27,6 +29,9 @@ module Charred puts 'loading trolls' load_troll(@data) + puts 'loading custom stocks' + load_custom(@data) + @data[:traits] = @data[:traits].sort.to_h @data[:skills] = @data[:skills].sort.to_h end @@ -54,4 +59,4 @@ module Charred end end end -end \ No newline at end of file +end diff --git a/src/lib/data/custom.rb b/src/lib/data/custom.rb new file mode 100644 index 0000000..48fd332 --- /dev/null +++ b/src/lib/data/custom.rb @@ -0,0 +1,8 @@ +require 'json' + +module Charred + module Custom + def load_custom(data) + end + end +end -- 2.37.3 From 7d8540d69a4bf906ce7c06314836a22f8d99a33b Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Tue, 15 Nov 2022 20:12:27 -0600 Subject: [PATCH 02/45] Stub custom stock parsing --- src/lib/data.rb | 3 +++ src/lib/data/custom.rb | 23 +++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/lib/data.rb b/src/lib/data.rb index 833f71e..42eba5a 100644 --- a/src/lib/data.rb +++ b/src/lib/data.rb @@ -58,5 +58,8 @@ module Charred [] end end + + def json_get(filename) + JSON.parse(File.read(filename)) end end diff --git a/src/lib/data/custom.rb b/src/lib/data/custom.rb index 48fd332..4c74fa5 100644 --- a/src/lib/data/custom.rb +++ b/src/lib/data/custom.rb @@ -3,6 +3,29 @@ require 'json' module Charred module Custom def load_custom(data) + Dir.glob("data/custom/*/") { |dir| + stock_name = File.basename(dir) + + if File.readable?("dir/skills.json") + skills = json_get("dir/skills.json") + verbose_merge data[:skills], skills + end + + if File.readable?("dir/traits.json") + traits = json_get("dir/traits.json") + verbose_merge data[:traits], traits + end + + if File.readable?("dir/lifepaths.json") + lifepaths = json_get("dir/lifepaths.json") + data[:lifepaths][stock_name] = lifepaths + end + + if File.readable?("dir/resources.json") + resources = json_get("dir/resources.json") + data[:resources][stock_name] = resources + end + } end end end -- 2.37.3 From 43cca46dde304fae20820b2e6bcc8ee9b10bc32b Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Tue, 20 Dec 2022 01:22:07 -0600 Subject: [PATCH 03/45] Begin moving stock data to objects --- src/app.rb | 4 ++++ src/lib/data.rb | 4 +++- src/lib/stock.rb | 22 ++++++++++++++++++++++ src/public/js/burning-service.js | 20 ++++++++++++++------ 4 files changed, 43 insertions(+), 7 deletions(-) create mode 100644 src/lib/stock.rb diff --git a/src/app.rb b/src/app.rb index f540752..69be77b 100644 --- a/src/app.rb +++ b/src/app.rb @@ -49,6 +49,10 @@ get '/traits' do json DATA[:traits] end +get '/stock_objs' do + json DATA[:stock_objs] +end + get '/lifepaths/:stock' do if DATA[:stocks].include? params['stock'] json DATA[:lifepaths][params['stock']] diff --git a/src/lib/data.rb b/src/lib/data.rb index fc5abd3..713f783 100644 --- a/src/lib/data.rb +++ b/src/lib/data.rb @@ -2,6 +2,7 @@ require_relative 'data/gold' require_relative 'data/wizard' require_relative 'data/dark_elf' require_relative 'data/troll' +require_relative 'stock' module Charred class Data @@ -29,6 +30,7 @@ module Charred @data[:traits] = @data[:traits].sort.to_h @data[:skills] = @data[:skills].sort.to_h + @data[:stock_objs] = @data[:stocks].map { |s| Stock.new s, s } end def verbose_merge(to, from) @@ -54,4 +56,4 @@ module Charred end end end -end \ No newline at end of file +end diff --git a/src/lib/stock.rb b/src/lib/stock.rb new file mode 100644 index 0000000..77d623c --- /dev/null +++ b/src/lib/stock.rb @@ -0,0 +1,22 @@ +module Charred + # module Stock + class Stock + attr :key + attr :name + + def initialize(key, name) + @key = key + @name = name + end + def as_json(options = {}) + { + "key" => key, + "name" => name + } + end + def to_json(*a) + as_json.to_json(*a) + end + # end + end +end diff --git a/src/public/js/burning-service.js b/src/public/js/burning-service.js index 644ecc9..0bff544 100644 --- a/src/public/js/burning-service.js +++ b/src/public/js/burning-service.js @@ -290,7 +290,20 @@ function BurningDataService($http) { } } - var stocks = ["man", "dwarf", "elf", "orc", "roden", "wolf", "troll"]; + var stocks; + $http.get("/stock_objs", {'timeout': 3000}). + success(function(data,status,headers,config){ + stocks = data.map(s => s.key); + for (var i = 0; i < stocks.length; i++) { + loadLifepathsForStock(stocks[i]); + loadStartingStatPtsForStock(stocks[i]); + loadResourcesForStock(stocks[i]); + } + console.log("Stocks fetched from server: " + stocks) + }). + error(function(data,status,headers,config){ + console.log("Error: Getting stocks from server failed: HTTP code " + status + ": " + data); + }); var myself = this; /* Load lifepaths from server */ @@ -350,11 +363,6 @@ function BurningDataService($http) { }); } - for (var i = 0; i < stocks.length; i++) { - loadLifepathsForStock(stocks[i]); - loadStartingStatPtsForStock(stocks[i]); - loadResourcesForStock(stocks[i]); - } /* Load skills from server */ $http.get("/skills", {'timeout': 3000} ). -- 2.37.3 From 3f5b2f421970bc240b404affc81d18480b549c80 Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Tue, 20 Dec 2022 19:20:42 -0600 Subject: [PATCH 04/45] Stub expanded stock class --- src/lib/data.rb | 2 +- src/lib/stock.rb | 48 ++++++++++++++++++++++++++++++------------------ 2 files changed, 31 insertions(+), 19 deletions(-) diff --git a/src/lib/data.rb b/src/lib/data.rb index 713f783..c9a07d3 100644 --- a/src/lib/data.rb +++ b/src/lib/data.rb @@ -30,7 +30,7 @@ module Charred @data[:traits] = @data[:traits].sort.to_h @data[:skills] = @data[:skills].sort.to_h - @data[:stock_objs] = @data[:stocks].map { |s| Stock.new s, s } + @data[:stock_objs] = @data[:stocks].map { |s| Stock.new s } end def verbose_merge(to, from) diff --git a/src/lib/stock.rb b/src/lib/stock.rb index 77d623c..0086c68 100644 --- a/src/lib/stock.rb +++ b/src/lib/stock.rb @@ -1,22 +1,34 @@ module Charred - # module Stock - class Stock - attr :key - attr :name + class Stock + @@default_stride = 6 - def initialize(key, name) - @key = key - @name = name - end - def as_json(options = {}) - { - "key" => key, - "name" => name - } - end - def to_json(*a) - as_json.to_json(*a) - end - # end + attr :key + attr :name + attr :stride + attr :common_traits + attr :settings + attr :starting_stats + + def initialize(key, name = key, stride = @@default_stride) + @key = key + @name = name + @stride = stride + @common_traits = [] + @settings = [] + @starting_stats = [] + end + def as_json(options = {}) + { + "key" => key, + "name" => name, + "stride" => stride, + "common_traits" => common_traits, + "settings" => settings, + "starting_stats" => starting_stats + } + end + def to_json(*a) + as_json.to_json(*a) + end end end -- 2.37.3 From cf351b0c2443c33f717ae507162cd72ed8db3d8f Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Sat, 24 Dec 2022 23:34:08 -0600 Subject: [PATCH 05/45] wip --- src/public/js/burning-service.js | 72 ++++++++++++++++---------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/src/public/js/burning-service.js b/src/public/js/burning-service.js index 0bff544..b36391f 100644 --- a/src/public/js/burning-service.js +++ b/src/public/js/burning-service.js @@ -263,32 +263,32 @@ function BurningDataService($http) { // A hash of StartingStatPoints objects keyed by stock. this.startingStatPts = {}; - this.dataSetsLoaded = 0; - // Total data sets: - // lifepaths: 7 (man, dwarf, elf, orc, roden, wolf, troll) - // stat points: 7 (man, dwarf, elf, orc, roden, wolf, troll) - // skills - // traits - // resources: 7 (man, dwarf, elf, orc, roden, wolf. troll) - // TOTAL: 23 - this.totalDataSets = 23; - this.onAllDatasetsLoaded = null; - this.registerOnAllDatasetsLoaded = function(callback){ - if ( this.dataSetsLoaded >= this.totalDataSets ){ - callback(); - } - this.onAllDatasetsLoaded = callback; - } - - this.datasetLoaded = function(){ - this.dataSetsLoaded += 1; - if ( this.onAllDatasetsLoaded && (this.dataSetsLoaded >= this.totalDataSets) ){ - this.onAllDatasetsLoaded(); - } - if ( this.dataSetsLoaded > this.totalDataSets){ - console.log("Error: the totalDataSets setting in BurningDataService is too low! This will cause wierd errors. Please adjust it"); - } - } + // this.dataSetsLoaded = 0; + // // Total data sets: + // // lifepaths: 7 (man, dwarf, elf, orc, roden, wolf, troll) + // // stat points: 7 (man, dwarf, elf, orc, roden, wolf, troll) + // // skills + // // traits + // // resources: 7 (man, dwarf, elf, orc, roden, wolf. troll) + // // TOTAL: 23 + // this.totalDataSets = 23; + // this.onAllDatasetsLoaded = null; + // this.registerOnAllDatasetsLoaded = function(callback){ + // if ( this.dataSetsLoaded >= this.totalDataSets ){ + // callback(); + // } + // this.onAllDatasetsLoaded = callback; + // } + + // this.datasetLoaded = function(){ + // this.dataSetsLoaded += 1; + // if ( this.onAllDatasetsLoaded && (this.dataSetsLoaded >= this.totalDataSets) ){ + // this.onAllDatasetsLoaded(); + // } + // if ( this.dataSetsLoaded > this.totalDataSets){ + // console.log("Error: the totalDataSets setting in BurningDataService is too low! This will cause wierd errors. Please adjust it"); + // } + // } var stocks; $http.get("/stock_objs", {'timeout': 3000}). @@ -316,11 +316,11 @@ function BurningDataService($http) { $http.get("/lifepaths/" + stock, {'timeout': 3000} ). success(function(data,status,headers,config){ myself.lifepaths[stock] = data; - myself.datasetLoaded(); + // myself.datasetLoaded(); console.log("Loaded "+stock+" lifepaths. " + Object.keys(myself.lifepaths).length + " settings"); }). error(function(data,status,headers,config){ - myself.datasetLoaded(); + // myself.datasetLoaded(); console.log("Error: Getting "+stock+" lifepaths from server failed: HTTP code " + status + ": " + data); }); } @@ -335,11 +335,11 @@ function BurningDataService($http) { $http.get("/starting_stat_pts/" + stock, {'timeout': 3000} ). success(function(data,status,headers,config){ myself.startingStatPts[stock] = new StartingStatPoints(data); - myself.datasetLoaded(); + // myself.datasetLoaded(); console.log("Loaded "+stock+" starting stat points. "); }). error(function(data,status,headers,config){ - myself.datasetLoaded(); + // myself.datasetLoaded(); console.log("Error: Getting "+stock+" stat points from server failed: HTTP code " + status + ": " + data); }); } @@ -354,11 +354,11 @@ function BurningDataService($http) { $http.get("/resources/" + stock, {'timeout': 3000} ). success(function(data,status,headers,config){ myself.resources[stock] = data; - myself.datasetLoaded(); + // myself.datasetLoaded(); console.log("Loaded "+stock+" resources. "); }). error(function(data,status,headers,config){ - myself.datasetLoaded(); + // myself.datasetLoaded(); console.log("Error: Getting "+stock+" stat points from server failed: HTTP code " + status + ": " + data); }); } @@ -368,11 +368,11 @@ function BurningDataService($http) { $http.get("/skills", {'timeout': 3000} ). success(function(data,status,headers,config){ myself.skills = data; - myself.datasetLoaded(); + // myself.datasetLoaded(); console.log("Loaded skills. "); }). error(function(data,status,headers,config){ - myself.datasetLoaded(); + // myself.datasetLoaded(); console.log("Error: Getting skills from server failed: HTTP code " + status + ": " + data); }); @@ -380,11 +380,11 @@ function BurningDataService($http) { $http.get("/traits", {'timeout': 3000} ). success(function(data,status,headers,config){ myself.traits = data; - myself.datasetLoaded(); + // myself.datasetLoaded(); console.log("Loaded traits. "); }). error(function(data,status,headers,config){ - myself.datasetLoaded(); + // myself.datasetLoaded(); console.log("Error: Getting traits from server failed: HTTP code " + status + ": " + data); }); } -- 2.37.3 From 8ec40eba1308af2d9220ae7013a86526cc0fd24c Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Sun, 25 Dec 2022 13:16:38 -0600 Subject: [PATCH 06/45] Load troll data --- src/data/troll/stock.json | 99 +++++++++++++++++++++++++++++++++++++++ src/lib/data.rb | 2 +- src/lib/data/troll.rb | 7 ++- src/lib/stock.rb | 17 +++---- 4 files changed, 115 insertions(+), 10 deletions(-) create mode 100644 src/data/troll/stock.json diff --git a/src/data/troll/stock.json b/src/data/troll/stock.json new file mode 100644 index 0000000..a1139c4 --- /dev/null +++ b/src/data/troll/stock.json @@ -0,0 +1,99 @@ +{ + "key": "troll", + "name": "Troll", + "stride": 7, + "common_traits": [ + "Black Nails", + "Fangs", + "Night Blooded", + "Night Eyed (Troll)", + "Massive Stature (Troll)", + "Stone's Age", + "Tough (Troll)", + "Troll Skin", + "Voracious Carnivore" + ], + "starting_stats": + [ + { + "range": [ + 1, + 5 + ], + "m": 3, + "p": 11 + }, + { + "range": [ + 6, + 12 + ], + "m": 4, + "p": 14 + }, + { + "range": [ + 13, + 19 + ], + "m": 4, + "p": 17 + }, + { + "range": [ + 20, + 27 + ], + "m": 4, + "p": 19 + }, + { + "range": [ + 28, + 57 + ], + "m": 4, + "p": 20 + }, + { + "range": [ + 58, + 80 + ], + "m": 4, + "p": 19 + }, + { + "range": [ + 81, + 124 + ], + "m": 4, + "p": 18 + }, + { + "range": [ + 125, + 213 + ], + "m": 5, + "p": 17 + }, + { + "range": [ + 214, + 390 + ], + "m": 5, + "p": 16 + }, + { + "range": [ + 391, + 712 + ], + "m": 6, + "p": 15 + } + ] +} diff --git a/src/lib/data.rb b/src/lib/data.rb index c9a07d3..1470d96 100644 --- a/src/lib/data.rb +++ b/src/lib/data.rb @@ -15,6 +15,7 @@ module Charred def initialize @data = {} + @data[:stock_objs] = {} puts 'loading gold' load_gold(@data) @@ -30,7 +31,6 @@ module Charred @data[:traits] = @data[:traits].sort.to_h @data[:skills] = @data[:skills].sort.to_h - @data[:stock_objs] = @data[:stocks].map { |s| Stock.new s } end def verbose_merge(to, from) diff --git a/src/lib/data/troll.rb b/src/lib/data/troll.rb index 86e8f19..3842318 100644 --- a/src/lib/data/troll.rb +++ b/src/lib/data/troll.rb @@ -1,4 +1,5 @@ require 'json' +require_relative '../stock' module Charred module Troll @@ -24,6 +25,10 @@ module Charred file = File.read("data/troll/starting_stat_pts.json") stats = JSON.parse(file) data[:stat_pts]['troll'] = stats + + file = File.read("data/troll/stock.json") + stock = JSON.parse(file) + data[:stock_objs]['troll'] = Stock.new(stock) end end -end \ No newline at end of file +end diff --git a/src/lib/stock.rb b/src/lib/stock.rb index 0086c68..094ffd1 100644 --- a/src/lib/stock.rb +++ b/src/lib/stock.rb @@ -1,6 +1,6 @@ module Charred class Stock - @@default_stride = 6 + @@default_stride = 7 attr :key attr :name @@ -9,14 +9,15 @@ module Charred attr :settings attr :starting_stats - def initialize(key, name = key, stride = @@default_stride) - @key = key - @name = name - @stride = stride - @common_traits = [] - @settings = [] - @starting_stats = [] + def initialize(h) + @key = h["key"] + @name = h["name"] + @stride = h["stride"] || @@default_stride + @common_traits = h["common_traits"] + @settings = h["settings"] + @starting_stats = h["starting_stats"] end + def as_json(options = {}) { "key" => key, -- 2.37.3 From e5d478786e905388400abd70be6302dc9f255bd1 Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Sun, 25 Dec 2022 13:18:40 -0600 Subject: [PATCH 07/45] In js, load stock data from stock_objs --- src/public/js/burning-service.js | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/public/js/burning-service.js b/src/public/js/burning-service.js index b36391f..48301bb 100644 --- a/src/public/js/burning-service.js +++ b/src/public/js/burning-service.js @@ -273,12 +273,12 @@ function BurningDataService($http) { // // TOTAL: 23 // this.totalDataSets = 23; // this.onAllDatasetsLoaded = null; - // this.registerOnAllDatasetsLoaded = function(callback){ - // if ( this.dataSetsLoaded >= this.totalDataSets ){ - // callback(); - // } - // this.onAllDatasetsLoaded = callback; - // } + this.registerOnAllDatasetsLoaded = function(callback){ + if ( this.dataSetsLoaded >= this.totalDataSets ){ + callback(); + } + this.onAllDatasetsLoaded = callback; + } // this.datasetLoaded = function(){ // this.dataSetsLoaded += 1; @@ -290,21 +290,23 @@ function BurningDataService($http) { // } // } + var myself = this; var stocks; $http.get("/stock_objs", {'timeout': 3000}). success(function(data,status,headers,config){ - stocks = data.map(s => s.key); + console.log(data); + stocks = Object.keys(data); for (var i = 0; i < stocks.length; i++) { loadLifepathsForStock(stocks[i]); loadStartingStatPtsForStock(stocks[i]); loadResourcesForStock(stocks[i]); } console.log("Stocks fetched from server: " + stocks) + myself.onAllDatasetsLoaded() }). error(function(data,status,headers,config){ console.log("Error: Getting stocks from server failed: HTTP code " + status + ": " + data); }); - var myself = this; /* Load lifepaths from server */ var loadLifepathsForStock = function(stock){ -- 2.37.3 From 9d3c8b8870db3bf77aafc58e5ed703c458c38029 Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Tue, 27 Dec 2022 19:45:54 -0600 Subject: [PATCH 08/45] Add new style stock files for Gold stocks --- src/data/gold/stocks/dwarf.json | 129 +++++++++++++++++++++++++ src/data/gold/stocks/elf.json | 160 ++++++++++++++++++++++++++++++++ src/data/gold/stocks/man.json | 98 +++++++++++++++++++ src/data/gold/stocks/orc.json | 113 ++++++++++++++++++++++ src/data/gold/stocks/roden.json | 89 ++++++++++++++++++ src/data/gold/stocks/wolf.json | 74 +++++++++++++++ 6 files changed, 663 insertions(+) create mode 100644 src/data/gold/stocks/dwarf.json create mode 100644 src/data/gold/stocks/elf.json create mode 100644 src/data/gold/stocks/man.json create mode 100644 src/data/gold/stocks/orc.json create mode 100644 src/data/gold/stocks/roden.json create mode 100644 src/data/gold/stocks/wolf.json diff --git a/src/data/gold/stocks/dwarf.json b/src/data/gold/stocks/dwarf.json new file mode 100644 index 0000000..9f0a65a --- /dev/null +++ b/src/data/gold/stocks/dwarf.json @@ -0,0 +1,129 @@ +{ + "key": "dwarf", + "name": "Dwarf", + "stride": 6, + "common_traits": [ + "Accustomed To The Dark", + "Bearded", + "Greed", + "Oathsworn", + "Shaped From Earth And Stone", + "Stout", + "Tough" + ], + "starting_stats": + [ + { + "range": [ + 1, + 20 + ], + "m": 6, + "p": 13 + }, + { + "range": [ + 21, + 30 + ], + "m": 7, + "p": 13 + }, + { + "range": [ + 31, + 50 + ], + "m": 7, + "p": 14 + }, + { + "range": [ + 51, + 76 + ], + "m": 8, + "p": 15 + }, + { + "range": [ + 77, + 111 + ], + "m": 8, + "p": 16 + }, + { + "range": [ + 112, + 151 + ], + "m": 9, + "p": 16 + }, + { + "range": [ + 152, + 199 + ], + "m": 9, + "p": 17 + }, + { + "range": [ + 200, + 245 + ], + "m": 10, + "p": 18 + }, + { + "range": [ + 246, + 300 + ], + "m": 11, + "p": 17 + }, + { + "range": [ + 301, + 345 + ], + "m": 11, + "p": 16 + }, + { + "range": [ + 346, + 396 + ], + "m": 12, + "p": 15 + }, + { + "range": [ + 397, + 445 + ], + "m": 11, + "p": 14 + }, + { + "range": [ + 446, + 525 + ], + "m": 11, + "p": 13 + }, + { + "range": [ + 526, + 600 + ], + "m": 10, + "p": 12 + } + ] +} diff --git a/src/data/gold/stocks/elf.json b/src/data/gold/stocks/elf.json new file mode 100644 index 0000000..728a573 --- /dev/null +++ b/src/data/gold/stocks/elf.json @@ -0,0 +1,160 @@ +{ + "key": "elf", + "name": "elf", + "stride": 8, + "common_traits": [ + "Born Under The Silver Stars", + "Essence Of The Earth", + "Fair And Statuesque", + "First Born", + "Grief", + "Keen Sight" + ], + "starting_stats": + [ + { + "range": [ + 1, + 25 + ], + "m": 7, + "p": 13 + }, + { + "range": [ + 26, + 60 + ], + "m": 8, + "p": 13 + }, + { + "range": [ + 61, + 100 + ], + "m": 9, + "p": 14 + }, + { + "range": [ + 101, + 125 + ], + "m": 9, + "p": 15 + }, + { + "range": [ + 126, + 160 + ], + "m": 10, + "p": 16 + }, + { + "range": [ + 161, + 225 + ], + "m": 10, + "p": 17 + }, + { + "range": [ + 226, + 325 + ], + "m": 11, + "p": 17 + }, + { + "range": [ + 326, + 425 + ], + "m": 12, + "p": 17 + }, + { + "range": [ + 426, + 525 + ], + "m": 13, + "p": 18 + }, + { + "range": [ + 526, + 625 + ], + "m": 13, + "p": 19 + }, + { + "range": [ + 626, + 725 + ], + "m": 14, + "p": 19 + }, + { + "range": [ + 726, + 825 + ], + "m": 14, + "p": 20 + }, + { + "range": [ + 826, + 925 + ], + "m": 15, + "p": 20 + }, + { + "range": [ + 926, + 1025 + ], + "m": 15, + "p": 21 + }, + { + "range": [ + 1026, + 1125 + ], + "m": 15, + "p": 22 + }, + { + "range": [ + 1126, + 1225 + ], + "m": 15, + "p": 23 + }, + { + "range": [ + 1226, + 1325 + ], + "m": 15, + "p": 24 + }, + { + "range": [ + 1326, + 9999 + ], + "m": 16, + "p": 24 + } + ] +} diff --git a/src/data/gold/stocks/man.json b/src/data/gold/stocks/man.json new file mode 100644 index 0000000..9bfcf12 --- /dev/null +++ b/src/data/gold/stocks/man.json @@ -0,0 +1,98 @@ +{ + "key": "man", + "name": "man", + "stride": 7, + "common_traits": [ + ], + "starting_stats": + [ + { + "range": [ + 1, + 10 + ], + "m": 5, + "p": 10 + }, + { + "range": [ + 11, + 14 + ], + "m": 6, + "p": 13 + }, + { + "range": [ + 15, + 16 + ], + "m": 6, + "p": 16 + }, + { + "range": [ + 17, + 25 + ], + "m": 7, + "p": 16 + }, + { + "range": [ + 26, + 29 + ], + "m": 7, + "p": 15 + }, + { + "range": [ + 30, + 35 + ], + "m": 7, + "p": 14 + }, + { + "range": [ + 36, + 40 + ], + "m": 7, + "p": 13 + }, + { + "range": [ + 41, + 55 + ], + "m": 7, + "p": 12 + }, + { + "range": [ + 56, + 65 + ], + "m": 7, + "p": 11 + }, + { + "range": [ + 66, + 79 + ], + "m": 7, + "p": 10 + }, + { + "range": [ + 80, + 100 + ], + "m": 6, + "p": 9 + } + ] +} diff --git a/src/data/gold/stocks/orc.json b/src/data/gold/stocks/orc.json new file mode 100644 index 0000000..3f8a9b7 --- /dev/null +++ b/src/data/gold/stocks/orc.json @@ -0,0 +1,113 @@ +{ + "key": "orc", + "name": "orc", + "stride": 7, + "common_traits": [ + "Cannibal", + "Cold Black Blood", + "Breeder", + "Fanged And Clawed", + "Loathsome And Twisted", + "Lynx-eyed, Like Burning Coals", + "Vile Language" + ], + "starting_stats": + [ + { + "range": [ + 1, + 10 + ], + "m": 3, + "p": 10 + }, + { + "range": [ + 11, + 16 + ], + "m": 4, + "p": 11 + }, + { + "range": [ + 17, + 22 + ], + "m": 5, + "p": 12 + }, + { + "range": [ + 23, + 30 + ], + "m": 5, + "p": 13 + }, + { + "range": [ + 31, + 40 + ], + "m": 6, + "p": 14 + }, + { + "range": [ + 41, + 50 + ], + "m": 6, + "p": 15 + }, + { + "range": [ + 51, + 60 + ], + "m": 7, + "p": 16 + }, + { + "range": [ + 61, + 80 + ], + "m": 7, + "p": 17 + }, + { + "range": [ + 81, + 99 + ], + "m": 8, + "p": 17 + }, + { + "range": [ + 100, + 125 + ], + "m": 8, + "p": 18 + }, + { + "range": [ + 126, + 150 + ], + "m": 9, + "p": 18 + }, + { + "range": [ + 151, + 9999 + ], + "m": 9, + "p": 19 + } + ] +} diff --git a/src/data/gold/stocks/roden.json b/src/data/gold/stocks/roden.json new file mode 100644 index 0000000..a5939f1 --- /dev/null +++ b/src/data/gold/stocks/roden.json @@ -0,0 +1,89 @@ +{ + "key": "roden", + "name": "roden", + "stride": 8, + "common_traits": [ + "Aecer's Likeness", + "Coat Of Fur", + "Communal", + "Enlarged Incisors", + "Quick-blooded", + "Tail", + "Large Ears" + ], + "starting_stats": + [ + { + "range": [ + 1, + 5 + ], + "m": 6, + "p": 10 + }, + { + "range": [ + 6, + 9 + ], + "m": 7, + "p": 13 + }, + { + "range": [ + 10, + 15 + ], + "m": 7, + "p": 14 + }, + { + "range": [ + 16, + 24 + ], + "m": 8, + "p": 15 + }, + { + "range": [ + 25, + 30 + ], + "m": 8, + "p": 14 + }, + { + "range": [ + 31, + 36 + ], + "m": 7, + "p": 13 + }, + { + "range": [ + 37, + 40 + ], + "m": 7, + "p": 12 + }, + { + "range": [ + 41, + 45 + ], + "m": 7, + "p": 11 + }, + { + "range": [ + 46, + 49 + ], + "m": 6, + "p": 10 + } + ] +} diff --git a/src/data/gold/stocks/wolf.json b/src/data/gold/stocks/wolf.json new file mode 100644 index 0000000..029ae7a --- /dev/null +++ b/src/data/gold/stocks/wolf.json @@ -0,0 +1,74 @@ +{ + "key": "wolf", + "name": "wolf", + "stride": 11, + "common_traits": [ + "Crushing Jaws", + "Deep Fur", + "Great Lupine Form", + "Lupine Intellect", + "Long-legged", + "Wolf's Eyes", + "Wolf's Snout", + "Woodland Ear" + ], + "starting_stats": + [ + { + "range": [ + 1, + 1.5 + ], + "m": 6, + "p": 12 + }, + { + "range": [ + 2, + 3.5 + ], + "m": 7, + "p": 16 + }, + { + "range": [ + 4, + 5.5 + ], + "m": 7, + "p": 17 + }, + { + "range": [ + 6, + 7.5 + ], + "m": 7, + "p": 16 + }, + { + "range": [ + 8, + 9.5 + ], + "m": 6, + "p": 14 + }, + { + "range": [ + 10, + 11.5 + ], + "m": 6, + "p": 12 + }, + { + "range": [ + 12, + 15.5 + ], + "m": 5, + "p": 10 + } + ] +} -- 2.37.3 From c7a3335becf6cac5cc1a91f427696b8e8b389eaa Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Tue, 27 Dec 2022 20:12:17 -0600 Subject: [PATCH 09/45] Load new-style stock files --- src/lib/data/gold.rb | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/lib/data/gold.rb b/src/lib/data/gold.rb index febeff2..b98f9dd 100644 --- a/src/lib/data/gold.rb +++ b/src/lib/data/gold.rb @@ -1,4 +1,5 @@ require 'json' +require_relative '../stock' module Charred module Gold @@ -12,6 +13,7 @@ module Charred lifepaths = {} resources = {} stat_pts = {} + stock_objs = {} stocks = ['dwarf', 'elf', 'man', 'orc', 'roden', 'wolf'] @@ -24,6 +26,9 @@ module Charred file = File.read("data/gold/starting_stat_pts/#{stock}.json") stat_pts[stock] = JSON.parse(file) + + file = File.read("data/gold/stocks/#{stock}.json") + stock_objs[stock] = Stock.new(JSON.parse(file)) end data.merge!({ @@ -32,8 +37,9 @@ module Charred :traits => traits, :lifepaths => lifepaths, :resources => resources, - :stat_pts => stat_pts + :stat_pts => stat_pts, + :stock_objs => stock_objs }) end end -end \ No newline at end of file +end -- 2.37.3 From 19e2ba9657db338426f6fa3939ff2e58510b928d Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Wed, 28 Dec 2022 00:29:57 -0600 Subject: [PATCH 10/45] Use stride data from stock objects --- src/public/js/burning-service.js | 1 + src/public/js/burning.js | 14 +------------- 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/src/public/js/burning-service.js b/src/public/js/burning-service.js index 48301bb..9b3f013 100644 --- a/src/public/js/burning-service.js +++ b/src/public/js/burning-service.js @@ -295,6 +295,7 @@ function BurningDataService($http) { $http.get("/stock_objs", {'timeout': 3000}). success(function(data,status,headers,config){ console.log(data); + myself.stock_objs = data; stocks = Object.keys(data); for (var i = 0; i < stocks.length; i++) { loadLifepathsForStock(stocks[i]); diff --git a/src/public/js/burning.js b/src/public/js/burning.js index 5de227d..d7dc362 100644 --- a/src/public/js/burning.js +++ b/src/public/js/burning.js @@ -1024,20 +1024,8 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo return {"shade" : "", "exp" : 10 - $scope.statsByName["Will"].exp() + bonus}; } else if ( "Stride" == name ){ - var stride = 0; - if( $scope.stock == 'dwarf' ) - stride = 6; - else if( $scope.stock == 'elf' ) - stride = 8; - else if( $scope.stock == 'roden' ) - stride = 8; - else if( $scope.stock == 'wolf' ) - stride = 11; - else - stride = 7; - + var stride = burningData.stock_objs[$scope.stock].stride; stride += bonus; - return {"shade" : "", "exp" : stride}; } else if ( "Circles" == name ){ -- 2.37.3 From 0d92d0beb2c352e94ddc1845a2c9c99f7b13dc4e Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Wed, 28 Dec 2022 00:38:31 -0600 Subject: [PATCH 11/45] Use common traits from stock object --- src/public/js/burning.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/public/js/burning.js b/src/public/js/burning.js index d7dc362..9ac2a50 100644 --- a/src/public/js/burning.js +++ b/src/public/js/burning.js @@ -2316,7 +2316,7 @@ function setCommonTraits($scope, burningData){ if( $scope.selectedLifepaths.length == 0 ) return; - var common = $scope.selectedLifepaths[0].commonTraits; + var common = burningData.stock_objs[$scope.stock].common_traits; if(common.length > 0){ for(var j = 0; j < common.length; j++){ var name = common[j]; -- 2.37.3 From e7b487f8a32b990adae9ecccac118c284f0d88af Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Thu, 29 Dec 2022 18:42:56 -0600 Subject: [PATCH 12/45] Remove settings from stock object --- src/lib/stock.rb | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/lib/stock.rb b/src/lib/stock.rb index 094ffd1..31ac207 100644 --- a/src/lib/stock.rb +++ b/src/lib/stock.rb @@ -6,15 +6,13 @@ module Charred attr :name attr :stride attr :common_traits - attr :settings attr :starting_stats def initialize(h) @key = h["key"] - @name = h["name"] + @name = h["name"] || @key @stride = h["stride"] || @@default_stride @common_traits = h["common_traits"] - @settings = h["settings"] @starting_stats = h["starting_stats"] end @@ -24,7 +22,6 @@ module Charred "name" => name, "stride" => stride, "common_traits" => common_traits, - "settings" => settings, "starting_stats" => starting_stats } end -- 2.37.3 From 4e7d70c51f369360e098eb20e2093cae752f05e3 Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Thu, 29 Dec 2022 18:50:49 -0600 Subject: [PATCH 13/45] Use starting stat data from stock objects --- src/public/js/burning-service.js | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/src/public/js/burning-service.js b/src/public/js/burning-service.js index 9b3f013..819e677 100644 --- a/src/public/js/burning-service.js +++ b/src/public/js/burning-service.js @@ -334,20 +334,10 @@ function BurningDataService($http) { console.log("Loading starting stat points failed: asked to load pts for invalid stock " + stock); return } - - $http.get("/starting_stat_pts/" + stock, {'timeout': 3000} ). - success(function(data,status,headers,config){ - myself.startingStatPts[stock] = new StartingStatPoints(data); - // myself.datasetLoaded(); - console.log("Loaded "+stock+" starting stat points. "); - }). - error(function(data,status,headers,config){ - // myself.datasetLoaded(); - console.log("Error: Getting "+stock+" stat points from server failed: HTTP code " + status + ": " + data); - }); + myself.startingStatPts[stock] = new StartingStatPoints(myself.stock_objs[stock]); } - /* Load starting stat points table from server */ + /* Load resources from server */ var loadResourcesForStock = function(stock){ if( ! isValidStock(stock) ){ console.log("Loading resources failed: asked to load for invalid stock " + stock); -- 2.37.3 From a6366b0c7b0d84deb78a2d7614637c52cadcefa0 Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Thu, 29 Dec 2022 19:32:32 -0600 Subject: [PATCH 14/45] Remove common traits from lifepaths Have been moved to stock files --- src/data/gold/lifepaths/dwarf.json | 36 ------------------------------ src/data/gold/lifepaths/elf.json | 26 +-------------------- src/data/gold/lifepaths/man.json | 2 +- src/data/gold/lifepaths/orc.json | 20 +---------------- src/data/gold/lifepaths/roden.json | 20 +---------------- src/data/gold/lifepaths/wolf.json | 22 +----------------- src/data/troll/lifepaths.json | 35 +---------------------------- 7 files changed, 6 insertions(+), 155 deletions(-) diff --git a/src/data/gold/lifepaths/dwarf.json b/src/data/gold/lifepaths/dwarf.json index ee6ae57..c8902ba 100644 --- a/src/data/gold/lifepaths/dwarf.json +++ b/src/data/gold/lifepaths/dwarf.json @@ -15,15 +15,6 @@ "traits": [ 1 ], - "common_traits": [ - "Accustomed To The Dark", - "Bearded", - "Greed", - "Oathsworn", - "Shaped From Earth And Stone", - "Stout", - "Tough" - ], "key_leads": [ "Guilder Setting" ] @@ -353,15 +344,6 @@ "traits": [ 1 ], - "common_traits": [ - "Accustomed To The Dark", - "Bearded", - "Greed", - "Oathsworn", - "Shaped From Earth And Stone", - "Stout", - "Tough" - ], "key_leads": [ "Clansman Setting" ] @@ -663,15 +645,6 @@ "traits": [ 1 ], - "common_traits": [ - "Accustomed To The Dark", - "Bearded", - "Greed", - "Oathsworn", - "Shaped From Earth And Stone", - "Stout", - "Tough" - ], "key_leads": [ "Clansman Setting" ] @@ -953,15 +926,6 @@ 2, "Dvergar" ], - "common_traits": [ - "Accustomed To The Dark", - "Bearded", - "Greed", - "Oathsworn", - "Shaped From Earth And Stone", - "Stout", - "Tough" - ], "key_leads": [ "Guilder Setting", "Artificer Setting" diff --git a/src/data/gold/lifepaths/elf.json b/src/data/gold/lifepaths/elf.json index b9224e2..c13f766 100644 --- a/src/data/gold/lifepaths/elf.json +++ b/src/data/gold/lifepaths/elf.json @@ -20,14 +20,6 @@ "traits": [ 1 ], - "common_traits": [ - "Born Under The Silver Stars", - "Essence Of The Earth", - "Fair And Statuesque", - "First Born", - "Grief", - "Keen Sight" - ], "key_leads": [ "Citadel Setting" ] @@ -517,14 +509,6 @@ "traits": [ 1 ], - "common_traits": [ - "Born Under The Silver Stars", - "Essence Of The Earth", - "Fair And Statuesque", - "First Born", - "Grief", - "Keen Sight" - ], "key_leads": [ "Wilderlands Setting" ] @@ -1189,14 +1173,6 @@ "Fea", "Aman" ], - "common_traits": [ - "Born Under The Silver Stars", - "Essence Of The Earth", - "Fair And Statuesque", - "First Born", - "Grief", - "Keen Sight" - ], "key_leads": [ "Wilderlands Setting", "Citadel Setting" @@ -2045,4 +2021,4 @@ ] } } -} \ No newline at end of file +} diff --git a/src/data/gold/lifepaths/man.json b/src/data/gold/lifepaths/man.json index 8e3a133..2969a1f 100644 --- a/src/data/gold/lifepaths/man.json +++ b/src/data/gold/lifepaths/man.json @@ -11811,4 +11811,4 @@ ] } } -} \ No newline at end of file +} diff --git a/src/data/gold/lifepaths/orc.json b/src/data/gold/lifepaths/orc.json index 6e94420..06198d8 100644 --- a/src/data/gold/lifepaths/orc.json +++ b/src/data/gold/lifepaths/orc.json @@ -22,15 +22,6 @@ "traits": [ 1 ], - "common_traits": [ - "Cannibal", - "Cold Black Blood", - "Breeder", - "Fanged And Clawed", - "Loathsome And Twisted", - "Lynx-eyed, Like Burning Coals", - "Vile Language" - ], "key_leads": [ "Black Legion Subsetting", "Servant Of The Dark Blood Subsetting" @@ -432,15 +423,6 @@ "Born To Rule Them All", "Enemy Of The Sun" ], - "common_traits": [ - "Cannibal", - "Cold Black Blood", - "Breeder", - "Fanged And Clawed", - "Loathsome And Twisted", - "Lynx-eyed, Like Burning Coals", - "Vile Language" - ], "key_leads": [ "Servant Of The Dark Blood Subsetting" ] @@ -1592,4 +1574,4 @@ ] } } -} \ No newline at end of file +} diff --git a/src/data/gold/lifepaths/roden.json b/src/data/gold/lifepaths/roden.json index 6cf3b47..bc69f7d 100644 --- a/src/data/gold/lifepaths/roden.json +++ b/src/data/gold/lifepaths/roden.json @@ -16,15 +16,6 @@ 3, "Vegetarian" ], - "common_traits": [ - "Aecer's Likeness", - "Coat Of Fur", - "Communal", - "Enlarged Incisors", - "Quick-blooded", - "Tail", - "Large Ears" - ], "key_leads": [ "Society Subsetting" ] @@ -572,15 +563,6 @@ 3, "Tunnel Vision" ], - "common_traits": [ - "Aecer's Likeness", - "Coat Of Fur", - "Communal", - "Enlarged Incisors", - "Quick-blooded", - "Tail", - "Large Ears" - ], "key_leads": [ "Society Subsetting" ] @@ -1737,4 +1719,4 @@ ] } } -} \ No newline at end of file +} diff --git a/src/data/gold/lifepaths/wolf.json b/src/data/gold/lifepaths/wolf.json index f4f93e9..c98a64b 100644 --- a/src/data/gold/lifepaths/wolf.json +++ b/src/data/gold/lifepaths/wolf.json @@ -19,16 +19,6 @@ "traits": [ 2 ], - "common_traits": [ - "Crushing Jaws", - "Deep Fur", - "Great Lupine Form", - "Lupine Intellect", - "Long-legged", - "Wolf's Eyes", - "Wolf's Snout", - "Woodland Ear" - ], "key_leads": [ "Captive Subsetting" ] @@ -335,16 +325,6 @@ "Vile Language", "Demented" ], - "common_traits": [ - "Crushing Jaws", - "Deep Fur", - "Great Lupine Form", - "Lupine Intellect", - "Long-legged", - "Wolf's Eyes", - "Wolf's Snout", - "Woodland Ear" - ], "key_leads": [ "Captive Subsetting" ] @@ -968,4 +948,4 @@ ] } } -} \ No newline at end of file +} diff --git a/src/data/troll/lifepaths.json b/src/data/troll/lifepaths.json index 403a4d7..04adca4 100644 --- a/src/data/troll/lifepaths.json +++ b/src/data/troll/lifepaths.json @@ -12,17 +12,6 @@ "traits": [ 1 ], - "common_traits": [ - "Black Nails", - "Fangs", - "Night Blooded", - "Night Eyed (Troll)", - "Massive Stature (Troll)", - "Stone's Age", - "Tough (Troll)", - "Troll Skin", - "Voracious Carnivore" - ], "leads": [ "Pit" ], @@ -253,17 +242,6 @@ "traits": [ 2 ], - "common_traits": [ - "Black Nails", - "Fangs", - "Night Blooded", - "Night Eyed (Troll)", - "Massive Stature (Troll)", - "Stone's Age", - "Tough (Troll)", - "Troll Skin", - "Voracious Carnivore" - ], "leads": [ "Pit" ], @@ -397,17 +375,6 @@ 2, "Vile Language" ], - "common_traits": [ - "Black Nails", - "Fangs", - "Night Blooded", - "Night Eyed (Troll)", - "Massive Stature (Troll)", - "Stone's Age", - "Tough (Troll)", - "Troll Skin", - "Voracious Carnivore" - ], "leads": [ "Pit", "Cave" @@ -614,4 +581,4 @@ ] } } -} \ No newline at end of file +} -- 2.37.3 From e3077d604897e3343f0c5603ef4c3ca873e1071b Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Thu, 29 Dec 2022 19:38:19 -0600 Subject: [PATCH 15/45] Delete starting stats files Have been moved into the stock files --- src/data/gold/starting_stat_pts/dwarf.json | 114 ---------------- src/data/gold/starting_stat_pts/elf.json | 146 --------------------- src/data/gold/starting_stat_pts/man.json | 90 ------------- src/data/gold/starting_stat_pts/orc.json | 98 -------------- src/data/gold/starting_stat_pts/roden.json | 74 ----------- src/data/gold/starting_stat_pts/wolf.json | 58 -------- src/data/troll/starting_stat_pts.json | 82 ------------ 7 files changed, 662 deletions(-) delete mode 100644 src/data/gold/starting_stat_pts/dwarf.json delete mode 100644 src/data/gold/starting_stat_pts/elf.json delete mode 100644 src/data/gold/starting_stat_pts/man.json delete mode 100644 src/data/gold/starting_stat_pts/orc.json delete mode 100644 src/data/gold/starting_stat_pts/roden.json delete mode 100644 src/data/gold/starting_stat_pts/wolf.json delete mode 100644 src/data/troll/starting_stat_pts.json diff --git a/src/data/gold/starting_stat_pts/dwarf.json b/src/data/gold/starting_stat_pts/dwarf.json deleted file mode 100644 index a43513e..0000000 --- a/src/data/gold/starting_stat_pts/dwarf.json +++ /dev/null @@ -1,114 +0,0 @@ -[ - { - "range": [ - 1, - 20 - ], - "m": 6, - "p": 13 - }, - { - "range": [ - 21, - 30 - ], - "m": 7, - "p": 13 - }, - { - "range": [ - 31, - 50 - ], - "m": 7, - "p": 14 - }, - { - "range": [ - 51, - 76 - ], - "m": 8, - "p": 15 - }, - { - "range": [ - 77, - 111 - ], - "m": 8, - "p": 16 - }, - { - "range": [ - 112, - 151 - ], - "m": 9, - "p": 16 - }, - { - "range": [ - 152, - 199 - ], - "m": 9, - "p": 17 - }, - { - "range": [ - 200, - 245 - ], - "m": 10, - "p": 18 - }, - { - "range": [ - 246, - 300 - ], - "m": 11, - "p": 17 - }, - { - "range": [ - 301, - 345 - ], - "m": 11, - "p": 16 - }, - { - "range": [ - 346, - 396 - ], - "m": 12, - "p": 15 - }, - { - "range": [ - 397, - 445 - ], - "m": 11, - "p": 14 - }, - { - "range": [ - 446, - 525 - ], - "m": 11, - "p": 13 - }, - { - "range": [ - 526, - 600 - ], - "m": 10, - "p": 12 - } -] \ No newline at end of file diff --git a/src/data/gold/starting_stat_pts/elf.json b/src/data/gold/starting_stat_pts/elf.json deleted file mode 100644 index ce2e4a8..0000000 --- a/src/data/gold/starting_stat_pts/elf.json +++ /dev/null @@ -1,146 +0,0 @@ -[ - { - "range": [ - 1, - 25 - ], - "m": 7, - "p": 13 - }, - { - "range": [ - 26, - 60 - ], - "m": 8, - "p": 13 - }, - { - "range": [ - 61, - 100 - ], - "m": 9, - "p": 14 - }, - { - "range": [ - 101, - 125 - ], - "m": 9, - "p": 15 - }, - { - "range": [ - 126, - 160 - ], - "m": 10, - "p": 16 - }, - { - "range": [ - 161, - 225 - ], - "m": 10, - "p": 17 - }, - { - "range": [ - 226, - 325 - ], - "m": 11, - "p": 17 - }, - { - "range": [ - 326, - 425 - ], - "m": 12, - "p": 17 - }, - { - "range": [ - 426, - 525 - ], - "m": 13, - "p": 18 - }, - { - "range": [ - 526, - 625 - ], - "m": 13, - "p": 19 - }, - { - "range": [ - 626, - 725 - ], - "m": 14, - "p": 19 - }, - { - "range": [ - 726, - 825 - ], - "m": 14, - "p": 20 - }, - { - "range": [ - 826, - 925 - ], - "m": 15, - "p": 20 - }, - { - "range": [ - 926, - 1025 - ], - "m": 15, - "p": 21 - }, - { - "range": [ - 1026, - 1125 - ], - "m": 15, - "p": 22 - }, - { - "range": [ - 1126, - 1225 - ], - "m": 15, - "p": 23 - }, - { - "range": [ - 1226, - 1325 - ], - "m": 15, - "p": 24 - }, - { - "range": [ - 1326, - 9999 - ], - "m": 16, - "p": 24 - } -] \ No newline at end of file diff --git a/src/data/gold/starting_stat_pts/man.json b/src/data/gold/starting_stat_pts/man.json deleted file mode 100644 index 75d7ec6..0000000 --- a/src/data/gold/starting_stat_pts/man.json +++ /dev/null @@ -1,90 +0,0 @@ -[ - { - "range": [ - 1, - 10 - ], - "m": 5, - "p": 10 - }, - { - "range": [ - 11, - 14 - ], - "m": 6, - "p": 13 - }, - { - "range": [ - 15, - 16 - ], - "m": 6, - "p": 16 - }, - { - "range": [ - 17, - 25 - ], - "m": 7, - "p": 16 - }, - { - "range": [ - 26, - 29 - ], - "m": 7, - "p": 15 - }, - { - "range": [ - 30, - 35 - ], - "m": 7, - "p": 14 - }, - { - "range": [ - 36, - 40 - ], - "m": 7, - "p": 13 - }, - { - "range": [ - 41, - 55 - ], - "m": 7, - "p": 12 - }, - { - "range": [ - 56, - 65 - ], - "m": 7, - "p": 11 - }, - { - "range": [ - 66, - 79 - ], - "m": 7, - "p": 10 - }, - { - "range": [ - 80, - 100 - ], - "m": 6, - "p": 9 - } -] \ No newline at end of file diff --git a/src/data/gold/starting_stat_pts/orc.json b/src/data/gold/starting_stat_pts/orc.json deleted file mode 100644 index fb717dd..0000000 --- a/src/data/gold/starting_stat_pts/orc.json +++ /dev/null @@ -1,98 +0,0 @@ -[ - { - "range": [ - 1, - 10 - ], - "m": 3, - "p": 10 - }, - { - "range": [ - 11, - 16 - ], - "m": 4, - "p": 11 - }, - { - "range": [ - 17, - 22 - ], - "m": 5, - "p": 12 - }, - { - "range": [ - 23, - 30 - ], - "m": 5, - "p": 13 - }, - { - "range": [ - 31, - 40 - ], - "m": 6, - "p": 14 - }, - { - "range": [ - 41, - 50 - ], - "m": 6, - "p": 15 - }, - { - "range": [ - 51, - 60 - ], - "m": 7, - "p": 16 - }, - { - "range": [ - 61, - 80 - ], - "m": 7, - "p": 17 - }, - { - "range": [ - 81, - 99 - ], - "m": 8, - "p": 17 - }, - { - "range": [ - 100, - 125 - ], - "m": 8, - "p": 18 - }, - { - "range": [ - 126, - 150 - ], - "m": 9, - "p": 18 - }, - { - "range": [ - 151, - 9999 - ], - "m": 9, - "p": 19 - } -] \ No newline at end of file diff --git a/src/data/gold/starting_stat_pts/roden.json b/src/data/gold/starting_stat_pts/roden.json deleted file mode 100644 index 0f740b2..0000000 --- a/src/data/gold/starting_stat_pts/roden.json +++ /dev/null @@ -1,74 +0,0 @@ -[ - { - "range": [ - 1, - 5 - ], - "m": 6, - "p": 10 - }, - { - "range": [ - 6, - 9 - ], - "m": 7, - "p": 13 - }, - { - "range": [ - 10, - 15 - ], - "m": 7, - "p": 14 - }, - { - "range": [ - 16, - 24 - ], - "m": 8, - "p": 15 - }, - { - "range": [ - 25, - 30 - ], - "m": 8, - "p": 14 - }, - { - "range": [ - 31, - 36 - ], - "m": 7, - "p": 13 - }, - { - "range": [ - 37, - 40 - ], - "m": 7, - "p": 12 - }, - { - "range": [ - 41, - 45 - ], - "m": 7, - "p": 11 - }, - { - "range": [ - 46, - 49 - ], - "m": 6, - "p": 10 - } -] \ No newline at end of file diff --git a/src/data/gold/starting_stat_pts/wolf.json b/src/data/gold/starting_stat_pts/wolf.json deleted file mode 100644 index 3fd3ce7..0000000 --- a/src/data/gold/starting_stat_pts/wolf.json +++ /dev/null @@ -1,58 +0,0 @@ -[ - { - "range": [ - 1, - 1.5 - ], - "m": 6, - "p": 12 - }, - { - "range": [ - 2, - 3.5 - ], - "m": 7, - "p": 16 - }, - { - "range": [ - 4, - 5.5 - ], - "m": 7, - "p": 17 - }, - { - "range": [ - 6, - 7.5 - ], - "m": 7, - "p": 16 - }, - { - "range": [ - 8, - 9.5 - ], - "m": 6, - "p": 14 - }, - { - "range": [ - 10, - 11.5 - ], - "m": 6, - "p": 12 - }, - { - "range": [ - 12, - 15.5 - ], - "m": 5, - "p": 10 - } -] \ No newline at end of file diff --git a/src/data/troll/starting_stat_pts.json b/src/data/troll/starting_stat_pts.json deleted file mode 100644 index 6476edc..0000000 --- a/src/data/troll/starting_stat_pts.json +++ /dev/null @@ -1,82 +0,0 @@ -[ - { - "range": [ - 1, - 5 - ], - "m": 3, - "p": 11 - }, - { - "range": [ - 6, - 12 - ], - "m": 4, - "p": 14 - }, - { - "range": [ - 13, - 19 - ], - "m": 4, - "p": 17 - }, - { - "range": [ - 20, - 27 - ], - "m": 4, - "p": 19 - }, - { - "range": [ - 28, - 57 - ], - "m": 4, - "p": 20 - }, - { - "range": [ - 58, - 80 - ], - "m": 4, - "p": 19 - }, - { - "range": [ - 81, - 124 - ], - "m": 4, - "p": 18 - }, - { - "range": [ - 125, - 213 - ], - "m": 5, - "p": 17 - }, - { - "range": [ - 214, - 390 - ], - "m": 5, - "p": 16 - }, - { - "range": [ - 391, - 712 - ], - "m": 6, - "p": 15 - } -] \ No newline at end of file -- 2.37.3 From e1b52b08f518cfdd899b33654967260dedb7e26f Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Thu, 29 Dec 2022 19:51:35 -0600 Subject: [PATCH 16/45] Fixed some code referencing starting starts --- src/lib/data/gold.rb | 3 --- src/lib/data/troll.rb | 4 ---- src/public/js/burning-service.js | 2 +- 3 files changed, 1 insertion(+), 8 deletions(-) diff --git a/src/lib/data/gold.rb b/src/lib/data/gold.rb index b98f9dd..ff7ec28 100644 --- a/src/lib/data/gold.rb +++ b/src/lib/data/gold.rb @@ -24,9 +24,6 @@ module Charred file = File.read("data/gold/resources/#{stock}.json") resources[stock] = JSON.parse(file) - file = File.read("data/gold/starting_stat_pts/#{stock}.json") - stat_pts[stock] = JSON.parse(file) - file = File.read("data/gold/stocks/#{stock}.json") stock_objs[stock] = Stock.new(JSON.parse(file)) end diff --git a/src/lib/data/troll.rb b/src/lib/data/troll.rb index 3842318..a98c72d 100644 --- a/src/lib/data/troll.rb +++ b/src/lib/data/troll.rb @@ -22,10 +22,6 @@ module Charred resources = JSON.parse(file) data[:resources]['troll'] = resources - file = File.read("data/troll/starting_stat_pts.json") - stats = JSON.parse(file) - data[:stat_pts]['troll'] = stats - file = File.read("data/troll/stock.json") stock = JSON.parse(file) data[:stock_objs]['troll'] = Stock.new(stock) diff --git a/src/public/js/burning-service.js b/src/public/js/burning-service.js index 819e677..ba306b6 100644 --- a/src/public/js/burning-service.js +++ b/src/public/js/burning-service.js @@ -334,7 +334,7 @@ function BurningDataService($http) { console.log("Loading starting stat points failed: asked to load pts for invalid stock " + stock); return } - myself.startingStatPts[stock] = new StartingStatPoints(myself.stock_objs[stock]); + myself.startingStatPts[stock] = new StartingStatPoints(myself.stock_objs[stock].starting_stats); } /* Load resources from server */ -- 2.37.3 From 897b9ca58c5ef8c3f9007494270768f40a39b1b9 Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Thu, 29 Dec 2022 20:00:09 -0600 Subject: [PATCH 17/45] Remove now-redundant stocks key in the data object --- src/app.rb | 6 +++--- src/lib/data/gold.rb | 1 - src/lib/data/troll.rb | 2 -- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/app.rb b/src/app.rb index 69be77b..290c391 100644 --- a/src/app.rb +++ b/src/app.rb @@ -54,7 +54,7 @@ get '/stock_objs' do end get '/lifepaths/:stock' do - if DATA[:stocks].include? params['stock'] + if DATA[:stock_objs].keys.include? params['stock'] json DATA[:lifepaths][params['stock']] else 404 @@ -62,7 +62,7 @@ get '/lifepaths/:stock' do end get '/starting_stat_pts/:stock' do - if DATA[:stocks].include? params['stock'] + if DATA[:stock_objs].keys.include? params['stock'] json DATA[:stat_pts][params['stock']] else 404 @@ -70,7 +70,7 @@ get '/starting_stat_pts/:stock' do end get '/resources/:stock' do - if DATA[:stocks].include? params['stock'] + if DATA[:stock_objs].keys.include? params['stock'] json DATA[:resources][params['stock']] else 404 diff --git a/src/lib/data/gold.rb b/src/lib/data/gold.rb index ff7ec28..6f991a0 100644 --- a/src/lib/data/gold.rb +++ b/src/lib/data/gold.rb @@ -29,7 +29,6 @@ module Charred end data.merge!({ - :stocks => stocks, :skills => skills, :traits => traits, :lifepaths => lifepaths, diff --git a/src/lib/data/troll.rb b/src/lib/data/troll.rb index a98c72d..bec97d1 100644 --- a/src/lib/data/troll.rb +++ b/src/lib/data/troll.rb @@ -4,8 +4,6 @@ require_relative '../stock' module Charred module Troll def load_troll(data) - data[:stocks] << 'troll' - file = File.read('data/troll/skills.json') skills = JSON.parse(file) verbose_merge data[:skills], skills -- 2.37.3 From 302f758bf0a73cb7a1dae1cbc67984abce9882f6 Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Thu, 29 Dec 2022 20:21:07 -0600 Subject: [PATCH 18/45] Replace references to stock_objs with just stocks The stock object is now the universal interface to stock metadata. --- src/app.rb | 10 +++++----- src/lib/data.rb | 2 +- src/lib/data/gold.rb | 10 +++++----- src/lib/data/troll.rb | 2 +- src/public/js/burning-service.js | 6 +++--- src/public/js/burning.js | 4 ++-- 6 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/app.rb b/src/app.rb index 290c391..c4cc8ff 100644 --- a/src/app.rb +++ b/src/app.rb @@ -49,12 +49,12 @@ get '/traits' do json DATA[:traits] end -get '/stock_objs' do - json DATA[:stock_objs] +get '/stocks' do + json DATA[:stocks] end get '/lifepaths/:stock' do - if DATA[:stock_objs].keys.include? params['stock'] + if DATA[:stocks].keys.include? params['stock'] json DATA[:lifepaths][params['stock']] else 404 @@ -62,7 +62,7 @@ get '/lifepaths/:stock' do end get '/starting_stat_pts/:stock' do - if DATA[:stock_objs].keys.include? params['stock'] + if DATA[:stocks].keys.include? params['stock'] json DATA[:stat_pts][params['stock']] else 404 @@ -70,7 +70,7 @@ get '/starting_stat_pts/:stock' do end get '/resources/:stock' do - if DATA[:stock_objs].keys.include? params['stock'] + if DATA[:stocks].keys.include? params['stock'] json DATA[:resources][params['stock']] else 404 diff --git a/src/lib/data.rb b/src/lib/data.rb index 1470d96..b672f46 100644 --- a/src/lib/data.rb +++ b/src/lib/data.rb @@ -15,7 +15,7 @@ module Charred def initialize @data = {} - @data[:stock_objs] = {} + @data[:stocks] = {} puts 'loading gold' load_gold(@data) diff --git a/src/lib/data/gold.rb b/src/lib/data/gold.rb index 6f991a0..557c548 100644 --- a/src/lib/data/gold.rb +++ b/src/lib/data/gold.rb @@ -13,11 +13,11 @@ module Charred lifepaths = {} resources = {} stat_pts = {} - stock_objs = {} + stocks = {} - stocks = ['dwarf', 'elf', 'man', 'orc', 'roden', 'wolf'] + gold_stocks = ['dwarf', 'elf', 'man', 'orc', 'roden', 'wolf'] - stocks.each do |stock| + gold_stocks.each do |stock| file = File.read("data/gold/lifepaths/#{stock}.json") lifepaths[stock] = JSON.parse(file) @@ -25,7 +25,7 @@ module Charred resources[stock] = JSON.parse(file) file = File.read("data/gold/stocks/#{stock}.json") - stock_objs[stock] = Stock.new(JSON.parse(file)) + stocks[stock] = Stock.new(JSON.parse(file)) end data.merge!({ @@ -34,7 +34,7 @@ module Charred :lifepaths => lifepaths, :resources => resources, :stat_pts => stat_pts, - :stock_objs => stock_objs + :stocks => stocks }) end end diff --git a/src/lib/data/troll.rb b/src/lib/data/troll.rb index bec97d1..1f9b834 100644 --- a/src/lib/data/troll.rb +++ b/src/lib/data/troll.rb @@ -22,7 +22,7 @@ module Charred file = File.read("data/troll/stock.json") stock = JSON.parse(file) - data[:stock_objs]['troll'] = Stock.new(stock) + data[:stocks]['troll'] = Stock.new(stock) end end end diff --git a/src/public/js/burning-service.js b/src/public/js/burning-service.js index ba306b6..7227394 100644 --- a/src/public/js/burning-service.js +++ b/src/public/js/burning-service.js @@ -292,10 +292,10 @@ function BurningDataService($http) { var myself = this; var stocks; - $http.get("/stock_objs", {'timeout': 3000}). + $http.get("/stocks", {'timeout': 3000}). success(function(data,status,headers,config){ console.log(data); - myself.stock_objs = data; + myself.stocks = data; stocks = Object.keys(data); for (var i = 0; i < stocks.length; i++) { loadLifepathsForStock(stocks[i]); @@ -334,7 +334,7 @@ function BurningDataService($http) { console.log("Loading starting stat points failed: asked to load pts for invalid stock " + stock); return } - myself.startingStatPts[stock] = new StartingStatPoints(myself.stock_objs[stock].starting_stats); + myself.startingStatPts[stock] = new StartingStatPoints(myself.stocks[stock].starting_stats); } /* Load resources from server */ diff --git a/src/public/js/burning.js b/src/public/js/burning.js index 9ac2a50..d59402c 100644 --- a/src/public/js/burning.js +++ b/src/public/js/burning.js @@ -1024,7 +1024,7 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo return {"shade" : "", "exp" : 10 - $scope.statsByName["Will"].exp() + bonus}; } else if ( "Stride" == name ){ - var stride = burningData.stock_objs[$scope.stock].stride; + var stride = burningData.stocks[$scope.stock].stride; stride += bonus; return {"shade" : "", "exp" : stride}; } @@ -2316,7 +2316,7 @@ function setCommonTraits($scope, burningData){ if( $scope.selectedLifepaths.length == 0 ) return; - var common = burningData.stock_objs[$scope.stock].common_traits; + var common = burningData.stocks[$scope.stock].common_traits; if(common.length > 0){ for(var j = 0; j < common.length; j++){ var name = common[j]; -- 2.37.3 From fc9edd2b48d4cfc6971e381e374f4f012fc1e5c8 Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Sun, 8 Jan 2023 17:22:47 -0600 Subject: [PATCH 19/45] On demand data loading --- src/app.rb | 8 -- src/data/gold/stocks/elf.json | 2 +- src/data/gold/stocks/man.json | 2 +- src/data/gold/stocks/orc.json | 2 +- src/data/gold/stocks/roden.json | 2 +- src/data/gold/stocks/wolf.json | 2 +- src/public/js/burning-service.js | 146 +++++++++++++++++++------------ src/public/js/burning.js | 48 ++++++---- src/views/partials/main.erb | 9 +- 9 files changed, 128 insertions(+), 93 deletions(-) diff --git a/src/app.rb b/src/app.rb index c4cc8ff..7748071 100644 --- a/src/app.rb +++ b/src/app.rb @@ -61,14 +61,6 @@ get '/lifepaths/:stock' do end end -get '/starting_stat_pts/:stock' do - if DATA[:stocks].keys.include? params['stock'] - json DATA[:stat_pts][params['stock']] - else - 404 - end -end - get '/resources/:stock' do if DATA[:stocks].keys.include? params['stock'] json DATA[:resources][params['stock']] diff --git a/src/data/gold/stocks/elf.json b/src/data/gold/stocks/elf.json index 728a573..48a6c7d 100644 --- a/src/data/gold/stocks/elf.json +++ b/src/data/gold/stocks/elf.json @@ -1,6 +1,6 @@ { "key": "elf", - "name": "elf", + "name": "Elf", "stride": 8, "common_traits": [ "Born Under The Silver Stars", diff --git a/src/data/gold/stocks/man.json b/src/data/gold/stocks/man.json index 9bfcf12..7e452c7 100644 --- a/src/data/gold/stocks/man.json +++ b/src/data/gold/stocks/man.json @@ -1,6 +1,6 @@ { "key": "man", - "name": "man", + "name": "Man", "stride": 7, "common_traits": [ ], diff --git a/src/data/gold/stocks/orc.json b/src/data/gold/stocks/orc.json index 3f8a9b7..36daaca 100644 --- a/src/data/gold/stocks/orc.json +++ b/src/data/gold/stocks/orc.json @@ -1,6 +1,6 @@ { "key": "orc", - "name": "orc", + "name": "Orc", "stride": 7, "common_traits": [ "Cannibal", diff --git a/src/data/gold/stocks/roden.json b/src/data/gold/stocks/roden.json index a5939f1..1914eda 100644 --- a/src/data/gold/stocks/roden.json +++ b/src/data/gold/stocks/roden.json @@ -1,6 +1,6 @@ { "key": "roden", - "name": "roden", + "name": "Roden", "stride": 8, "common_traits": [ "Aecer's Likeness", diff --git a/src/data/gold/stocks/wolf.json b/src/data/gold/stocks/wolf.json index 029ae7a..c717798 100644 --- a/src/data/gold/stocks/wolf.json +++ b/src/data/gold/stocks/wolf.json @@ -1,6 +1,6 @@ { "key": "wolf", - "name": "wolf", + "name": "Wolf", "stride": 11, "common_traits": [ "Crushing Jaws", diff --git a/src/public/js/burning-service.js b/src/public/js/burning-service.js index 7227394..066f0ed 100644 --- a/src/public/js/burning-service.js +++ b/src/public/js/burning-service.js @@ -9,7 +9,7 @@ function Settings() { /**** Class AppropriateWeaponsService (Angular Service) ****/ function AppropriateWeaponsService($modal, $http) { - // This class will store a hash which maps lifepath names to a list of + // This class will store a hash which maps lifepath names to a list of // weapons that are appropriate for that lifepath. this.appropriateWeapons = {}; @@ -167,7 +167,7 @@ function WeaponOfChoiceService($modal, $http) { } return has; } - + this.selectWeaponOfChoice = function (displayLp, onSelect){ if( this.hasWeaponOfChoice(displayLp) ){ this.selectWeaponOfChoiceByModal(displayLp.name, function(selected){ @@ -250,67 +250,107 @@ function BurningDataService($http) { roots: [root1, root2, ...] skill_name: roots: [root1, root2, ...] - + */ this.skills = {}; /* JSON data structure representing all available traits */ this.traits = {}; - + /* JSON data structure representing all available resources (gear/property) */ this.resources = {}; // A hash of StartingStatPoints objects keyed by stock. this.startingStatPts = {}; - // this.dataSetsLoaded = 0; - // // Total data sets: - // // lifepaths: 7 (man, dwarf, elf, orc, roden, wolf, troll) - // // stat points: 7 (man, dwarf, elf, orc, roden, wolf, troll) - // // skills - // // traits - // // resources: 7 (man, dwarf, elf, orc, roden, wolf. troll) - // // TOTAL: 23 - // this.totalDataSets = 23; - // this.onAllDatasetsLoaded = null; - this.registerOnAllDatasetsLoaded = function(callback){ - if ( this.dataSetsLoaded >= this.totalDataSets ){ + this.events = { + stocksLoaded: { triggered : false, callbacks : [] }, + traitsLoaded: { triggered : false, callbacks : [] }, + skillsLoaded: { triggered : false, callbacks : [] }, + } + + this.registerEvent = function(eventName, callback){ + if(this.events[eventName].triggered) + callback(); + this.events[eventName].callbacks.push(callback); + } + this.triggerEvent = function(eventName) { + myself.events[eventName].triggered = true; + for(var callback of myself.events[eventName].callbacks) { callback(); } - this.onAllDatasetsLoaded = callback; } - // this.datasetLoaded = function(){ - // this.dataSetsLoaded += 1; - // if ( this.onAllDatasetsLoaded && (this.dataSetsLoaded >= this.totalDataSets) ){ - // this.onAllDatasetsLoaded(); - // } - // if ( this.dataSetsLoaded > this.totalDataSets){ - // console.log("Error: the totalDataSets setting in BurningDataService is too low! This will cause wierd errors. Please adjust it"); - // } - // } + this.stockEvents = {}; + this.defineStockEvent = function(stockName, eventName) { + if(!(stockName in myself.stockEvents)) myself.stockEvents[stockName] = {}; + myself.stockEvents[stockName][eventName] = { triggered : false, callbacks : [] } ; + } + this.registerStockEvent = function(stockName, eventName, callback){ + if(myself.stockEvents[stockName][eventName].triggered) + callback(); + myself.stockEvents[stockName][eventName].callbacks.push(callback); + } + this.triggerStockEvent = function(stockName, eventName) { + myself.stockEvents[stockName][eventName].triggered = true; + for(var callback of myself.stockEvents[stockName][eventName].callbacks) { + callback(); + } + } + + var myself = this; var stocks; + + // Log events + this.registerEvent("stocksLoaded", function() { + console.log("Stocks fetched from server: ", Object.keys(myself.stocks)) + // DEBUG: + // console.log("Stocks fetched from server: ", myself.stocks) + }); + this.registerEvent("skillsLoaded", function() { + console.log("Loaded " + Object.keys(myself.skills).length + " skills."); + // DEBUG: + // console.log("Loaded skills: ", myself.skills); + }); + this.registerEvent("traitsLoaded", function() { + console.log("Loaded " + Object.keys(myself.traits).length + " traits."); + // DEBUG: + // console.log("Loaded traits: ", myself.traits); + }); + $http.get("/stocks", {'timeout': 3000}). success(function(data,status,headers,config){ - console.log(data); + // DEBUG: + // console.log(data); myself.stocks = data; stocks = Object.keys(data); - for (var i = 0; i < stocks.length; i++) { - loadLifepathsForStock(stocks[i]); - loadStartingStatPtsForStock(stocks[i]); - loadResourcesForStock(stocks[i]); + for (var stock of stocks) { + myself.startingStatPts[stock] = new StartingStatPoints(myself.stocks[stock].starting_stats); + myself.defineStockEvent(stock, "lifepathsLoaded"); + myself.defineStockEvent(stock, "resourcesLoaded"); + + // Log events + myself.registerStockEvent(stock, "lifepathsLoaded", function () { + // console.log("Loaded " + Object.keys(myself.lifepaths[stock]).length + " lifepaths for " + stock + "."); + // DEBUG: + console.log("Loaded " + stock, myself.lifepaths[stock]); + }); + myself.registerStockEvent(stock, "resourcesLoaded", function () { + // console.log("Loaded " + Object.keys(myself.resources[stock]).length + " resources for " + stock + "."); + // DEBUG: + console.log("Loaded " + stock, myself.resources[stock]); + }); } - console.log("Stocks fetched from server: " + stocks) - myself.onAllDatasetsLoaded() + myself.triggerEvent("stocksLoaded"); }). error(function(data,status,headers,config){ console.log("Error: Getting stocks from server failed: HTTP code " + status + ": " + data); }); /* Load lifepaths from server */ - var loadLifepathsForStock = function(stock){ + this.loadLifepathsForStock = function(stock){ if( ! isValidStock(stock) ){ console.log("Loading lifepaths failed: asked to load lifepaths for invalid stock " + stock); return @@ -319,26 +359,16 @@ function BurningDataService($http) { $http.get("/lifepaths/" + stock, {'timeout': 3000} ). success(function(data,status,headers,config){ myself.lifepaths[stock] = data; - // myself.datasetLoaded(); - console.log("Loaded "+stock+" lifepaths. " + Object.keys(myself.lifepaths).length + " settings"); + myself.triggerStockEvent(stock, "lifepathsLoaded"); + console.log("Loaded "+stock+" lifepaths. " + Object.keys(myself.lifepaths[stock]).length + " settings"); }). error(function(data,status,headers,config){ - // myself.datasetLoaded(); console.log("Error: Getting "+stock+" lifepaths from server failed: HTTP code " + status + ": " + data); }); } - /* Load starting stat points table from server */ - var loadStartingStatPtsForStock = function(stock){ - if( ! isValidStock(stock) ){ - console.log("Loading starting stat points failed: asked to load pts for invalid stock " + stock); - return - } - myself.startingStatPts[stock] = new StartingStatPoints(myself.stocks[stock].starting_stats); - } - /* Load resources from server */ - var loadResourcesForStock = function(stock){ + this.loadResourcesForStock = function(stock){ if( ! isValidStock(stock) ){ console.log("Loading resources failed: asked to load for invalid stock " + stock); return @@ -347,11 +377,10 @@ function BurningDataService($http) { $http.get("/resources/" + stock, {'timeout': 3000} ). success(function(data,status,headers,config){ myself.resources[stock] = data; - // myself.datasetLoaded(); + myself.triggerStockEvent(stock, "resourcesLoaded"); console.log("Loaded "+stock+" resources. "); }). error(function(data,status,headers,config){ - // myself.datasetLoaded(); console.log("Error: Getting "+stock+" stat points from server failed: HTTP code " + status + ": " + data); }); } @@ -361,11 +390,9 @@ function BurningDataService($http) { $http.get("/skills", {'timeout': 3000} ). success(function(data,status,headers,config){ myself.skills = data; - // myself.datasetLoaded(); - console.log("Loaded skills. "); + myself.triggerEvent("skillsLoaded"); }). error(function(data,status,headers,config){ - // myself.datasetLoaded(); console.log("Error: Getting skills from server failed: HTTP code " + status + ": " + data); }); @@ -373,13 +400,22 @@ function BurningDataService($http) { $http.get("/traits", {'timeout': 3000} ). success(function(data,status,headers,config){ myself.traits = data; - // myself.datasetLoaded(); - console.log("Loaded traits. "); + myself.triggerEvent("traitsLoaded"); }). error(function(data,status,headers,config){ - // myself.datasetLoaded(); console.log("Error: Getting traits from server failed: HTTP code " + status + ": " + data); }); + // DEBUG: + // setTimeout(() => testStockLoading(myself), (2 * 1000)); +} + +function testStockLoading(dataService) { + console.log(dataService); + for (var stock in dataService.stocks) { + console.log(stock); + dataService.loadLifepathsForStock(stock); + dataService.loadResourcesForStock(stock); + } } /**** End BurningDataService ****/ diff --git a/src/public/js/burning.js b/src/public/js/burning.js index d59402c..f4d8ed2 100644 --- a/src/public/js/burning.js +++ b/src/public/js/burning.js @@ -160,7 +160,7 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo } }; // Setting names for use in the Add Lifepath section - $scope.settingNames = ["Loading..."] + $scope.settingNames = []; $scope.currentSettingLifepathNames = []; // The currently selected lifepath $scope.currentSettingLifepath = "Loading..."; @@ -207,10 +207,10 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo $scope.name = ""; // Character stock. One of man, dwarf, orc, elf - if ( ! isValidStock(stock) ){ - console.log("Invalid stock '"+stock+"' passed to BurningCtrl.initialize. Defaulting to man"); - stock = "man"; - } + // if ( ! isValidStock(stock) ){ + // console.log("Invalid stock '"+stock+"' passed to BurningCtrl.initialize. Defaulting to man"); + // stock = "man"; + // } $scope.stock = stock; @@ -302,7 +302,7 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo } - $scope.initialize("man"); + $scope.initialize(); if ( characterStorage.currentCharacter ){ //console.log("Loading current character"); @@ -364,20 +364,29 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo } $scope.onStockChange = function(){ + if(!$scope.stock) return; var oldName = $scope.name; + burningData.registerStockEvent($scope.stock, "lifepathsLoaded", function () { + // Make a blank character sheet + $scope.initialize($scope.stock); - // Make a blank character sheet - $scope.initialize($scope.stock); + if ( oldName.length == 0 ){ + $scope.generateName(); + } else { + $scope.name = oldName; + } + calculateSettingNames($scope, burningData); + calculateCurrentSettingLifepathNames($scope, burningData); + calculateSpecialTraitsForDisplay($scope, burningData); + }); + if(!burningData.lifepaths[$scope.stock]) { + burningData.loadLifepathsForStock($scope.stock); + } - if ( oldName.length == 0 ){ - $scope.generateName(); - } else { - $scope.name = oldName; + if(!burningData.resources[$scope.stock]) { + burningData.loadResourcesForStock($scope.stock); } - calculateSettingNames($scope, burningData); - calculateCurrentSettingLifepathNames($scope, burningData); - calculateSpecialTraitsForDisplay($scope, burningData); } $scope.onSettingChange = function(){ @@ -403,8 +412,13 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo calculateUnspentSkillPoints($scope); } - burningData.registerOnAllDatasetsLoaded(function(){ - onLifepathsLoad($scope, burningData); + // burningData.registerOnAllDatasetsLoaded(function(){ + // onLifepathsLoad($scope, burningData); + // }); + + burningData.registerEvent("stocksLoaded", function() { + $scope.stocks = [{ name: "Select a stock" }] + $scope.stocks = $scope.stocks.concat(Object.values(burningData.stocks)); }); $scope.$on('$locationChangeStart', function(event, nextUrl, currentUrl) { diff --git a/src/views/partials/main.erb b/src/views/partials/main.erb index 6da38d0..11fa49d 100644 --- a/src/views/partials/main.erb +++ b/src/views/partials/main.erb @@ -94,14 +94,7 @@
-
-- 2.37.3 From 117365ed8e591af9c8725416c4f5061d597c3e34 Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Tue, 10 Jan 2023 01:58:07 -0600 Subject: [PATCH 20/45] Fix angular interpolation error --- src/public/js/burning-service.js | 12 -- src/public/js/burning.js | 276 +++++++++++++++---------------- 2 files changed, 136 insertions(+), 152 deletions(-) diff --git a/src/public/js/burning-service.js b/src/public/js/burning-service.js index 066f0ed..15a2010 100644 --- a/src/public/js/burning-service.js +++ b/src/public/js/burning-service.js @@ -330,18 +330,6 @@ function BurningDataService($http) { myself.startingStatPts[stock] = new StartingStatPoints(myself.stocks[stock].starting_stats); myself.defineStockEvent(stock, "lifepathsLoaded"); myself.defineStockEvent(stock, "resourcesLoaded"); - - // Log events - myself.registerStockEvent(stock, "lifepathsLoaded", function () { - // console.log("Loaded " + Object.keys(myself.lifepaths[stock]).length + " lifepaths for " + stock + "."); - // DEBUG: - console.log("Loaded " + stock, myself.lifepaths[stock]); - }); - myself.registerStockEvent(stock, "resourcesLoaded", function () { - // console.log("Loaded " + Object.keys(myself.resources[stock]).length + " resources for " + stock + "."); - // DEBUG: - console.log("Loaded " + stock, myself.resources[stock]); - }); } myself.triggerEvent("stocksLoaded"); }). diff --git a/src/public/js/burning.js b/src/public/js/burning.js index f4d8ed2..9ca9408 100644 --- a/src/public/js/burning.js +++ b/src/public/js/burning.js @@ -12,7 +12,7 @@ function handleIframeLoad(frameName) if ( frame != null ) { result = frame.document.getElementsByTagName("pre")[0].innerHTML; - + // The form's onload handler gets called when the main page is first loaded as well. // We detect this condition by checking if the iframes contents are not empty. if ( result.length > 0 ){ @@ -32,7 +32,7 @@ function handleIframeLoad(frameName) scope.loadCurrentCharacterFromStruct(charStruct); } ); - } + } catch(e){ console.log("Loading character failed: " + e); scope.$apply( @@ -72,7 +72,7 @@ burningModule.run(function($rootScope, $location, $anchorScroll, $routeParams) { $rootScope.$on('$routeChangeSuccess', function(newRoute, oldRoute) { if($routeParams.scrollTo){ $location.hash($routeParams.scrollTo); - $anchorScroll(); + $anchorScroll(); } }); }); @@ -92,7 +92,7 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo selected item at that level. index: The starting level in the hierarchy for which we should recalculate the lower levels of the lists. - */ + */ $scope.calculateHierarchyListForSelectN = function(listForSelect, currentItem, index){ if(index < 1) return; @@ -100,7 +100,7 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo while(index < 3){ if(!currentItem[index-1] || !currentItem[index-1].resources) { - listForSelect[index] = []; + listForSelect[index] = []; currentItem[index] = {}; } else { @@ -118,7 +118,7 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo $scope.enforcePointLimits = settings.enforcePointLimits /* A list of DisplayLifepath. */ - $scope.selectedLifepaths = []; + $scope.selectedLifepaths = []; $scope.statNames = ["Will", "Perception", "Power", "Forte", "Agility", "Speed"]; $scope.stats = []; @@ -195,7 +195,7 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo $scope.reputations = {}; - // Hash containing total stat points categorized by + // Hash containing total stat points categorized by // type (physical, mental, either) $scope.totalStatPoints = {"physical" : 0, "mental" : 0, "either" : 0} $scope.unspentStatPoints = {"physical" : 0, "mental" : 0, "either" : 0} @@ -206,12 +206,6 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo // Character name $scope.name = ""; - // Character stock. One of man, dwarf, orc, elf - // if ( ! isValidStock(stock) ){ - // console.log("Invalid stock '"+stock+"' passed to BurningCtrl.initialize. Defaulting to man"); - // stock = "man"; - // } - $scope.stock = stock; // Character id (server side id) @@ -247,7 +241,7 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo /* Traits that are on the character's lifepaths, but not necessarily taken */ $scope.lifepathTraits = {}; - /* Modifiers to attributes based on the answers to questions. This applies to Greed, Steel, etc. + /* Modifiers to attributes based on the answers to questions. This applies to Greed, Steel, etc. The hash is keyed by attribute name, and the value is a list of yes/no questions, their answers, and the modifier applied for a yes answer. */ @@ -255,11 +249,11 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo $scope.attributeBonuses = {}; - /* Used to keep track of whether the user shade-shifted an attribute, for those attributes that + /* Used to keep track of whether the user shade-shifted an attribute, for those attributes that allow shade shifting */ $scope.attributeShade = {'Steel': 'B', 'Grief' : 'B', 'Greed' : 'B', 'Hatred' : 'B', 'Spite' : 'B'}; - $scope.ptgs = new PTGS(); + $scope.ptgs = new PTGS(); /* List of traits to show in the Choose Special Trait dropdown */ $scope.specialTraitsForDisplay = []; @@ -287,19 +281,19 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo }; $scope.characterStorage = characterStorage - + $scope.resourceAdderToShow = 'gear'; - - // If this is true, then the user had added a lifepath to an Orc character that added a + + // If this is true, then the user had added a lifepath to an Orc character that added a // brutal life trait, and then the character removed that lifepath. According to the rules // they can never gain more lifepaths after this action. $scope.brutalLifeWithdrawn = false; calculateGearSelectionLists($scope, burningData); calculatePropertySelectionLists($scope, burningData); - + $scope.serverSettings = serverSettings; - + } $scope.initialize(); @@ -354,7 +348,7 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo } return result; } - + $scope.onGenderChange = function(){ if ($scope.name.length == 0) { @@ -365,7 +359,18 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo $scope.onStockChange = function(){ if(!$scope.stock) return; + if(!$scope.stockSelected) { + $scope.stocks.shift(); + $scope.stockSelected = true; + } var oldName = $scope.name; + if(!burningData.lifepaths[$scope.stock]) { + burningData.loadLifepathsForStock($scope.stock); + } + if(!burningData.resources[$scope.stock]) { + burningData.loadResourcesForStock($scope.stock); + } + // TODO: technically a bug — only want this registered once per stock... burningData.registerStockEvent($scope.stock, "lifepathsLoaded", function () { // Make a blank character sheet $scope.initialize($scope.stock); @@ -379,14 +384,6 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo calculateCurrentSettingLifepathNames($scope, burningData); calculateSpecialTraitsForDisplay($scope, burningData); }); - if(!burningData.lifepaths[$scope.stock]) { - burningData.loadLifepathsForStock($scope.stock); - } - - if(!burningData.resources[$scope.stock]) { - burningData.loadResourcesForStock($scope.stock); - } - } $scope.onSettingChange = function(){ @@ -412,13 +409,11 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo calculateUnspentSkillPoints($scope); } - // burningData.registerOnAllDatasetsLoaded(function(){ - // onLifepathsLoad($scope, burningData); - // }); burningData.registerEvent("stocksLoaded", function() { $scope.stocks = [{ name: "Select a stock" }] $scope.stocks = $scope.stocks.concat(Object.values(burningData.stocks)); + $scope.stockSelected = false; }); $scope.$on('$locationChangeStart', function(event, nextUrl, currentUrl) { @@ -440,11 +435,11 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo $scope.onAddLifepathClick = function(){ // Find the current lifepath info in the lifepaths var setting = burningData.lifepaths[$scope.stock][$scope.currentSetting]; - if (!setting) + if (!setting) return; var lifepath = setting[$scope.currentSettingLifepath]; - if (!lifepath) + if (!lifepath) return; displayLp = new DisplayLifepath($scope.currentSetting, $scope.currentSettingLifepath, lifepath); @@ -463,7 +458,7 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo $scope.chooseStatPenalties(displayLp, -penalty); } - // If the lifepath contains 'Appropriate Weapons', ask the + // If the lifepath contains 'Appropriate Weapons', ask the // user to choose those weapons. if( appropriateWeapons.hasAppropriateWeapons(displayLp) ){ var appropriate = appropriateWeapons.appropriateWeapons[displayLp.name]; @@ -480,7 +475,7 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo } } - // If the lifepath contains 'Weapon Of Choice', ask the + // If the lifepath contains 'Weapon Of Choice', ask the // user to choose the weapon. if( weaponOfChoice.hasWeaponOfChoice(displayLp) ){ weaponOfChoice.selectWeaponOfChoice(displayLp, function(){ @@ -501,7 +496,7 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo displayLp.calculateResourcePoints(prevLifepath); displayLp.calculateGeneralSkillPoints(prevLifepath); - displayLp.modifyForDiminishingReturns($scope.selectedLifepaths); + displayLp.modifyForDiminishingReturns($scope.selectedLifepaths); if($scope.stock == "orc"){ displayLp.applyBrutalLife($scope.selectedLifepaths); } @@ -565,7 +560,7 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo calculateUnspentResourcePoints($scope); applyBonusesFromTraits($scope); } - + $scope.incrementStat = function(stat){ // Man stock has max 8 pts in any stat @@ -592,7 +587,7 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo if(specificStatPoints <= 0 && eitherStatPoints <= 0 && $scope.enforcePointLimits) return; - + if(specificStatPoints > 0){ specificStatPoints -= 1; stat.setSpecificPointsSpent(stat.specificPointsSpent() + 1); @@ -605,10 +600,10 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo $scope.unspentStatPoints.either = eitherStatPoints; if("m" == stat.type){ $scope.unspentStatPoints.mental = specificStatPoints; - } + } else if ("p" == stat.type){ $scope.unspentStatPoints.physical = specificStatPoints; - } + } calculatePTGS($scope); } @@ -625,15 +620,15 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo } else { var specificStatPoints = 0; - + stat.setSpecificPointsSpent(stat.specificPointsSpent() - 1); if("m" == stat.type){ $scope.unspentStatPoints.mental += 1; - } + } else if ("p" == stat.type){ $scope.unspentStatPoints.physical += 1; - } + } else{ console.log("Error: Unknown stat type " + stat.type + " passed to decrementStat for stat " + stat.name); // Undo the decrement @@ -686,10 +681,10 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo $scope.unspentStatPoints.either = eitherStatPoints; if("m" == stat.type){ $scope.unspentStatPoints.mental = specificStatPoints; - } + } else if ("p" == stat.type){ $scope.unspentStatPoints.physical = specificStatPoints; - } + } } var toBlack = function(stat){ @@ -704,7 +699,7 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo else{ console.log("Error: Unknown stat type " + stat.type + " passed to incrementStat for stat " + stat.name); return; - } + } var cost = 5; @@ -787,7 +782,7 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo cost -= toTake; } - + if ( cost > 0 && ($scope.unspentSkillPoints["general"] > 0 || ! $scope.enforcePointLimits)) { $scope.unspentSkillPoints["general"] -= cost; @@ -803,11 +798,11 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo // If this skill is required to be open, do not allow // unchecking var required = skillsRequiredToBeOpened($scope.selectedLifepaths) - if (skill.name in required){ + if (skill.name in required){ checkbox.checked = true; return; } - + if ( skill.generalPointsSpent > 0 ){ $scope.unspentSkillPoints.general += skill.generalPointsSpent; skill.generalPointsSpent = 0; @@ -903,7 +898,7 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo if(endsWith(wiseName, "-wise")){ wiseName = wiseName.substring(0, wiseName.length-5); } - + wiseName = capitalizeEachWord(wiseName) + "-wise"; $scope.generalSkills[wiseName] = new DisplaySkill(wiseName, burningData.skills); @@ -913,7 +908,7 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo general skills selected by the user */ $scope.isGeneralSkill = function(displaySkill){ return (displaySkill.name in $scope.generalSkills); - + } /* Given the passed display skill, remove it from the list of general skills */ @@ -922,7 +917,7 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo calculateUnspentSkillPoints($scope); } - // Return a hash containing all skills + // Return a hash containing all skills $scope.allSelectedSkills = function(){ var result = {} for(var key in $scope.lifepathSkills){ @@ -935,8 +930,8 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo } // Return a list of skill names that the character can choose - // from to add a general skill. This is all skills less the - // skills the character already has, and less the skills that + // from to add a general skill. This is all skills less the + // skills the character already has, and less the skills that // are not allowed for the character's stock. $scope.selectableGeneralSkills = function(){ var result = []; @@ -1038,7 +1033,8 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo return {"shade" : "", "exp" : 10 - $scope.statsByName["Will"].exp() + bonus}; } else if ( "Stride" == name ){ - var stride = burningData.stocks[$scope.stock].stride; + // This is a hack: if stock is unselected, use 0 for stride to not throw error; it shouldn't be displayed anyway + var stride = $scope.stock ? burningData.stocks[$scope.stock].stride : 0; stride += bonus; return {"shade" : "", "exp" : stride}; } @@ -1056,13 +1052,13 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo for(var i = 0; i < property.length; i++){ sum += property[i].cost; } - + if ( sum >= 50 ){ v += 1; } v += bonus; - + return {"shade" : "B", "exp" : v}; } else if ( "Resources" == name ){ @@ -1142,7 +1138,7 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo // Divide physical between each physical stat var physicalBuckets = divideIntoBuckets($scope.totalStatPoints.physical, 4); var physicalEitherBuckets = divideIntoBuckets(eitherBuckets[1], 4); - + $scope.statsByName.Will.mentalPointsSpent = mentalBuckets[0]; $scope.statsByName.Will.eitherPointsSpent = mentalEitherBuckets[1]; $scope.statsByName.Perception.mentalPointsSpent = mentalBuckets[1]; @@ -1164,7 +1160,7 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo } if ( sum != $scope.totalStatPoints.either + $scope.totalStatPoints.mental + $scope.totalStatPoints.physical ) { console.log("Error: Calculation in distributeStats is incorrect."); - + for(var i = 0; i < $scope.stats.length; i++){ $scope.stats[i].physicalPointsSpent = 0; $scope.stats[i].mentalPointsSpent = 0; @@ -1192,15 +1188,15 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo return list; } /* - + $scope.specialTraitsForDisplay = function(){ var list = []; for(var traitName in burningData.traits) { var trait = burningData.traits[traitName]; - + if ('restrict' in trait){ - if ( trait.restrict.indexOf(validStockToRestrictionStock($scope.stock)) >= 0 && + if ( trait.restrict.indexOf(validStockToRestrictionStock($scope.stock)) >= 0 && (trait.restrict.indexOf("special") >= 0 || trait.restrict.indexOf("character") >= 0) ){ list.push(new DisplayTrait(traitName, burningData.traits)); } @@ -1213,7 +1209,7 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo } return list; - } + } */ $scope.addLifepathTrait = function(traitName){ @@ -1405,7 +1401,7 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo }); } - // Launch a download for the current character. Since Javascript can't really + // Launch a download for the current character. Since Javascript can't really // launch a download using data from javascript, we need to pass the current character // to the server which sends a filename back to a hidden iframe which then launches the download. $scope.downloadCurrentCharacter = function(){ @@ -1536,7 +1532,7 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo } $scope.addResource = function(type){ - + var resource = null; var resourceHash = null; if(type == 'relationship'){ @@ -1605,7 +1601,7 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo calculateUnspentResourcePoints($scope); } - + $scope.addSelectListGear = function(){ var name = ""; var cost = 0; @@ -1625,7 +1621,7 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo } } } - + $scope.currentGearDesc = name; $scope.currentGearCost = cost; $scope.addResource('gear'); @@ -1650,7 +1646,7 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo } } } - + $scope.currentPropertyDesc = name; $scope.currentPropertyCost = cost; $scope.addResource('property'); @@ -1715,7 +1711,7 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo } $scope.answerEmotionalAttributeQuestions = function (attributeName){ - + // If the character already has some or all of the questions answered, pass those in. // Otherwise generate new ones. @@ -1740,9 +1736,9 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo displayEmotionalMath: function () { return serverSettings.displayAttrMath; }, - } + } }); - + modalInstance.result.then(function (selected) { $scope.attributeModifierQuestionResults[attributeName] = selected; }, function () { @@ -1840,12 +1836,12 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo } $scope.showUploadCharacterModal = function (){ - + var modalInstance = $modal.open({ templateUrl: '/upload_character_partial', controller: UploadCharacterModalCtrl }); - + modalInstance.result.then(function () { console.log("Modal: Uploaded character"); }, function () { @@ -1955,7 +1951,7 @@ function calculateAge($scope){ function calculateSettingNames($scope, burningData){ var settingNames = null; - var lastCurrentSetting = $scope.currentSetting; + var lastCurrentSetting = $scope.currentSetting; if ( ! $scope.enforceLifepathReqts ) { // Display all settings and subsettings @@ -2032,8 +2028,8 @@ function calculateCurrentSettingLifepathNames($scope, burningData){ var currentSettingLifepathNames = null; if($scope.enforceLifepathReqts){ - //console.log("calculateCurrentSettingLifepathNames: enforce lifepath requirements is enabled"); - currentSettingLifepathNames = []; + //console.log("calculateCurrentSettingLifepathNames: enforce lifepath requirements is enabled"); + currentSettingLifepathNames = []; var all = Object.keys(burningData.lifepaths[$scope.stock][$scope.currentSetting]) // Filter out the names that are not allowed based on the character's lifepaths. if ( $scope.selectedLifepaths.length == 0 ){ @@ -2058,11 +2054,11 @@ function calculateCurrentSettingLifepathNames($scope, burningData){ //console.log(settingName + ":" + lifepathName + " allowed: " + (result[0] ? "yes" : "no")); //console.log("rexpr: " + rexpr); if(result[0]){ - //console.log("calculateCurrentSettingLifepathNames: added because lifepath has reqts, which are met: " + lifepathName); + //console.log("calculateCurrentSettingLifepathNames: added because lifepath has reqts, which are met: " + lifepathName); currentSettingLifepathNames.push(lifepathName); } else { - //console.log("calculateCurrentSettingLifepathNames: not added because lifepath has reqts, which not are met: " + lifepathName); + //console.log("calculateCurrentSettingLifepathNames: not added because lifepath has reqts, which not are met: " + lifepathName); } } else { @@ -2071,7 +2067,7 @@ function calculateCurrentSettingLifepathNames($scope, burningData){ } } - } + } else { currentSettingLifepathNames = Object.keys(burningData.lifepaths[$scope.stock][$scope.currentSetting]); } @@ -2094,7 +2090,7 @@ function calculateCurrentSettingLifepathNames($scope, burningData){ } function calculateTotalStatPoints($scope, burningData){ - + var totalStatPoints = {"physical" : 0, "mental" : 0, "either" : 0}; $scope.totalStatPoints = {"physical" : 0, "mental" : 0, "either" : 0}; @@ -2125,10 +2121,10 @@ function calculateTotalStatPoints($scope, burningData){ Preconditions: totalStatPoints is up to date. */ function calculateUnspentStatPoints($scope){ - + var unspentStatPoints = { - "physical" : $scope.totalStatPoints.physical, - "mental" : $scope.totalStatPoints.mental, + "physical" : $scope.totalStatPoints.physical, + "mental" : $scope.totalStatPoints.mental, "either" : $scope.totalStatPoints.either } @@ -2151,7 +2147,7 @@ function calculateLifepathSkills($scope, burningData, appropriateWeapons){ for(var i = 0; i < $scope.selectedLifepaths.length; i++){ var displayLp = $scope.selectedLifepaths[i]; - + appropriateWeapons.replaceAppropriateWeaponsUsingSaved(displayLp); displayLp.replaceWeaponOfChoice(); @@ -2160,7 +2156,7 @@ function calculateLifepathSkills($scope, burningData, appropriateWeapons){ if ( name != "General"){ lifepathSkills[name] = new DisplaySkill(name, burningData.skills); } - } + } } $scope.lifepathSkills = lifepathSkills; @@ -2180,20 +2176,20 @@ function calculateTotalSkillPoints($scope){ function calculateUnspentSkillPoints($scope){ var unspentSkillPoints = { - "lifepath" : $scope.totalSkillPoints.lifepath, + "lifepath" : $scope.totalSkillPoints.lifepath, "general" : $scope.totalSkillPoints.general } - + for(var key in $scope.lifepathSkills){ var skill = $scope.lifepathSkills[key] - + unspentSkillPoints.lifepath -= skill.lifepathPointsSpent; unspentSkillPoints.general -= skill.generalPointsSpent; } for(var key in $scope.generalSkills){ var skill = $scope.generalSkills[key] - + unspentSkillPoints.lifepath -= skill.lifepathPointsSpent; unspentSkillPoints.general -= skill.generalPointsSpent; } @@ -2205,7 +2201,7 @@ function openRequiredSkills($scope){ var required = skillsRequiredToBeOpened($scope.selectedLifepaths); var unspentSkillPoints = { - "lifepath" : $scope.unspentSkillPoints.lifepath, + "lifepath" : $scope.unspentSkillPoints.lifepath, "general" : $scope.unspentSkillPoints.general } @@ -2243,13 +2239,13 @@ function skillsRequiredToBeOpened(lifepaths){ break; } } - } + } return skillHash; } /* - When a lifepath is removed, the stat points spent may be more than the available, + When a lifepath is removed, the stat points spent may be more than the available, leading to a negative amount available. This method attempts to correct the situation by lowering the spent points. */ @@ -2260,10 +2256,10 @@ function correctStatPoints($scope){ } /* - Helper function used by correctStatPoints. This function tries to correct the deficit in + Helper function used by correctStatPoints. This function tries to correct the deficit in $scope.unspentStatPoints for the specified 'unspentStatField' (one of physical, mental, or either) - by unspending points from the stats, using the field 'displayStatField' - (one of physicalPointsSpent, mentalPointsSpent, eitherPointsSpent) + by unspending points from the stats, using the field 'displayStatField' + (one of physicalPointsSpent, mentalPointsSpent, eitherPointsSpent) */ function correctStatPointsHelperLowerPointsOfType($scope, unspentStatField, displayStatField){ if ( $scope.unspentStatPoints[unspentStatField] < 0 ){ @@ -2286,7 +2282,7 @@ function correctStatPointsHelperLowerPointsOfType($scope, unspentStatField, disp } } } - + } /* If the user adds some general skills to the character and then adds a lifepath that has those skills, @@ -2309,14 +2305,14 @@ function calculateLifepathTraits($scope, burningData){ for(var i = 0; i < $scope.selectedLifepaths.length; i++){ var displayLp = $scope.selectedLifepaths[i]; - + totalTraitPoints += displayLp.traitPts; for(var j = 0; j < displayLp.traits.length; j++){ var name = displayLp.traits[j]; - + lifepathTraits[name] = new DisplayTrait(name, burningData.traits); - } + } } $scope.lifepathTraits = lifepathTraits; @@ -2379,7 +2375,7 @@ function traitsRequiredToBeOpened(lifepaths){ break; } } - } + } return traitHash; } @@ -2406,17 +2402,17 @@ function calculateUnspentTraitPoints($scope){ /* - rexpr are the requires_expr. Returns a two-element list. - The first element is true if the requirements are satisifed, false - otherwise. The second element are any extra conditions if the first + rexpr are the requires_expr. Returns a two-element list. + The first element is true if the requirements are satisifed, false + otherwise. The second element are any extra conditions if the first element is true. These extra conditions semantically descibe extra conditions - that must _later_ be met, for example "the requirements are satisfied as long as + that must _later_ be met, for example "the requirements are satisfied as long as the character takes the trait 'your grace' " The extra conditions supported so far are only a list of trait names. */ function areLifepathRequirementsSatisfied($scope, rexpr){ - + // make lookup tables var selectedLifepathsByName = {} for(var i = 0; i < $scope.selectedLifepaths.length; i++) { @@ -2426,7 +2422,7 @@ function areLifepathRequirementsSatisfied($scope, rexpr){ for(var i = 0; i < $scope.selectedLifepaths.length; i++) { selectedLifepathsBySettingAndName[$scope.selectedLifepaths[i].setting.toLowerCase() + ":" + $scope.selectedLifepaths[i].name.toLowerCase()] = true; } - + var checkHasLifepathIn = function(rexpr){ // This is a [+has_lifepath_in, lp1, lp2, ...] OR [lifepath, lifepath] array. @@ -2511,7 +2507,7 @@ function areLifepathRequirementsSatisfied($scope, rexpr){ console.log("Error in areLifepathRequirementsSatisfied when evaluating expression: age_less_than predicate is length < 2 when it must be 2"); return [false, []]; } - + return [$scope.age < rexpr[1], []]; } @@ -2520,7 +2516,7 @@ function areLifepathRequirementsSatisfied($scope, rexpr){ console.log("Error in areLifepathRequirementsSatisfied when evaluating expression: age_greater_than predicate is length < 2 when it must be 2"); return [false, []]; } - + return [$scope.age > rexpr[1], []]; } @@ -2588,7 +2584,7 @@ function areLifepathRequirementsSatisfied($scope, rexpr){ console.log("Error in areLifepathRequirementsSatisfied when evaluating expression: '"+type+"' expression is length "+rexpr.length+" when it must exactly 2"); return [false, []]; } - + var evalResult = areLifepathRequirementsSatisfied($scope, rexpr[1]); return [!evalResult[0], evalResult[1]]; @@ -2666,7 +2662,7 @@ function characterStructValid(charStruct){ } function calculateTraitWarnings($scope, burningData){ - + // Make lookup maps of traits using lower-case trait names var allTakenTraitNames = {}; for(var key in $scope.purchasedTraits){ @@ -2688,7 +2684,7 @@ function calculateTraitWarnings($scope, burningData){ var result = areLifepathRequirementsSatisfied($scope, rexpr); for(var k = 0; k < result[1].length; k++){ var trait = result[1][k]; - + if( ! (trait in allTakenTraitNames) ){ traitWarnings.push("You must take the '"+trait+"' trait to satisfy the '"+selectedLifepath.name+"' lifepath requirements."); } @@ -2706,12 +2702,12 @@ function applyBonusesFromTraits($scope) { for(var key in $scope.purchasedTraits){ var displayTrait = $scope.purchasedTraits[key]; traitBonuses.addTrait(key, displayTrait); - } + } for(var key in $scope.requiredTraits){ var displayTrait = $scope.requiredTraits[key]; traitBonuses.addTrait(key, displayTrait); - } + } for(var key in $scope.commonTraits){ var displayTrait = $scope.commonTraits[key]; @@ -2727,13 +2723,13 @@ function applyBonusesFromTraits($scope) { var displaySkill = $scope.lifepathSkills[key]; displaySkill.bonus = traitBonuses.getAddBonusesForSkill(key); displaySkill.roundUp = traitBonuses.getRoundUpBonusForSkill(displaySkill); - } + } for(var key in $scope.generalSkills) { var displaySkill = $scope.generalSkills[key]; displaySkill.bonus = traitBonuses.getAddBonusesForSkill(key); displaySkill.roundUp = traitBonuses.getRoundUpBonusForSkill(displaySkill); - } + } //** Attributes @@ -2752,7 +2748,7 @@ function applyBonusesFromTraits($scope) { } /* - Compute which traits the user can add as special traits. This value depends on character stock so + Compute which traits the user can add as special traits. This value depends on character stock so this function should be called when stock changes. */ function calculateSpecialTraitsForDisplay($scope, burningData){ @@ -2762,7 +2758,7 @@ function calculateSpecialTraitsForDisplay($scope, burningData){ var trait = burningData.traits[traitName]; if ('restrict' in trait){ - if ( trait.restrict.indexOf(validStockToRestrictionStock($scope.stock)) >= 0 && + if ( trait.restrict.indexOf(validStockToRestrictionStock($scope.stock)) >= 0 && (trait.restrict.indexOf("special") >= 0 || trait.restrict.indexOf("character") >= 0) ){ list.push(new DisplayTrait(traitName, burningData.traits)); } @@ -2851,7 +2847,7 @@ function validStockToRestrictionStock(stock){ } function attributeModifyingQuestions($scope, attribute) -{ +{ var result = []; var ageMod = function(age){ @@ -2921,8 +2917,8 @@ function attributeModifyingQuestions($scope, attribute) {question: "+1 Greed if the character is over 200 years old.", computed: true, compute: ageMod(200)}, {question: "+1 Greed if the character is over 400 years old.", computed: true, compute: ageMod(400)}, {question: "Each romantic relationship is -1 Greed. Each hateful relationship is +1 Greed. A hateful immediate family member is +2 Greed.", computed: true, compute: relMod} - ); - } + ); + } else if ( attribute == "Health" ) { var stockMod = function(){ @@ -2946,7 +2942,7 @@ function attributeModifyingQuestions($scope, attribute) // "herald":1, "bannerman":1, "scout":1, "sergeant":1, "veteran":1, "cavalryman":1, "captain":1, "military order":1} var steelyLps = {"conscript":1, "squire":1, "knight":1, "bandit":1, "pirate":1, "military order":1, "sword singer":1}; var steelySettings = {"professional soldier subsetting":1, "black legion subsetting":1, "dwarven host subsetting":1, "protector subsetting":1}; - + var steel = 0; for(var i = 0; i < $scope.selectedLifepaths.length; i++){ if($scope.selectedLifepaths[i].name.toLowerCase() in steelyLps || $scope.selectedLifepaths[i].setting.toLowerCase() in steelySettings){ @@ -3053,23 +3049,23 @@ function attributeModifyingQuestions($scope, attribute) var lpMod1 = function(){ var lps = {"lancer":1, "lieutenant":1, "captain":1}; var lps2 = {"lord protector":1, "soother":1}; - + var grief1 = 0; var grief2 = 0; for(var i = 0; i < $scope.selectedLifepaths.length; i++){ if($scope.selectedLifepaths[i].name.toLowerCase() in lps) { grief1 = 1; - if( grief2 > 0) + if( grief2 > 0) break; } if($scope.selectedLifepaths[i].name.toLowerCase() in lps2) { grief2 = 1; - if( grief1 > 0) + if( grief1 > 0) break; } - } + } return grief1 + grief2; } @@ -3086,11 +3082,11 @@ function attributeModifyingQuestions($scope, attribute) var lpMod2 = function(){ var lps = {"loremaster":1, "adjutant":1, "althing":1}; - + for(var i = 0; i < $scope.selectedLifepaths.length; i++){ if($scope.selectedLifepaths[i].name.toLowerCase() in lps) return 1; - } + } return 0; } @@ -3130,7 +3126,7 @@ function attributeModifyingQuestions($scope, attribute) var percMod = function(){ return ($scope.statsByName['Perception'].exp() > 5 ? 1 : 0); } - + result.push( {question: "+1 Grief if the character has taken any Protector lifepath.", computed: true, compute: protectMod}, {question: "+1 Grief if the character has been a Lancer, Lieutenant or Captain; Additional +1 if the character has been a Lord Protector or Soother", computed: true, compute: lpMod1}, @@ -3237,7 +3233,7 @@ function attributeModifyingQuestions($scope, attribute) var brutalMod = function(){ var count = 0; for(var i = 0; i < $scope.selectedLifepaths.length; i++){ - if ( $scope.selectedLifepaths[i].brutalLifeTraitName ){ + if ( $scope.selectedLifepaths[i].brutalLifeTraitName ){ count++; } } @@ -3356,7 +3352,7 @@ function convertAttributeModifierQuestionResultsForSave($scope){ // Save only the non-computed questions that were answered. var result = {}; - + for (key in $scope.attributeModifierQuestionResults){ var list = []; @@ -3386,7 +3382,7 @@ function convertAttributeModifierQuestionResultsForCharsheet($scope){ var attribute = attributeNames[j]; var fullQuestions = attributeModifyingQuestions($scope, attribute) - + if(! fullQuestions){ // Not an attribute with questions continue; @@ -3425,7 +3421,7 @@ function loadAttributeModifierQuestionResultsFromSave($scope, questions) { var result = {}; - // For each attribute for which questions were saved, generate the + // For each attribute for which questions were saved, generate the // full set of questions, then add in the answers from the save. // The reason we do this rather than save all questions and answers // is 1) to save space, and 2) because we can't save the compute function @@ -3454,7 +3450,7 @@ function loadAttributeModifierQuestionResultsFromSave($scope, questions) /** A number of skills are not defined because they are a specific instance of a general skill; for example -ancient history is a type of history, and has the same roots. This function returns the parent skill for +ancient history is a type of history, and has the same roots. This function returns the parent skill for a specific skill. */ function getGeneralSkillNameFor(skillName){ @@ -3512,7 +3508,7 @@ var computeStatAverage = function(statsByName, statNames, roundUp){ if(getShade(stats[i]) == 'G' && !allGray){ sum += 2; } - + sum += stats[i].exp(); } @@ -3559,11 +3555,11 @@ function calculateGearSelectionLists($scope, burningData) { $scope.gearListForSelect = []; for(var i = 0; i < 3; i++) $scope.currentSelectListGear.push({}); - + $scope.gearListForSelect[0] = calculateHierarchyListForSelect($scope, burningData, 'gear'); if($scope.gearListForSelect[0].length > 0) $scope.currentSelectListGear[0] = $scope.gearListForSelect[0][0]; - + $scope.calculateHierarchyListForSelectN($scope.gearListForSelect, $scope.currentSelectListGear, 1); } @@ -3572,11 +3568,11 @@ function calculatePropertySelectionLists($scope, burningData) { $scope.propertyListForSelect = []; for(var i = 0; i < 3; i++) $scope.currentSelectListProperty.push({}); - + $scope.propertyListForSelect[0] = calculateHierarchyListForSelect($scope, burningData, 'property'); if($scope.propertyListForSelect[0].length > 0) $scope.currentSelectListProperty[0] = $scope.propertyListForSelect[0][0]; - + $scope.calculateHierarchyListForSelectN($scope.propertyListForSelect, $scope.currentSelectListProperty, 1); } -- 2.37.3 From bb908d9bfdd558551843ecdd9c3e92ffa3480b09 Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Sat, 14 Jan 2023 14:48:07 -0600 Subject: [PATCH 21/45] Add adjectives to stock files --- src/data/gold/stocks/dwarf.json | 1 + src/data/gold/stocks/elf.json | 1 + src/data/gold/stocks/man.json | 1 + src/data/gold/stocks/orc.json | 1 + src/data/gold/stocks/roden.json | 1 + src/data/gold/stocks/wolf.json | 1 + src/data/troll/stock.json | 1 + src/lib/data/gold.rb | 2 -- src/lib/stock.rb | 12 +++++++----- 9 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/data/gold/stocks/dwarf.json b/src/data/gold/stocks/dwarf.json index 9f0a65a..8380f1f 100644 --- a/src/data/gold/stocks/dwarf.json +++ b/src/data/gold/stocks/dwarf.json @@ -2,6 +2,7 @@ "key": "dwarf", "name": "Dwarf", "stride": 6, + "adjective": "dwarven", "common_traits": [ "Accustomed To The Dark", "Bearded", diff --git a/src/data/gold/stocks/elf.json b/src/data/gold/stocks/elf.json index 48a6c7d..1a1ca46 100644 --- a/src/data/gold/stocks/elf.json +++ b/src/data/gold/stocks/elf.json @@ -2,6 +2,7 @@ "key": "elf", "name": "Elf", "stride": 8, + "adjective": "elven", "common_traits": [ "Born Under The Silver Stars", "Essence Of The Earth", diff --git a/src/data/gold/stocks/man.json b/src/data/gold/stocks/man.json index 7e452c7..44f27ec 100644 --- a/src/data/gold/stocks/man.json +++ b/src/data/gold/stocks/man.json @@ -2,6 +2,7 @@ "key": "man", "name": "Man", "stride": 7, + "adjective": "mannish", "common_traits": [ ], "starting_stats": diff --git a/src/data/gold/stocks/orc.json b/src/data/gold/stocks/orc.json index 36daaca..78f0bf0 100644 --- a/src/data/gold/stocks/orc.json +++ b/src/data/gold/stocks/orc.json @@ -2,6 +2,7 @@ "key": "orc", "name": "Orc", "stride": 7, + "adjective": "orcish", "common_traits": [ "Cannibal", "Cold Black Blood", diff --git a/src/data/gold/stocks/roden.json b/src/data/gold/stocks/roden.json index 1914eda..88d02d5 100644 --- a/src/data/gold/stocks/roden.json +++ b/src/data/gold/stocks/roden.json @@ -2,6 +2,7 @@ "key": "roden", "name": "Roden", "stride": 8, + "adjective": "roden", "common_traits": [ "Aecer's Likeness", "Coat Of Fur", diff --git a/src/data/gold/stocks/wolf.json b/src/data/gold/stocks/wolf.json index c717798..e47560e 100644 --- a/src/data/gold/stocks/wolf.json +++ b/src/data/gold/stocks/wolf.json @@ -2,6 +2,7 @@ "key": "wolf", "name": "Wolf", "stride": 11, + "adjective": "wolfish", "common_traits": [ "Crushing Jaws", "Deep Fur", diff --git a/src/data/troll/stock.json b/src/data/troll/stock.json index a1139c4..287840f 100644 --- a/src/data/troll/stock.json +++ b/src/data/troll/stock.json @@ -2,6 +2,7 @@ "key": "troll", "name": "Troll", "stride": 7, + "adjective": "trollish", "common_traits": [ "Black Nails", "Fangs", diff --git a/src/lib/data/gold.rb b/src/lib/data/gold.rb index 557c548..4c3bb07 100644 --- a/src/lib/data/gold.rb +++ b/src/lib/data/gold.rb @@ -12,7 +12,6 @@ module Charred lifepaths = {} resources = {} - stat_pts = {} stocks = {} gold_stocks = ['dwarf', 'elf', 'man', 'orc', 'roden', 'wolf'] @@ -33,7 +32,6 @@ module Charred :traits => traits, :lifepaths => lifepaths, :resources => resources, - :stat_pts => stat_pts, :stocks => stocks }) end diff --git a/src/lib/stock.rb b/src/lib/stock.rb index 31ac207..f311d26 100644 --- a/src/lib/stock.rb +++ b/src/lib/stock.rb @@ -12,17 +12,19 @@ module Charred @key = h["key"] @name = h["name"] || @key @stride = h["stride"] || @@default_stride + @adjective = h["adjective"] || @key+"ish" @common_traits = h["common_traits"] @starting_stats = h["starting_stats"] end def as_json(options = {}) { - "key" => key, - "name" => name, - "stride" => stride, - "common_traits" => common_traits, - "starting_stats" => starting_stats + "key" => @key, + "name" => @name, + "stride" => @stride, + "adjective" => @adjective, + "common_traits" => @common_traits, + "starting_stats" => @starting_stats } end def to_json(*a) -- 2.37.3 From 74ed09d830bc247688cb62ea251ca5726762de6a Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Sat, 14 Jan 2023 14:57:10 -0600 Subject: [PATCH 22/45] Lookup stocks by adjective field Don't use a hardcoded list of values in the source... --- src/public/js/burning-service.js | 14 +------ src/public/js/burning.js | 69 +++----------------------------- 2 files changed, 7 insertions(+), 76 deletions(-) diff --git a/src/public/js/burning-service.js b/src/public/js/burning-service.js index 15a2010..242aaab 100644 --- a/src/public/js/burning-service.js +++ b/src/public/js/burning-service.js @@ -301,7 +301,6 @@ function BurningDataService($http) { var myself = this; - var stocks; // Log events this.registerEvent("stocksLoaded", function() { @@ -325,8 +324,7 @@ function BurningDataService($http) { // DEBUG: // console.log(data); myself.stocks = data; - stocks = Object.keys(data); - for (var stock of stocks) { + for (var stock of Object.keys(data)) { myself.startingStatPts[stock] = new StartingStatPoints(myself.stocks[stock].starting_stats); myself.defineStockEvent(stock, "lifepathsLoaded"); myself.defineStockEvent(stock, "resourcesLoaded"); @@ -339,11 +337,6 @@ function BurningDataService($http) { /* Load lifepaths from server */ this.loadLifepathsForStock = function(stock){ - if( ! isValidStock(stock) ){ - console.log("Loading lifepaths failed: asked to load lifepaths for invalid stock " + stock); - return - } - $http.get("/lifepaths/" + stock, {'timeout': 3000} ). success(function(data,status,headers,config){ myself.lifepaths[stock] = data; @@ -357,11 +350,6 @@ function BurningDataService($http) { /* Load resources from server */ this.loadResourcesForStock = function(stock){ - if( ! isValidStock(stock) ){ - console.log("Loading resources failed: asked to load for invalid stock " + stock); - return - } - $http.get("/resources/" + stock, {'timeout': 3000} ). success(function(data,status,headers,config){ myself.resources[stock] = data; diff --git a/src/public/js/burning.js b/src/public/js/burning.js index 9ca9408..d2515e4 100644 --- a/src/public/js/burning.js +++ b/src/public/js/burning.js @@ -409,7 +409,6 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo calculateUnspentSkillPoints($scope); } - burningData.registerEvent("stocksLoaded", function() { $scope.stocks = [{ name: "Select a stock" }] $scope.stocks = $scope.stocks.concat(Object.values(burningData.stocks)); @@ -938,7 +937,7 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo for(var key in burningData.skills){ if ( !(key in $scope.lifepathSkills) && !(key in $scope.generalSkills) ){ var displaySkill = burningData.skills[key]; - if ( !displaySkill.stock || restrictionStockToValidStock(displaySkill.stock) == $scope.stock ) { + if ( !displaySkill.stock || restrictionStockToValidStock(burningData.stocks, displaySkill.stock) == $scope.stock ) { result.push(key); } } @@ -1187,30 +1186,6 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo return list; } -/* - - $scope.specialTraitsForDisplay = function(){ - var list = []; - - for(var traitName in burningData.traits) { - var trait = burningData.traits[traitName]; - - if ('restrict' in trait){ - if ( trait.restrict.indexOf(validStockToRestrictionStock($scope.stock)) >= 0 && - (trait.restrict.indexOf("special") >= 0 || trait.restrict.indexOf("character") >= 0) ){ - list.push(new DisplayTrait(traitName, burningData.traits)); - } - } else { - // No restriction! As long as cost > 0 (cost 0 is for traits with no cost; not purchaseable) - if ( trait.cost > 0 ) { - list.push(new DisplayTrait(traitName, burningData.traits)); - } - } - } - - return list; - } -*/ $scope.addLifepathTrait = function(traitName){ if ( $scope.unspentTraitPoints < 1 && $scope.enforcePointLimits ) @@ -2758,7 +2733,7 @@ function calculateSpecialTraitsForDisplay($scope, burningData){ var trait = burningData.traits[traitName]; if ('restrict' in trait){ - if ( trait.restrict.indexOf(validStockToRestrictionStock($scope.stock)) >= 0 && + if ( trait.restrict.indexOf(validStockToRestrictionStock(burningData.stocks, $scope.stock)) >= 0 && (trait.restrict.indexOf("special") >= 0 || trait.restrict.indexOf("character") >= 0) ){ list.push(new DisplayTrait(traitName, burningData.traits)); } @@ -2806,44 +2781,12 @@ function calculateUnspentResourcePoints($scope){ $scope.unspentResourcePoints = unspentResourcePoints; } -function isValidStock(stock){ - return stock == "man" || stock == "elf" || stock == "orc" || stock == "dwarf" || stock == "roden" || stock == "wolf" || stock =="troll"; -} - -function restrictionStockToValidStock(stock){ - - if ( stock == "mannish" ) - return "man"; - else if ( stock == "elven" ) - return "elf"; - else if ( stock == "orcish" ) - return "orc"; - else if ( stock == "dwarven" ) - return "dwarf"; - else if ( stock == "wolfish" ) - return "wolf"; - else if ( stock == "roden" ) - return "roden"; - else if ( stock == "trollish" ) - return "troll"; +function restrictionStockToValidStock(stocks, stockAdjective){ + return Object.values(stocks).findLast(s => s.adjective == stockAdjective).key; } -function validStockToRestrictionStock(stock){ - - if ( stock == "man" ) - return "mannish"; - else if ( stock == "elf" ) - return "elven"; - else if ( stock == "orc" ) - return "orcish"; - else if ( stock == "dwarf" ) - return "dwarven"; - else if ( stock == "roden" ) - return "roden"; - else if ( stock == "wolf" ) - return "wolfish"; - else if ( stock == "troll" ) - return "trollish"; +function validStockToRestrictionStock(stocks, stockName){ + return stocks[stockName].adjective; } function attributeModifyingQuestions($scope, attribute) -- 2.37.3 From f5d94d1d6741ee3f27977dae54cf096c6e7cdbea Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Wed, 25 Jan 2023 19:40:53 -0600 Subject: [PATCH 23/45] wip --- src/lib/data.rb | 1 + src/lib/data/custom.rb | 55 +++++++++++++++++++++++++++--------------- 2 files changed, 37 insertions(+), 19 deletions(-) diff --git a/src/lib/data.rb b/src/lib/data.rb index 2f56c2f..53d2dea 100644 --- a/src/lib/data.rb +++ b/src/lib/data.rb @@ -63,5 +63,6 @@ module Charred def json_get(filename) JSON.parse(File.read(filename)) + end end end diff --git a/src/lib/data/custom.rb b/src/lib/data/custom.rb index 4c74fa5..0a2062b 100644 --- a/src/lib/data/custom.rb +++ b/src/lib/data/custom.rb @@ -3,29 +3,46 @@ require 'json' module Charred module Custom def load_custom(data) - Dir.glob("data/custom/*/") { |dir| - stock_name = File.basename(dir) - - if File.readable?("dir/skills.json") - skills = json_get("dir/skills.json") - verbose_merge data[:skills], skills + Dir.glob("data/custom/**/*") { |file| + if File.file?(file) + case File.extname(file) + when "skills" + verbose_merge data[:skills], json_get(file) + when "traits" + verbose_merge data[:traits], json_get(file) + when "stock" + stock = Stock.new(json_get(file)) + data[:stocks][stock.key] = stock # This overwrites existing data... + when "lifepaths" + # + when "resources" + # + end end + } + # Dir.glob("data/custom/*/") { |dir| + # stock_name = File.basename(dir) - if File.readable?("dir/traits.json") - traits = json_get("dir/traits.json") - verbose_merge data[:traits], traits - end + # if File.readable?("dir/skills.json") + # skills = json_get("dir/skills.json") + # verbose_merge data[:skills], skills + # end - if File.readable?("dir/lifepaths.json") - lifepaths = json_get("dir/lifepaths.json") - data[:lifepaths][stock_name] = lifepaths - end + # if File.readable?("dir/traits.json") + # traits = json_get("dir/traits.json") + # verbose_merge data[:traits], traits + # end - if File.readable?("dir/resources.json") - resources = json_get("dir/resources.json") - data[:resources][stock_name] = resources - end - } + # if File.readable?("dir/lifepaths.json") + # lifepaths = json_get("dir/lifepaths.json") + # data[:lifepaths][stock_name] = lifepaths + # end + + # if File.readable?("dir/resources.json") + # resources = json_get("dir/resources.json") + # data[:resources][stock_name] = resources + # end + # } end end end -- 2.37.3 From 4b4b8476443ae92f1791d5096bd603839feaa1be Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Wed, 25 Jan 2023 19:41:38 -0600 Subject: [PATCH 24/45] Move some lifepaths to wrapped format --- src/data/dark_elf/lifepaths.json | 551 +++---- src/data/troll/lifepaths.json | 1113 +++++++------- src/data/wizard/lifepaths.json | 2329 +++++++++++++++--------------- 3 files changed, 2001 insertions(+), 1992 deletions(-) diff --git a/src/data/dark_elf/lifepaths.json b/src/data/dark_elf/lifepaths.json index 405b62b..0fbb0ac 100644 --- a/src/data/dark_elf/lifepaths.json +++ b/src/data/dark_elf/lifepaths.json @@ -1,296 +1,299 @@ { - "Path Of Spite Subsetting": { - "Griever": { - "time": 3, - "res": 0, - "skills": [ - [ - 3, - "Sorrow Of Truth", - "Dark Elf-wise" - ] - ], - "traits": [ - 1, - "Spite" - ] - }, - "Wastrel": { - "time": 25, - "res": 3, - "skills": [ - [ - 6, - "Scavenging", - "Brawling", - "Forest-wise", - "Wasteland-wise", - "Animal-wise" - ] - ], - "traits": [ - 2, - "Filthy", - "Feral Elf" - ], - "requires": "Griever", - "requires_expr": [ - "griever" - ] - }, - "Thief": { - "time": 18, - "res": 6, - "stat": [ - [ + "stock": "elf", + "settings": { + "Path Of Spite Subsetting": { + "Griever": { + "time": 3, + "res": 0, + "skills": [ + [ + 3, + "Sorrow Of Truth", + "Dark Elf-wise" + ] + ], + "traits": [ 1, - "pm" + "Spite" ] - ], - "skills": [ - [ - 6, - "Lock Pick", - "Stealthy", - "Climbing", - "Sleight Of Hand", - "Dirge Of Night" + }, + "Wastrel": { + "time": 25, + "res": 3, + "skills": [ + [ + 6, + "Scavenging", + "Brawling", + "Forest-wise", + "Wasteland-wise", + "Animal-wise" + ] + ], + "traits": [ + 2, + "Filthy", + "Feral Elf" + ], + "requires": "Griever", + "requires_expr": [ + "griever" ] - ], - "traits": [ - 1, - "Thief" - ], - "requires": "Griever", - "requires_expr": [ - "griever" - ] - }, - "Assassin": { - "time": 15, - "res": 6, - "stat": [ - [ + }, + "Thief": { + "time": 18, + "res": 6, + "stat": [ + [ + 1, + "pm" + ] + ], + "skills": [ + [ + 6, + "Lock Pick", + "Stealthy", + "Climbing", + "Sleight Of Hand", + "Dirge Of Night" + ] + ], + "traits": [ 1, - "p" - ] - ], - "skills": [ - [ - 7, - "Intimidation", - "Poisons", - "Escape Artist", - "Knives", - "Garotte", - "Keen Of Terror" - ] - ], - "traits": [ - 1, - "Murderous", - "Callous", - "Cold Blooded" - ], - "requires": "Griever", - "requires_expr": [ - "griever" - ] - }, - "Stalker": { - "time": 20, - "res": 8, - "skills": [ - [ - 8, - "Hunting", - "Elf-wise", - "Tracking", - "Trapper", - "Observation", - "Stealthy", - "Throwing", - "Javelin", - "Supplication To Shadows" + "Thief" + ], + "requires": "Griever", + "requires_expr": [ + "griever" ] - ], - "traits": [ - 1, - "Saturnine" - ], - "requires": "Griever", - "requires_expr": [ - "griever" - ] - }, - "Deceiver": { - "time": 35, - "res": 10, - "stat": [ - [ + }, + "Assassin": { + "time": 15, + "res": 6, + "stat": [ + [ + 1, + "p" + ] + ], + "skills": [ + [ + 7, + "Intimidation", + "Poisons", + "Escape Artist", + "Knives", + "Garotte", + "Keen Of Terror" + ] + ], + "traits": [ 1, - "m" - ] - ], - "skills": [ - [ - 7, - "Sleight Of Hand", - "Disguise", - "Inconspicuous", - "Rhyme Of The Unraveller" + "Murderous", + "Callous", + "Cold Blooded" + ], + "requires": "Griever", + "requires_expr": [ + "griever" ] - ], - "traits": [ - 1, - "Deceptive" - ], - "requires": "Griever", - "requires_expr": [ - "griever" - ] - }, - "Liar": { - "time": 25, - "res": 8, - "stat": [ - [ + }, + "Stalker": { + "time": 20, + "res": 8, + "skills": [ + [ + 8, + "Hunting", + "Elf-wise", + "Tracking", + "Trapper", + "Observation", + "Stealthy", + "Throwing", + "Javelin", + "Supplication To Shadows" + ] + ], + "traits": [ 1, - "m" - ] - ], - "skills": [ - [ - 6, - "Falsehood", - "Soothing Platitudes", - "Persuasion", - "Twisted Tongue" + "Saturnine" + ], + "requires": "Griever", + "requires_expr": [ + "griever" ] - ], - "traits": [ - 1, - "Compulsive Liar" - ], - "requires": "Griever", - "requires_expr": [ - "griever" - ] - }, - "Siren": { - "time": 55, - "res": 20, - "stat": [ - [ + }, + "Deceiver": { + "time": 35, + "res": 10, + "stat": [ + [ + 1, + "m" + ] + ], + "skills": [ + [ + 7, + "Sleight Of Hand", + "Disguise", + "Inconspicuous", + "Rhyme Of The Unraveller" + ] + ], + "traits": [ 1, - "pm" - ] - ], - "skills": [ - [ - 9, - "Seduction", - "Etiquette", - "Persuasion", - "Soothing Platitudes", - "Gossip-wise", - "Fugue Of Discord", - "Litany Of Fools" + "Deceptive" + ], + "requires": "Griever", + "requires_expr": [ + "griever" ] - ], - "traits": [ - 2, - "Charismatic", - "Femme Fatale/Homme Fatale" - ], - "requires": "Assassin, Deceiver or Liar", - "requires_expr": [ - "assassin", - "deceiver", - "liar" - ] - }, - "Eremite": { - "time": 150, - "res": 15, - "stat": [ - [ + }, + "Liar": { + "time": 25, + "res": 8, + "stat": [ + [ + 1, + "m" + ] + ], + "skills": [ + [ + 6, + "Falsehood", + "Soothing Platitudes", + "Persuasion", + "Twisted Tongue" + ] + ], + "traits": [ 1, - "m" - ] - ], - "skills": [ - [ - 12, - "Philosophy", - "Ugly Truth", - "Obscure History", - "Symbology", - "Strategy", - "Elf-wise", - "Orc-wise", - "Dwarf-wise", - "Man-wise", - "Paean To The Dark Fire" + "Compulsive Liar" + ], + "requires": "Griever", + "requires_expr": [ + "griever" ] - ], - "traits": [ - 2, - "Remote", - "Cold" - ], - "requires": "Siren, Wastrel or Stalker", - "requires_expr": [ - "siren", - "wastrel", - "stalker" - ] - }, - "Recluse": { - "time": 225, - "res": 25, - "stat": [ - [ - 1, - "p" + }, + "Siren": { + "time": 55, + "res": 20, + "stat": [ + [ + 1, + "pm" + ] + ], + "skills": [ + [ + 9, + "Seduction", + "Etiquette", + "Persuasion", + "Soothing Platitudes", + "Gossip-wise", + "Fugue Of Discord", + "Litany Of Fools" + ] + ], + "traits": [ + 2, + "Charismatic", + "Femme Fatale/Homme Fatale" + ], + "requires": "Assassin, Deceiver or Liar", + "requires_expr": [ + "assassin", + "deceiver", + "liar" ] - ], - "skills": [ - [ + }, + "Eremite": { + "time": 150, + "res": 15, + "stat": [ + [ + 1, + "m" + ] + ], + "skills": [ + [ + 12, + "Philosophy", + "Ugly Truth", + "Obscure History", + "Symbology", + "Strategy", + "Elf-wise", + "Orc-wise", + "Dwarf-wise", + "Man-wise", + "Paean To The Dark Fire" + ] + ], + "traits": [ 2, - "Ancient History", - "Dwarf-wise", - "Elven Politics-wise", - "Cut Of The Quickened Mind" + "Remote", + "Cold" ], - [ - 5, - "General" + "requires": "Siren, Wastrel or Stalker", + "requires_expr": [ + "siren", + "wastrel", + "stalker" ] - ], - "traits": [ - 1, - "Vengeful" - ], - "requires": "Eremite or any three Dark Elf lifepaths", - "requires_expr": [ - "+or", - [ - "eremite" + }, + "Recluse": { + "time": 225, + "res": 25, + "stat": [ + [ + 1, + "p" + ] + ], + "skills": [ + [ + 2, + "Ancient History", + "Dwarf-wise", + "Elven Politics-wise", + "Cut Of The Quickened Mind" + ], + [ + 5, + "General" + ] + ], + "traits": [ + 1, + "Vengeful" ], - [ - "+has_n_lifepaths_in", - 3, - "path of spite subsetting:griever", - "path of spite subsetting:wastrel", - "path of spite subsetting:thief", - "path of spite subsetting:assassin", - "path of spite subsetting:stalker", - "path of spite subsetting:deceiver", - "path of spite subsetting:liar", - "path of spite subsetting:siren" + "requires": "Eremite or any three Dark Elf lifepaths", + "requires_expr": [ + "+or", + [ + "eremite" + ], + [ + "+has_n_lifepaths_in", + 3, + "path of spite subsetting:griever", + "path of spite subsetting:wastrel", + "path of spite subsetting:thief", + "path of spite subsetting:assassin", + "path of spite subsetting:stalker", + "path of spite subsetting:deceiver", + "path of spite subsetting:liar", + "path of spite subsetting:siren" + ] ] - ] + } } } -} \ No newline at end of file +} diff --git a/src/data/troll/lifepaths.json b/src/data/troll/lifepaths.json index 04adca4..1ff511c 100644 --- a/src/data/troll/lifepaths.json +++ b/src/data/troll/lifepaths.json @@ -1,584 +1,587 @@ { - "Wild Setting": { - "Born Wild": { - "time": 5, - "res": 2, - "skills": [ - [ - 2, - "General" - ] - ], - "traits": [ - 1 - ], - "leads": [ - "Pit" - ], - "key_leads": [ - "Pit Setting" - ] - }, - "Bogey": { - "time": 7, - "res": 1, - "stat": [ - [ - 1, - "p" - ] - ], - "skills": [ - [ - 3, - "Brawling", - "Forest-wise", - "Stealthy" - ] - ], - "traits": [ - 2 - ], - "leads": [ - "Cave" - ], - "key_leads": [ - "Cavedweller Setting" - ] - }, - "Bridgehaunt": { - "time": 10, - "res": 2, - "stat": [ - [ - 1, - "p" - ] - ], - "skills": [ - [ - 2, - "Bridge-wise", - "Intimidation" - ] - ], - "traits": [ - 1, - "Stubborn" - ] - }, - "Manhunter": { - "time": 7, - "res": 2, - "stat": [ - [ - 1, - "pm" - ] - ], - "skills": [ - [ - 2, - "Man-wise", - "Village-wise" - ] - ], - "traits": [ - 1 - ], - "leads": [ - "Pit" - ], - "key_leads": [ - "Pit Setting" - ] - }, - "Forlorn": { - "time": 13, - "res": 1, - "stat": [ - [ - 1, - "m" - ] - ], - "skills": [ - [ - 1, - "General" - ] - ], - "traits": [ - 2, - "Solitary", - "Addled", - "Slow" - ] - }, - "Brute": { - "time": 15, - "res": 2, - "stat": [ - [ - 2, - "p" - ] - ], - "skills": [ - [ - 2, - "Intimidation", - "Brawling" - ] - ], - "traits": [ - 1, - "Brute" - ], - "requires": "Bridgehaunt, Mine Haunt, Manhunter, Dwarf Hunter, Battering Ram or Mattock", - "requires_expr": [ - "bridgehaunt", - "mine haunt", - "manhunter", - "dwarf hunter", - "battering ram", - "mattock" - ], - "leads": [ - "Pit" - ], - "key_leads": [ - "Pit Setting" - ] - }, - "Brood Mother": { - "time": 33, - "res": 10, - "stat": [ - [ - 1, - "m" + "stock": "troll", + "settings": { + "Wild Setting": { + "Born Wild": { + "time": 5, + "res": 2, + "skills": [ + [ + 2, + "General" + ] ], - [ - 1, - "p" - ] - ], - "skills": [ - [ - 3, - "Nursing", - "Ugly Truth" - ] - ], - "traits": [ - 2, - "Misshapen", - "Grotesque", - "Witch Flesh" - ], - "requires": "Brute, Dread Stone or Bellower", - "requires_expr": [ - "brute", - "dread stone", - "bellower" - ], - "leads": [ - "Pit", - "Cave" - ], - "key_leads": [ - "Pit Setting", - "Cavedweller Setting" - ] - }, - "Bull": { - "time": 45, - "res": 5, - "stat": [ - [ - 1, - "m" + "traits": [ + 1 ], - [ - 1, - "p" - ] - ], - "skills": [ - [ - 3, - "Torture", - "Extortion" - ] - ], - "traits": [ - 2, - "Boor" - ], - "requires": "Brute or Ironshield", - "requires_expr": [ - "brute", - "ironshield" - ], - "leads": [ - "Pit" - ], - "key_leads": [ - "Pit Setting" - ] - } - }, - "Cavedweller Setting": { - "Born To Dark Caves": { - "time": 5, - "res": 2, - "skills": [ - [ - 2, - "General" - ] - ], - "traits": [ - 2 - ], - "leads": [ - "Pit" - ], - "key_leads": [ - "Pit Setting" - ] - }, - "Dweller": { - "time": 4, - "res": 1, - "stat": [ - [ + "leads": [ + "Pit" + ], + "key_leads": [ + "Pit Setting" + ] + }, + "Bogey": { + "time": 7, + "res": 1, + "stat": [ + [ + 1, + "p" + ] + ], + "skills": [ + [ + 3, + "Brawling", + "Forest-wise", + "Stealthy" + ] + ], + "traits": [ + 2 + ], + "leads": [ + "Cave" + ], + "key_leads": [ + "Cavedweller Setting" + ] + }, + "Bridgehaunt": { + "time": 10, + "res": 2, + "stat": [ + [ + 1, + "p" + ] + ], + "skills": [ + [ + 2, + "Bridge-wise", + "Intimidation" + ] + ], + "traits": [ 1, - "p" - ] - ], - "skills": [ - [ + "Stubborn" + ] + }, + "Manhunter": { + "time": 7, + "res": 2, + "stat": [ + [ + 1, + "pm" + ] + ], + "skills": [ + [ + 2, + "Man-wise", + "Village-wise" + ] + ], + "traits": [ + 1 + ], + "leads": [ + "Pit" + ], + "key_leads": [ + "Pit Setting" + ] + }, + "Forlorn": { + "time": 13, + "res": 1, + "stat": [ + [ + 1, + "m" + ] + ], + "skills": [ + [ + 1, + "General" + ] + ], + "traits": [ 2, - "Climbing", - "Rock-wise", - "Brawling" - ] - ], - "traits": [ - 2 - ], - "leads": [ - "Wild" - ], - "key_leads": [ - "Wild Setting" - ] - }, - "Mine Haunt": { - "time": 12, - "res": 1, - "stat": [ - [ + "Solitary", + "Addled", + "Slow" + ] + }, + "Brute": { + "time": 15, + "res": 2, + "stat": [ + [ + 2, + "p" + ] + ], + "skills": [ + [ + 2, + "Intimidation", + "Brawling" + ] + ], + "traits": [ 1, - "pm" - ] - ], - "skills": [ - [ + "Brute" + ], + "requires": "Bridgehaunt, Mine Haunt, Manhunter, Dwarf Hunter, Battering Ram or Mattock", + "requires_expr": [ + "bridgehaunt", + "mine haunt", + "manhunter", + "dwarf hunter", + "battering ram", + "mattock" + ], + "leads": [ + "Pit" + ], + "key_leads": [ + "Pit Setting" + ] + }, + "Brood Mother": { + "time": 33, + "res": 10, + "stat": [ + [ + 1, + "m" + ], + [ + 1, + "p" + ] + ], + "skills": [ + [ + 3, + "Nursing", + "Ugly Truth" + ] + ], + "traits": [ 2, - "Mine-wise", - "Brawling" - ] - ], - "traits": [ - 1 - ], - "leads": [ - "Pit", - "Wild" - ], - "key_leads": [ - "Pit Setting", - "Wild Setting" - ] - }, - "Dwarf Hunter": { - "time": 6, - "res": 3, - "stat": [ - [ - 1, - "p" + "Misshapen", + "Grotesque", + "Witch Flesh" ], - [ - 1, - "m" - ] - ], - "skills": [ - [ - 3, - "Dwarf-wise", - "Throwing" - ] - ], - "traits": [ - 1, - "Stubborn" - ], - "leads": [ - "Pit" - ], - "key_leads": [ - "Pit Setting" - ] - }, - "Dread Stone": { - "time": 30, - "res": 4, - "stat": [ - [ + "requires": "Brute, Dread Stone or Bellower", + "requires_expr": [ + "brute", + "dread stone", + "bellower" + ], + "leads": [ + "Pit", + "Cave" + ], + "key_leads": [ + "Pit Setting", + "Cavedweller Setting" + ] + }, + "Bull": { + "time": 45, + "res": 5, + "stat": [ + [ + 1, + "m" + ], + [ + 1, + "p" + ] + ], + "skills": [ + [ + 3, + "Torture", + "Extortion" + ] + ], + "traits": [ 2, - "p" - ] - ], - "skills": [ - [ - 3, - "Camouflage", - "Stealthy" - ] - ], - "traits": [ - 3 - ], - "requires": "Mine Haunt or Dwarf Hunter", - "requires_expr": [ - "mine haunt", - "dwarf hunter" - ] - } - }, - "Pit Setting": { - "Born To The Pit": { - "time": 4, - "res": 1, - "skills": [ - [ - 1, - "General" + "Boor" + ], + "requires": "Brute or Ironshield", + "requires_expr": [ + "brute", + "ironshield" + ], + "leads": [ + "Pit" + ], + "key_leads": [ + "Pit Setting" ] - ], - "traits": [ - 2, - "Vile Language" - ], - "leads": [ - "Pit", - "Cave" - ], - "key_leads": [ - "Pit Setting", - "Cavedweller Setting" - ] + } }, - "Tortured": { - "time": 3, - "skills": [ - [ + "Cavedweller Setting": { + "Born To Dark Caves": { + "time": 5, + "res": 2, + "skills": [ + [ + 2, + "General" + ] + ], + "traits": [ + 2 + ], + "leads": [ + "Pit" + ], + "key_leads": [ + "Pit Setting" + ] + }, + "Dweller": { + "time": 4, + "res": 1, + "stat": [ + [ + 1, + "p" + ] + ], + "skills": [ + [ + 2, + "Climbing", + "Rock-wise", + "Brawling" + ] + ], + "traits": [ + 2 + ], + "leads": [ + "Wild" + ], + "key_leads": [ + "Wild Setting" + ] + }, + "Mine Haunt": { + "time": 12, + "res": 1, + "stat": [ + [ + 1, + "pm" + ] + ], + "skills": [ + [ + 2, + "Mine-wise", + "Brawling" + ] + ], + "traits": [ 1 - ] - ], - "traits": [ - 3, - "Tasting The Lash", - "Numb" - ] - }, - "Ox": { - "time": 9, - "res": 1, - "stat": [ - [ + ], + "leads": [ + "Pit", + "Wild" + ], + "key_leads": [ + "Pit Setting", + "Wild Setting" + ] + }, + "Dwarf Hunter": { + "time": 6, + "res": 3, + "stat": [ + [ + 1, + "p" + ], + [ + 1, + "m" + ] + ], + "skills": [ + [ + 3, + "Dwarf-wise", + "Throwing" + ] + ], + "traits": [ 1, - "p" - ] - ], - "skills": [ - [ - 2, - "Ditch Digging", - "Hauling", - "Mining" + "Stubborn" + ], + "leads": [ + "Pit" + ], + "key_leads": [ + "Pit Setting" + ] + }, + "Dread Stone": { + "time": 30, + "res": 4, + "stat": [ + [ + 2, + "p" + ] + ], + "skills": [ + [ + 3, + "Camouflage", + "Stealthy" + ] + ], + "traits": [ + 3 + ], + "requires": "Mine Haunt or Dwarf Hunter", + "requires_expr": [ + "mine haunt", + "dwarf hunter" ] - ], - "traits": [ - 1, - "Back-breaking Labor", - "Tasting The Lash" - ] + } }, - "Battering Ram": { - "time": 6, - "res": 1, - "stat": [ - [ - 1, - "p" - ] - ], - "skills": [ - [ + "Pit Setting": { + "Born To The Pit": { + "time": 4, + "res": 1, + "skills": [ + [ + 1, + "General" + ] + ], + "traits": [ 2, - "Brawling", - "Throwing" - ] - ], - "traits": [ - 1, - "Hardened" - ], - "leads": [ - "Wild" - ], - "key_leads": [ - "Wild Setting" - ] - }, - "Mattock": { - "time": 7, - "res": 7, - "stat": [ - [ - 1, - "p" - ] - ], - "skills": [ - [ + "Vile Language" + ], + "leads": [ + "Pit", + "Cave" + ], + "key_leads": [ + "Pit Setting", + "Cavedweller Setting" + ] + }, + "Tortured": { + "time": 3, + "skills": [ + [ + 1 + ] + ], + "traits": [ 3, - "Hammer", - "Formation Fighting" - ] - ], - "traits": [ - 1, - "Brutal" - ], - "requires": "Ox, Battering Ram, Dwarf Hunter, Manhunter or Brute", - "requires_expr": [ - "ox", - "battering ram", - "dwarf hunter", - "manhunter", - "brute" - ], - "leads": [ - "Wild" - ], - "key_leads": [ - "Wild Setting" - ] - }, - "Ironshield": { - "time": 8, - "res": 6, - "stat": [ - [ - 1, - "pm" - ] - ], - "skills": [ - [ - 1, - "Shield Training", - "Intimidation" - ] - ], - "traits": [ - 1, - "Unflinching" - ], - "requires": "Mattock or Brute", - "requires_expr": [ - "mattock", - "brute" - ], - "leads": [ - "Wild" - ], - "key_leads": [ - "Wild Setting" - ] - }, - "Bellower": { - "time": 16, - "res": 4, - "stat": [ - [ + "Tasting The Lash", + "Numb" + ] + }, + "Ox": { + "time": 9, + "res": 1, + "stat": [ + [ + 1, + "p" + ] + ], + "skills": [ + [ + 2, + "Ditch Digging", + "Hauling", + "Mining" + ] + ], + "traits": [ 1, - "m" + "Back-breaking Labor", + "Tasting The Lash" + ] + }, + "Battering Ram": { + "time": 6, + "res": 1, + "stat": [ + [ + 1, + "p" + ] + ], + "skills": [ + [ + 2, + "Brawling", + "Throwing" + ] ], - [ + "traits": [ 1, - "p" - ] - ], - "skills": [ - [ - 3, - "Torture", - "Lash" - ] - ], - "traits": [ - 1, - "Where There's A Whip, There's A Way", - "Tough As Nails", - "Bellowing" - ], - "requires": "Bull or Ironshield", - "requires_expr": [ - "bull", - "ironshield" - ] - }, - "Warlord": { - "time": 56, - "res": 10, - "stat": [ - [ + "Hardened" + ], + "leads": [ + "Wild" + ], + "key_leads": [ + "Wild Setting" + ] + }, + "Mattock": { + "time": 7, + "res": 7, + "stat": [ + [ + 1, + "p" + ] + ], + "skills": [ + [ + 3, + "Hammer", + "Formation Fighting" + ] + ], + "traits": [ 1, - "m" + "Brutal" + ], + "requires": "Ox, Battering Ram, Dwarf Hunter, Manhunter or Brute", + "requires_expr": [ + "ox", + "battering ram", + "dwarf hunter", + "manhunter", + "brute" ], - [ + "leads": [ + "Wild" + ], + "key_leads": [ + "Wild Setting" + ] + }, + "Ironshield": { + "time": 8, + "res": 6, + "stat": [ + [ + 1, + "pm" + ] + ], + "skills": [ + [ + 1, + "Shield Training", + "Intimidation" + ] + ], + "traits": [ 1, - "p" - ] - ], - "skills": [ - [ - 3, - "Command", - "Strategy" + "Unflinching" ], - [ + "requires": "Mattock or Brute", + "requires_expr": [ + "mattock", + "brute" + ], + "leads": [ + "Wild" + ], + "key_leads": [ + "Wild Setting" + ] + }, + "Bellower": { + "time": 16, + "res": 4, + "stat": [ + [ + 1, + "m" + ], + [ + 1, + "p" + ] + ], + "skills": [ + [ + 3, + "Torture", + "Lash" + ] + ], + "traits": [ 1, - "General" + "Where There's A Whip, There's A Way", + "Tough As Nails", + "Bellowing" + ], + "requires": "Bull or Ironshield", + "requires_expr": [ + "bull", + "ironshield" + ] + }, + "Warlord": { + "time": 56, + "res": 10, + "stat": [ + [ + 1, + "m" + ], + [ + 1, + "p" + ] + ], + "skills": [ + [ + 3, + "Command", + "Strategy" + ], + [ + 1, + "General" + ] + ], + "traits": [ + 2, + "Insidious Cruelty", + "Wickedly Clever" + ], + "requires": "Bellower", + "requires_expr": [ + "bellower" ] - ], - "traits": [ - 2, - "Insidious Cruelty", - "Wickedly Clever" - ], - "requires": "Bellower", - "requires_expr": [ - "bellower" - ] + } } } } diff --git a/src/data/wizard/lifepaths.json b/src/data/wizard/lifepaths.json index ae36fcf..2fede98 100644 --- a/src/data/wizard/lifepaths.json +++ b/src/data/wizard/lifepaths.json @@ -1,1224 +1,1227 @@ { - "Special Gifted Lifepaths": { - "Gifted Child": { - "time": 9, - "res": 4, - "leads": [ - "Outcast", - "Court", - "Religious" - ], - "skills": [ - [ - 2, - "General" - ] - ], - "traits": [ - 1, - "Outsider", - "Gifted", - "Abused", - "Spirit Familiar" - ], - "key_leads": [ - "Outcast Subsetting", - "Noble Court Subsetting", - "Religious Subsetting" - ] - }, - "Apt Pupil": { - "time": 3, - "res": 8, - "leads": [ - "Outcast", - "Soldier", - "Servitude" - ], - "skills": [ - [ - 3, - "Obscure History", - "Ugly Truth", - "Intimidation" - ] - ], - "traits": [ - 1, - "Believer", - "Gifted", - "Tainted Legacy" - ], - "requires": "Must be character's second or third lifepath. It may not be taken twice.", - "requires_expr": [ - "+and", - [ - "+has_n_lifepaths_or_more", - 1 - ], - [ - "+has_n_lifepaths_or_less", - 2 - ] - ], - "key_leads": [ - "Outcast Subsetting", - "Professional Soldier Subsetting", - "Servitude And Captive Setting" - ] - } - }, - "Peasant Setting": { - "Speaker Of Names": { - "time": 7, - "res": 20, - "stat": [ - [ + "stock": "man", + "settings": { + "Special Gifted Lifepaths": { + "Gifted Child": { + "time": 9, + "res": 4, + "leads": [ + "Outcast", + "Court", + "Religious" + ], + "skills": [ + [ + 2, + "General" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Outcast", - "Village" - ], - "skills": [ - [ - 6, - "Spirit Binding", - "Circination", - "Paths-wise", - "Spirit-wise", - "Domain-wise" + "Outsider", + "Gifted", + "Abused", + "Spirit Familiar" + ], + "key_leads": [ + "Outcast Subsetting", + "Noble Court Subsetting", + "Religious Subsetting" ] - ], - "traits": [ - 2, - "Well Traveled", - "Brook No Fools", - "Fey Blood" - ], - "requires": "Augur, Crazy Witch, Neophyte Sorcerer or Elder", - "requires_expr": [ - "augur", - "crazy witch", - "neophyte sorcerer", - "junior student", - "wizard's apprentice", - "elder" - ], - "key_leads": [ - "Outcast Subsetting", - "Villager Setting" - ] - } - }, - "Villager Setting": { - "Wizard's Apprentice": { - "time": 7, - "res": 10, - "stat": [ - [ + }, + "Apt Pupil": { + "time": 3, + "res": 8, + "leads": [ + "Outcast", + "Soldier", + "Servitude" + ], + "skills": [ + [ + 3, + "Obscure History", + "Ugly Truth", + "Intimidation" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Peasant", - "City", - "Outcast", - "Servitude" - ], - "skills": [ - [ - 6, - "Read", - "Foraging", - "Symbology", - "Circination", - "Pig-wise", - "Bone Headed-wise" + "Believer", + "Gifted", + "Tainted Legacy" + ], + "requires": "Must be character's second or third lifepath. It may not be taken twice.", + "requires_expr": [ + "+and", + [ + "+has_n_lifepaths_or_more", + 1 + ], + [ + "+has_n_lifepaths_or_less", + 2 + ] + ], + "key_leads": [ + "Outcast Subsetting", + "Professional Soldier Subsetting", + "Servitude And Captive Setting" ] - ], - "traits": [ - 2, - "Always in the Way", - "Atravieso", - "Gifted", - "Assistant Pig-Keeper" - ], - "key_leads": [ - "Peasant Setting", - "City Dweller Setting", - "Outcast Subsetting", - "Servitude And Captive Setting" - ] + } }, - "Hedge Wizard": { - "time": 8, - "res": 24, - "stat": [ - [ - 1, - "p" + "Peasant Setting": { + "Speaker Of Names": { + "time": 7, + "res": 20, + "stat": [ + [ + 1, + "m" + ] ], - [ - 1, - "m" - ] - ], - "leads": [ - "Peasant", - "City", - "Outcast" - ], - "skills": [ - [ - 7, - "Sorcery", - "Enchanting", - "Alchemy", - "Obscure History", - "Pest-wise", - "Fool-wise" - ] - ], - "traits": [ - 2, - "Low Born", - "Impressive Hat", - "Never A Moment Of Peace" - ], - "requires": "Wizard's Apprentice, Neophyte Sorcerer, Apt Pupil or Junior Student. This character may not have the Mark of Privilege", - "requires_expr": [ - "+and", - [ - "wizard's apprentice", - "neophyte sorcerer", - "apt pupil", - "junior student" + "leads": [ + "Outcast", + "Village" ], - [ - "+not", + "skills": [ [ - "mark of privilege" + 6, + "Spirit Binding", + "Circination", + "Paths-wise", + "Spirit-wise", + "Domain-wise" ] + ], + "traits": [ + 2, + "Well Traveled", + "Brook No Fools", + "Fey Blood" + ], + "requires": "Augur, Crazy Witch, Neophyte Sorcerer or Elder", + "requires_expr": [ + "augur", + "crazy witch", + "neophyte sorcerer", + "junior student", + "wizard's apprentice", + "elder" + ], + "key_leads": [ + "Outcast Subsetting", + "Villager Setting" ] - ], - "key_leads": [ - "Peasant Setting", - "City Dweller Setting", - "Outcast Subsetting" - ] - } - }, - "City Dweller Setting": { - "Evangelist": { - "time": 3, - "res": 6, - "stat": [ - [ - 1, - "pm" - ] - ], - "leads": [ - "Outcast", - "Court", - "Religious" - ], - "skills": [ - [ - 5, - "Empyrealia", - "Demonology", - "Oratory", - "Cultist-wise" - ] - ], - "traits": [ - 2, - "Believer", - "Fiery" - ], - "requires": "Dilettante or any summoner or religious lifepath", - "requires_expr": [ - "dilettante", - "religious subsetting:castrati", - "religious subsetting:pardoner", - "religious subsetting:zealous convert", - "religious subsetting:military order", - "religious subsetting:grave digger", - "religious subsetting:porter", - "religious subsetting:notary", - "religious subsetting:custodian", - "religious subsetting:interpreter", - "religious subsetting:archivist", - "religious subsetting:itinerant monk", - "religious subsetting:cloistered monk/nun", - "religious subsetting:temple acolyte", - "religious subsetting:priest", - "religious subsetting:exorcist", - "religious subsetting:inquisitor", - "religious subsetting:theologian", - "religious subsetting:archpriest", - "religious subsetting:canon", - "religious subsetting:abbot/abbess", - "religious subsetting:bishop", - "mad summoner", - "crazy witch", - "weather witch", - "court summoner" - ], - "key_leads": [ - "Outcast Subsetting", - "Noble Court Subsetting", - "Religious Subsetting" - ] - } - }, - "Noble Court Subsetting": { - "Court Enchanter": { - "time": 8, - "res": 20, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Outcast", - "City" - ], - "skills": [ - [ - 5, - "Etiquette", - "Astrology", - "Alchemy", - "Enchanting", - "Excuses-wise" - ] - ], - "traits": [ - 2, - "Late", - "Harried" - ], - "requires": "Senior Student, Neophyte Sorcerer, Apt Pupil or Wizard's Apprentice", - "requires_expr": [ - "senior student", - "junior student", - "neophyte sorcerer", - "apt pupil", - "wizard's apprentice" - ], - "key_leads": [ - "Outcast Subsetting", - "City Dweller Setting" - ] + } }, - "Court Summoner": { - "time": 8, - "res": 30, - "stat": [ - [ - 1, - "pm" - ] - ], - "leads": [ - "Outcast", - "Peasant", - "Village" - ], - "skills": [ - [ - 6, - "Etiquette", - "Astrology", - "Summoning", - "Circination", - "Bargaining", - "Inane Request-wise", - "Promise-wise" - ] - ], - "traits": [ - 2, - "Dismissive", - "Polite", - "Arrogant", - "Disgruntled", - "Faust" - ], - "requires": "Senior Student, Mad Summoner, Apt Pupil or Wizard's Apprentice", - "requires_expr": [ - "senior student", - "mad summoner", - "apt pupil", - "wizard's apprentice" - ], - "key_leads": [ - "Outcast Subsetting", - "Peasant Setting", - "Villager Setting" - ] - } - }, - "Outcast Subsetting": { - "Demented Inventor": { - "time": 7, - "res": 15, - "stat": [ - [ - 1, - "m" + "Villager Setting": { + "Wizard's Apprentice": { + "time": 7, + "res": 10, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Peasant", + "City", + "Outcast", + "Servitude" + ], + "skills": [ + [ + 6, + "Read", + "Foraging", + "Symbology", + "Circination", + "Pig-wise", + "Bone Headed-wise" + ] + ], + "traits": [ + 2, + "Always in the Way", + "Atravieso", + "Gifted", + "Assistant Pig-Keeper" + ], + "key_leads": [ + "Peasant Setting", + "City Dweller Setting", + "Outcast Subsetting", + "Servitude And Captive Setting" ] - ], - "leads": [ - "Peasant", - "Village" - ], - "skills": [ - [ - 6, - "Mad Invention-wise", - "Mending", - "Enchanting", - "Blacksmith", - "Whitesmith" + }, + "Hedge Wizard": { + "time": 8, + "res": 24, + "stat": [ + [ + 1, + "p" + ], + [ + 1, + "m" + ] + ], + "leads": [ + "Peasant", + "City", + "Outcast" + ], + "skills": [ + [ + 7, + "Sorcery", + "Enchanting", + "Alchemy", + "Obscure History", + "Pest-wise", + "Fool-wise" + ] + ], + "traits": [ + 2, + "Low Born", + "Impressive Hat", + "Never A Moment Of Peace" + ], + "requires": "Wizard's Apprentice, Neophyte Sorcerer, Apt Pupil or Junior Student. This character may not have the Mark of Privilege", + "requires_expr": [ + "+and", + [ + "wizard's apprentice", + "neophyte sorcerer", + "apt pupil", + "junior student" + ], + [ + "+not", + [ + "mark of privilege" + ] + ] + ], + "key_leads": [ + "Peasant Setting", + "City Dweller Setting", + "Outcast Subsetting" ] - ], - "traits": [ - 2, - "Unhinged", - "Tinker" - ], - "requires": "Rogue Wizard, Apt Pupil or Wizard's Apprentice", - "requires_expr": [ - "rogue wizard", - "apt pupil", - "wizard's apprentice" - ], - "key_leads": [ - "Peasant Setting", - "Villager Setting" - ] + } }, - "Evil Necromancer": { - "time": 10, - "res": 20, - "stat": [ - [ - 1, - "m" + "City Dweller Setting": { + "Evangelist": { + "time": 3, + "res": 6, + "stat": [ + [ + 1, + "pm" + ] ], - [ - 1, - "p" - ] - ], - "skills": [ - [ - 4, - "Death Art", - "Anatomy", - "Graveyard-wise" - ] - ], - "traits": [ - 2, - "Corrupted", - "Evil" - ], - "requires": "Coroner, Death Cultist, Cultist or Apt Pupil", - "requires_expr": [ - "coroner", - "death cultist", - "cultist", - "apt pupil" - ] - } - }, - "College of Magic Setting": { - "Supplicant": { - "time": 1, - "res": 3, - "leads": [ - "Peasant", - "Servitude", - "Soldier" - ], - "skills": [ - [ + "leads": [ + "Outcast", + "Court", + "Religious" + ], + "skills": [ + [ + 5, + "Empyrealia", + "Demonology", + "Oratory", + "Cultist-wise" + ] + ], + "traits": [ 2, - "Animal Husbandry", - "Firebuilding" - ] - ], - "traits": [ - 2, - "Broken In", - "Gifted", - "Second Sight", - "Fey Blood" - ], - "requires": "Must be second lifepath. May not be taken twice", - "requires_expr": [ - "+and", - [ - "+has_n_lifepaths_or_more", - 1 - ], - [ - "+has_n_lifepaths_or_less", - 1 - ], - [ - "born peasant", - "village born", - "city born", - "born noble", - "son of a gun" + "Believer", + "Fiery" + ], + "requires": "Dilettante or any summoner or religious lifepath", + "requires_expr": [ + "dilettante", + "religious subsetting:castrati", + "religious subsetting:pardoner", + "religious subsetting:zealous convert", + "religious subsetting:military order", + "religious subsetting:grave digger", + "religious subsetting:porter", + "religious subsetting:notary", + "religious subsetting:custodian", + "religious subsetting:interpreter", + "religious subsetting:archivist", + "religious subsetting:itinerant monk", + "religious subsetting:cloistered monk/nun", + "religious subsetting:temple acolyte", + "religious subsetting:priest", + "religious subsetting:exorcist", + "religious subsetting:inquisitor", + "religious subsetting:theologian", + "religious subsetting:archpriest", + "religious subsetting:canon", + "religious subsetting:abbot/abbess", + "religious subsetting:bishop", + "mad summoner", + "crazy witch", + "weather witch", + "court summoner" + ], + "key_leads": [ + "Outcast Subsetting", + "Noble Court Subsetting", + "Religious Subsetting" ] - ], - "key_leads": [ - "Peasant Setting", - "Servitude And Captive Setting", - "Professional Soldier Subsetting" - ] + } }, - "Junior Student": { - "time": 2, - "res": 5, - "stat": [ - [ - 1, - "p" + "Noble Court Subsetting": { + "Court Enchanter": { + "time": 8, + "res": 20, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Outcast", + "City" + ], + "skills": [ + [ + 5, + "Etiquette", + "Astrology", + "Alchemy", + "Enchanting", + "Excuses-wise" + ] + ], + "traits": [ + 2, + "Late", + "Harried" + ], + "requires": "Senior Student, Neophyte Sorcerer, Apt Pupil or Wizard's Apprentice", + "requires_expr": [ + "senior student", + "junior student", + "neophyte sorcerer", + "apt pupil", + "wizard's apprentice" + ], + "key_leads": [ + "Outcast Subsetting", + "City Dweller Setting" ] - ], - "leads": [ - "City", - "Court", - "Outcast" - ], - "skills": [ - [ - 8, - "Read", - "Write", - "Ancient History", - "Circination", - "Illuminations", - "Astrology", - "Symbology" + }, + "Court Summoner": { + "time": 8, + "res": 30, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Outcast", + "Peasant", + "Village" + ], + "skills": [ + [ + 6, + "Etiquette", + "Astrology", + "Summoning", + "Circination", + "Bargaining", + "Inane Request-wise", + "Promise-wise" + ] + ], + "traits": [ + 2, + "Dismissive", + "Polite", + "Arrogant", + "Disgruntled", + "Faust" + ], + "requires": "Senior Student, Mad Summoner, Apt Pupil or Wizard's Apprentice", + "requires_expr": [ + "senior student", + "mad summoner", + "apt pupil", + "wizard's apprentice" + ], + "key_leads": [ + "Outcast Subsetting", + "Peasant Setting", + "Villager Setting" ] - ], - "traits": [ - 1, - "Hazed" - ], - "requires": "Supplicant, Arcane Devotee, Apt Pupil or Neophyte Sorcerer", - "restrict": "May not be taken twice.", - "requires_expr": [ - "supplicant", - "arcane devotee", - "apt pupil", - "neophyte sorcerer", - "wizard's apprentice" - ], - "key_leads": [ - "City Dweller Setting", - "Noble Court Subsetting", - "Outcast Subsetting" - ] + } }, - "Senior Student": { - "time": 2, - "res": 10, - "stat": [ - [ - 1, - "m" + "Outcast Subsetting": { + "Demented Inventor": { + "time": 7, + "res": 15, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Peasant", + "Village" + ], + "skills": [ + [ + 6, + "Mad Invention-wise", + "Mending", + "Enchanting", + "Blacksmith", + "Whitesmith" + ] + ], + "traits": [ + 2, + "Unhinged", + "Tinker" + ], + "requires": "Rogue Wizard, Apt Pupil or Wizard's Apprentice", + "requires_expr": [ + "rogue wizard", + "apt pupil", + "wizard's apprentice" + ], + "key_leads": [ + "Peasant Setting", + "Villager Setting" ] - ], - "leads": [ - "City", - "Court", - "Outcast" - ], - "skills": [ - [ - 7, - "Calligraphy", - "Rhetoric", - "Aura Reading", - "Empyrealia", - "Demonology", - "Doctrine", - "School of Magic-wise", - "Junior Student-wise" + }, + "Evil Necromancer": { + "time": 10, + "res": 20, + "stat": [ + [ + 1, + "m" + ], + [ + 1, + "p" + ] + ], + "skills": [ + [ + 4, + "Death Art", + "Anatomy", + "Graveyard-wise" + ] + ], + "traits": [ + 2, + "Corrupted", + "Evil" + ], + "requires": "Coroner, Death Cultist, Cultist or Apt Pupil", + "requires_expr": [ + "coroner", + "death cultist", + "cultist", + "apt pupil" ] - ], - "traits": [ - 2, - "Graduate", - "Bully" - ], - "requires": "Junior Student or Sorcerer. May not be taken twice", - "requires_expr": [ - "junior student", - "sorcerer" - ], - "key_leads": [ - "City Dweller Setting", - "Noble Court Subsetting", - "Outcast Subsetting" - ] + } }, - "Adjunct": { - "time": 6, - "res": 10, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "City", - "Outcast", - "Religious" - ], - "skills": [ - [ - 6, - "Research", - "Folklore", - "Alchemy", - "Taxidermy", - "Library-wise" + "College of Magic Setting": { + "Supplicant": { + "time": 1, + "res": 3, + "leads": [ + "Peasant", + "Servitude", + "Soldier" + ], + "skills": [ + [ + 2, + "Animal Husbandry", + "Firebuilding" + ] + ], + "traits": [ + 2, + "Broken In", + "Gifted", + "Second Sight", + "Fey Blood" + ], + "requires": "Must be second lifepath. May not be taken twice", + "requires_expr": [ + "+and", + [ + "+has_n_lifepaths_or_more", + 1 + ], + [ + "+has_n_lifepaths_or_less", + 1 + ], + [ + "born peasant", + "village born", + "city born", + "born noble", + "son of a gun" + ] + ], + "key_leads": [ + "Peasant Setting", + "Servitude And Captive Setting", + "Professional Soldier Subsetting" ] - ], - "traits": [ - 1, - "Overworked", - "Familiar Face" - ], - "requires": "Senior Student", - "requires_expr": [ - "senior student" - ], - "key_leads": [ - "City Dweller Setting", - "Outcast Subsetting", - "Religious Subsetting" - ] - }, - "Master Sorcerer": { - "time": 8, - "res": 30, - "stat": [ - [ - 1, - "p" + }, + "Junior Student": { + "time": 2, + "res": 5, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "City", + "Court", + "Outcast" + ], + "skills": [ + [ + 8, + "Read", + "Write", + "Ancient History", + "Circination", + "Illuminations", + "Astrology", + "Symbology" + ] ], - [ + "traits": [ 1, - "m" + "Hazed" + ], + "requires": "Supplicant, Arcane Devotee, Apt Pupil or Neophyte Sorcerer", + "restrict": "May not be taken twice.", + "requires_expr": [ + "supplicant", + "arcane devotee", + "apt pupil", + "neophyte sorcerer", + "wizard's apprentice" + ], + "key_leads": [ + "City Dweller Setting", + "Noble Court Subsetting", + "Outcast Subsetting" ] - ], - "leads": [ - "City", - "Court", - "Outcast", - "Seafaring" - ], - "skills": [ - [ - 5, - "Sorcery", - "Instructor", - "Facet-wise", - "Aura-wise" + }, + "Senior Student": { + "time": 2, + "res": 10, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "City", + "Court", + "Outcast" + ], + "skills": [ + [ + 7, + "Calligraphy", + "Rhetoric", + "Aura Reading", + "Empyrealia", + "Demonology", + "Doctrine", + "School of Magic-wise", + "Junior Student-wise" + ] + ], + "traits": [ + 2, + "Graduate", + "Bully" + ], + "requires": "Junior Student or Sorcerer. May not be taken twice", + "requires_expr": [ + "junior student", + "sorcerer" + ], + "key_leads": [ + "City Dweller Setting", + "Noble Court Subsetting", + "Outcast Subsetting" ] - ], - "traits": [ - 1, - "Versatile", - "Sixth Sense" - ], - "requires": "Adjunct or Court Sorcerer", - "requires_expr": [ - "adjunct", - "court sorcerer" - ], - "key_leads": [ - "City Dweller Setting", - "Noble Court Subsetting", - "Outcast Subsetting", - "Seafaring Setting" - ] - }, - "Master Enchanter": { - "time": 8, - "res": 20, - "stat": [ - [ - 1, - "p" + }, + "Adjunct": { + "time": 6, + "res": 10, + "stat": [ + [ + 1, + "m" + ] ], - [ + "leads": [ + "City", + "Outcast", + "Religious" + ], + "skills": [ + [ + 6, + "Research", + "Folklore", + "Alchemy", + "Taxidermy", + "Library-wise" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "City", - "Court", - "Outcast" - ], - "skills": [ - [ - 6, - "Enchanting", - "Instructor", - "Carving", - "Etching", - "Herbalism", - "Jeweler", - "Vessel-wise" + "Overworked", + "Familiar Face" + ], + "requires": "Senior Student", + "requires_expr": [ + "senior student" + ], + "key_leads": [ + "City Dweller Setting", + "Outcast Subsetting", + "Religious Subsetting" ] - ], - "traits": [ - 1, - "Nimble", - "Practiced Precision" - ], - "requires": "Adjunct or Court Enchanter", - "requires_expr": [ - "adjunct", - "court enchanter" - ], - "key_leads": [ - "City Dweller Setting", - "Noble Court Subsetting", - "Outcast Subsetting" - ] - }, - "Master Summoner": { - "time": 8, - "res": 20, - "stat": [ - [ - 1, - "p" + }, + "Master Sorcerer": { + "time": 8, + "res": 30, + "stat": [ + [ + 1, + "p" + ], + [ + 1, + "m" + ] ], - [ + "leads": [ + "City", + "Court", + "Outcast", + "Seafaring" + ], + "skills": [ + [ + 5, + "Sorcery", + "Instructor", + "Facet-wise", + "Aura-wise" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "City", - "Court", - "Outcast" - ], - "skills": [ - [ - 8, - "Summoning", - "Instructor", - "Bargaining", - "Ugly Truth", - "Soothing Platitudes", - "Rule of Law", - "Philosophy", - "Scheme-wise" + "Versatile", + "Sixth Sense" + ], + "requires": "Adjunct or Court Sorcerer", + "requires_expr": [ + "adjunct", + "court sorcerer" + ], + "key_leads": [ + "City Dweller Setting", + "Noble Court Subsetting", + "Outcast Subsetting", + "Seafaring Setting" ] - ], - "traits": [ - 1, - "Extrovert", - "Fearless", - "Obscure Aura" - ], - "requires": "Adjunct or Court Summoner", - "requires_expr": [ - "adjunct", - "court summoner" - ], - "key_leads": [ - "City Dweller Setting", - "Noble Court Subsetting", - "Outcast Subsetting" - ] - }, - "Researcher": { - "time": 10, - "res": 15, - "leads": [ - "Court", - "Outcast", - "Religious" - ], - "skills": [ - [ - 12, - "Research", - "Composition", - "Cartography", - "Cryptography", - "Doctrine", - "Apothecary", - "Ritual", - "Death Art", - "Foreign Languages", - "Dark Arts-wise", - "Elven Songs-wise", - "Orc Rituals-wise", - "Dwarven Art-wise" + }, + "Master Enchanter": { + "time": 8, + "res": 20, + "stat": [ + [ + 1, + "p" + ], + [ + 1, + "m" + ] + ], + "leads": [ + "City", + "Court", + "Outcast" + ], + "skills": [ + [ + 6, + "Enchanting", + "Instructor", + "Carving", + "Etching", + "Herbalism", + "Jeweler", + "Vessel-wise" + ] + ], + "traits": [ + 1, + "Nimble", + "Practiced Precision" + ], + "requires": "Adjunct or Court Enchanter", + "requires_expr": [ + "adjunct", + "court enchanter" + ], + "key_leads": [ + "City Dweller Setting", + "Noble Court Subsetting", + "Outcast Subsetting" ] - ], - "traits": [ - 2, - "Myopic", - "Bookworm", - "Speaker Of The Secret Language" - ], - "requires": "Adjunct or Scholar. May only be taken once", - "requires_expr": [ - "adjunct", - "scholar" - ], - "key_leads": [ - "Noble Court Subsetting", - "Outcast Subsetting", - "Religious Subsetting" - ] - }, - "Councillor": { - "time": 5, - "res": 40, - "stat": [ - [ + }, + "Master Summoner": { + "time": 8, + "res": 20, + "stat": [ + [ + 1, + "p" + ], + [ + 1, + "m" + ] + ], + "leads": [ + "City", + "Court", + "Outcast" + ], + "skills": [ + [ + 8, + "Summoning", + "Instructor", + "Bargaining", + "Ugly Truth", + "Soothing Platitudes", + "Rule of Law", + "Philosophy", + "Scheme-wise" + ] + ], + "traits": [ 1, - "m" + "Extrovert", + "Fearless", + "Obscure Aura" + ], + "requires": "Adjunct or Court Summoner", + "requires_expr": [ + "adjunct", + "court summoner" + ], + "key_leads": [ + "City Dweller Setting", + "Noble Court Subsetting", + "Outcast Subsetting" ] - ], - "leads": [ - "City", - "Court" - ], - "skills": [ - [ - 6, - "Administration", - "Rhetoric", - "Wine Tasting", - "Troubled Student-wise" + }, + "Researcher": { + "time": 10, + "res": 15, + "leads": [ + "Court", + "Outcast", + "Religious" + ], + "skills": [ + [ + 12, + "Research", + "Composition", + "Cartography", + "Cryptography", + "Doctrine", + "Apothecary", + "Ritual", + "Death Art", + "Foreign Languages", + "Dark Arts-wise", + "Elven Songs-wise", + "Orc Rituals-wise", + "Dwarven Art-wise" + ] + ], + "traits": [ + 2, + "Myopic", + "Bookworm", + "Speaker Of The Secret Language" + ], + "requires": "Adjunct or Scholar. May only be taken once", + "requires_expr": [ + "adjunct", + "scholar" + ], + "key_leads": [ + "Noble Court Subsetting", + "Outcast Subsetting", + "Religious Subsetting" ] - ], - "traits": [ - 1, - "Council Of Mages", - "Imperious Demeanor" - ], - "requires": "Master Sorcerer, Master Enchanter or Master Summoner", - "requires_expr": [ - "master sorcerer", - "master enchanter", - "master summoner" - ], - "key_leads": [ - "City Dweller Setting", - "Noble Court Subsetting" - ] - }, - "Headmaster": { - "time": 12, - "res": 50, - "leads": [ - "Court", - "Religious" - ], - "skills": [ - [ - 7, - "Oratory", - "Etiquette", - "Poetry", - "Strategy Games", - "Vintner", - "Dark Secret-wise" - ], - [ + }, + "Councillor": { + "time": 5, + "res": 40, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "City", + "Court" + ], + "skills": [ + [ + 6, + "Administration", + "Rhetoric", + "Wine Tasting", + "Troubled Student-wise" + ] + ], + "traits": [ 1, - "General" - ] - ], - "traits": [ - 3, - "Stoic", - "Master Of Mages", - "Domineering Presence" - ], - "requires": "Councillor", - "requires_expr": [ - "councillor" - ], - "key_leads": [ - "Noble Court Subsetting", - "Religious Subsetting" - ] - } - }, - "Death Cult Setting": { - "Harem Slave": { - "time": 3, - "res": 3, - "leads": [ - "Servitude", - "Outcast" - ], - "skills": [ - [ - 4, - "Creepy Priest-wise", - "Disgusting Necromancer-wise", - "Death Cult-wise", - "Escape Artist" + "Council Of Mages", + "Imperious Demeanor" + ], + "requires": "Master Sorcerer, Master Enchanter or Master Summoner", + "requires_expr": [ + "master sorcerer", + "master enchanter", + "master summoner" + ], + "key_leads": [ + "City Dweller Setting", + "Noble Court Subsetting" ] - ], - "traits": [ - 2, - "Numb" - ], - "key_leads": [ - "Servitude And Captive Setting", - "Outcast Subsetting" - ] - }, - "Death Cultist": { - "time": 2, - "res": 5, - "leads": [ - "Servitude", - "Outcast", - "Soldier" - ], - "skills": [ - [ + }, + "Headmaster": { + "time": 12, + "res": 50, + "leads": [ + "Court", + "Religious" + ], + "skills": [ + [ + 7, + "Oratory", + "Etiquette", + "Poetry", + "Strategy Games", + "Vintner", + "Dark Secret-wise" + ], + [ + 1, + "General" + ] + ], + "traits": [ 3, - "Death-wise", - "Riot-wise", - "Secret Cult Worship-wise" + "Stoic", + "Master Of Mages", + "Domineering Presence" + ], + "requires": "Councillor", + "requires_expr": [ + "councillor" + ], + "key_leads": [ + "Noble Court Subsetting", + "Religious Subsetting" ] - ], - "traits": [ - 2, - "Zealot", - "Suicidal" - ], - "key_leads": [ - "Servitude And Captive Setting", - "Outcast Subsetting", - "Professional Soldier Subsetting" - ] + } }, - "Grave Robber": { - "time": 3, - "res": 7, - "leads": [ - "Servitude", - "Outcast", - "Soldier" - ], - "skills": [ - [ - 4, - "Ditch Digging", - "Graveyard-wise", - "Night Watch-wise", - "Shovel-wise" + "Death Cult Setting": { + "Harem Slave": { + "time": 3, + "res": 3, + "leads": [ + "Servitude", + "Outcast" + ], + "skills": [ + [ + 4, + "Creepy Priest-wise", + "Disgusting Necromancer-wise", + "Death Cult-wise", + "Escape Artist" + ] + ], + "traits": [ + 2, + "Numb" + ], + "key_leads": [ + "Servitude And Captive Setting", + "Outcast Subsetting" ] - ], - "traits": [ - 2, - "Lunatic" - ], - "key_leads": [ - "Servitude And Captive Setting", - "Outcast Subsetting", - "Professional Soldier Subsetting" - ] - }, - "Spy": { - "time": 4, - "res": 10, - "stat": [ - [ - 1, - "m" + }, + "Death Cultist": { + "time": 2, + "res": 5, + "leads": [ + "Servitude", + "Outcast", + "Soldier" + ], + "skills": [ + [ + 3, + "Death-wise", + "Riot-wise", + "Secret Cult Worship-wise" + ] + ], + "traits": [ + 2, + "Zealot", + "Suicidal" + ], + "key_leads": [ + "Servitude And Captive Setting", + "Outcast Subsetting", + "Professional Soldier Subsetting" ] - ], - "leads": [ - "City", - "Outcast", - "Soldier" - ], - "skills": [ - [ - 7, - "Inconspicuous", - "Stealthy", - "Falsehood", - "Forgery", - "Observation", - "Righteous Priest-wise" + }, + "Grave Robber": { + "time": 3, + "res": 7, + "leads": [ + "Servitude", + "Outcast", + "Soldier" + ], + "skills": [ + [ + 4, + "Ditch Digging", + "Graveyard-wise", + "Night Watch-wise", + "Shovel-wise" + ] + ], + "traits": [ + 2, + "Lunatic" + ], + "key_leads": [ + "Servitude And Captive Setting", + "Outcast Subsetting", + "Professional Soldier Subsetting" ] - ], - "traits": [ - 1, - "Furtive", - "Manhunter" - ], - "requires": "Cultist or Insurrectionist", - "requires_expr": [ - "death cultist", - "insurrectionist", - "cultist" - ], - "key_leads": [ - "City Dweller Setting", - "Outcast Subsetting", - "Professional Soldier Subsetting" - ] - }, - "Factotum": { - "time": 7, - "res": 15, - "stat": [ - [ + }, + "Spy": { + "time": 4, + "res": 10, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "City", + "Outcast", + "Soldier" + ], + "skills": [ + [ + 7, + "Inconspicuous", + "Stealthy", + "Falsehood", + "Forgery", + "Observation", + "Righteous Priest-wise" + ] + ], + "traits": [ 1, - "pm" - ] - ], - "leads": [ - "City", - "Servitude", - "Outcast", - "Soldier" - ], - "skills": [ - [ - 7, - "Haggling", - "Persuasion", - "Hauling", - "Appraisal", - "Taxidermy", - "Local Law-wise" + "Furtive", + "Manhunter" + ], + "requires": "Cultist or Insurrectionist", + "requires_expr": [ + "death cultist", + "insurrectionist", + "cultist" + ], + "key_leads": [ + "City Dweller Setting", + "Outcast Subsetting", + "Professional Soldier Subsetting" ] - ], - "traits": [ - 1, - "Polite", - "Efficient", - "Stoic" - ], - "requires": "Spy, Tomb Guard, Deranged, Evangelist or Insurrectionist", - "requires_expr": [ - "spy", - "tomb guard", - "evangelist", - "deranged", - "insurrectionist" - ], - "key_leads": [ - "City Dweller Setting", - "Servitude And Captive Setting", - "Outcast Subsetting", - "Professional Soldier Subsetting" - ] - }, - "Tomb Guard": { - "time": 4, - "res": 10, - "stat": [ - [ + }, + "Factotum": { + "time": 7, + "res": 15, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "City", + "Servitude", + "Outcast", + "Soldier" + ], + "skills": [ + [ + 7, + "Haggling", + "Persuasion", + "Hauling", + "Appraisal", + "Taxidermy", + "Local Law-wise" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Servitude", - "Outcast", - "Soldier" - ], - "skills": [ - [ - 5, - "Spear", - "Knives", - "Brawling", - "Walking Corpse-wise" + "Polite", + "Efficient", + "Stoic" + ], + "requires": "Spy, Tomb Guard, Deranged, Evangelist or Insurrectionist", + "requires_expr": [ + "spy", + "tomb guard", + "evangelist", + "deranged", + "insurrectionist" + ], + "key_leads": [ + "City Dweller Setting", + "Servitude And Captive Setting", + "Outcast Subsetting", + "Professional Soldier Subsetting" ] - ], - "traits": [ - 1, - "Disfigured", - "Loyal" - ], - "requires": "Cultist, Grave Digger, Freebooter or any soldier lifepath", - "requires_expr": [ - "death cultist", - "grave robber", - "cultist", - "gravedigger", - "freebooter", - "professional soldier subsetting:runner", - "professional soldier subsetting:apprentice", - "professional soldier subsetting:musician", - "professional soldier subsetting:foot soldier", - "professional soldier subsetting:archer", - "professional soldier subsetting:crossbowman", - "professional soldier subsetting:sailor", - "professional soldier subsetting:herald", - "professional soldier subsetting:bannerman", - "professional soldier subsetting:scout", - "professional soldier subsetting:sergeant", - "professional soldier subsetting:veteran", - "professional soldier subsetting:cavalryman", - "professional soldier subsetting:journeyman", - "professional soldier subsetting:armorer", - "professional soldier subsetting:atilliator", - "professional soldier subsetting:chaplain", - "professional soldier subsetting:engineer", - "professional soldier subsetting:wizard of war", - "professional soldier subsetting:quartermaster", - "professional soldier subsetting:captain" - ], - "key_leads": [ - "Servitude And Captive Setting", - "Outcast Subsetting", - "Professional Soldier Subsetting" - ] - }, - "Death Priest": { - "time": 6, - "res": 25, - "stat": [ - [ + }, + "Tomb Guard": { + "time": 4, + "res": 10, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Servitude", + "Outcast", + "Soldier" + ], + "skills": [ + [ + 5, + "Spear", + "Knives", + "Brawling", + "Walking Corpse-wise" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Outcast", - "Soldier", - "Religious" - ], - "skills": [ - [ - 6, - "Command", - "Ritual", - "God of Death-wise", - "Death Cult-wise" + "Disfigured", + "Loyal" + ], + "requires": "Cultist, Grave Digger, Freebooter or any soldier lifepath", + "requires_expr": [ + "death cultist", + "grave robber", + "cultist", + "gravedigger", + "freebooter", + "professional soldier subsetting:runner", + "professional soldier subsetting:apprentice", + "professional soldier subsetting:musician", + "professional soldier subsetting:foot soldier", + "professional soldier subsetting:archer", + "professional soldier subsetting:crossbowman", + "professional soldier subsetting:sailor", + "professional soldier subsetting:herald", + "professional soldier subsetting:bannerman", + "professional soldier subsetting:scout", + "professional soldier subsetting:sergeant", + "professional soldier subsetting:veteran", + "professional soldier subsetting:cavalryman", + "professional soldier subsetting:journeyman", + "professional soldier subsetting:armorer", + "professional soldier subsetting:atilliator", + "professional soldier subsetting:chaplain", + "professional soldier subsetting:engineer", + "professional soldier subsetting:wizard of war", + "professional soldier subsetting:quartermaster", + "professional soldier subsetting:captain" + ], + "key_leads": [ + "Servitude And Captive Setting", + "Outcast Subsetting", + "Professional Soldier Subsetting" ] - ], - "traits": [ - 2, - "Creepy", - "Invocations Of The Damned", - "Iron Will", - "Cult Leader" - ], - "requires": "Venal Priest or Heretic Priest", - "requires_expr": [ - "venal priest", - "heretic priest" - ], - "key_leads": [ - "Outcast Subsetting", - "Professional Soldier Subsetting", - "Religious Subsetting" - ] - }, - "Death Artist": { - "time": 10, - "res": 20, - "stat": [ - [ - 1, - "p," + }, + "Death Priest": { + "time": 6, + "res": 25, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Outcast", + "Soldier", + "Religious" + ], + "skills": [ + [ + 6, + "Command", + "Ritual", + "God of Death-wise", + "Death Cult-wise" + ] + ], + "traits": [ + 2, + "Creepy", + "Invocations Of The Damned", + "Iron Will", + "Cult Leader" + ], + "requires": "Venal Priest or Heretic Priest", + "requires_expr": [ + "venal priest", + "heretic priest" + ], + "key_leads": [ + "Outcast Subsetting", + "Professional Soldier Subsetting", + "Religious Subsetting" ] - ], - "leads": [ - "Servitude", - "Outcast" - ], - "skills": [ - [ - 8, - "Death Art", - "Tomb-wise", - "Orc Servant-wise", - "Evil Necromancer-wise", - "Death Cult-wise" + }, + "Death Artist": { + "time": 10, + "res": 20, + "stat": [ + [ + 1, + "p," + ] + ], + "leads": [ + "Servitude", + "Outcast" + ], + "skills": [ + [ + 8, + "Death Art", + "Tomb-wise", + "Orc Servant-wise", + "Evil Necromancer-wise", + "Death Cult-wise" + ] + ], + "traits": [ + 3, + "Cynical", + "Mind Over Matter", + "Missing Limb", + "Paranoid Ear", + "Meticulous", + "Corrupted" + ], + "requires": "Evil Necromancer, Apt Pupil or Rogue Wizard", + "requires_expr": [ + "evil necromancer", + "apt pupil", + "rogue wizard" + ], + "key_leads": [ + "Servitude And Captive Setting", + "Outcast Subsetting" ] - ], - "traits": [ - 3, - "Cynical", - "Mind Over Matter", - "Missing Limb", - "Paranoid Ear", - "Meticulous", - "Corrupted" - ], - "requires": "Evil Necromancer, Apt Pupil or Rogue Wizard", - "requires_expr": [ - "evil necromancer", - "apt pupil", - "rogue wizard" - ], - "key_leads": [ - "Servitude And Captive Setting", - "Outcast Subsetting" - ] - } - }, - "Servant Of The Dark Blood Subsetting": { - "Master Of The Weak": { - "time": 7, - "res": 8, - "stat": [ - [ + } + }, + "Servant Of The Dark Blood Subsetting": { + "Master Of The Weak": { + "time": 7, + "res": 8, + "stat": [ + [ + 1, + "pm" + ] + ], + "skills": [ + [ + 5, + "Death Art", + "Apocalypse-wise", + "Graveyard-wise", + "Murder-wise" + ] + ], + "traits": [ 1, - "pm" - ] - ], - "skills": [ - [ - 5, - "Death Art", - "Apocalypse-wise", - "Graveyard-wise", - "Murder-wise" + "Feared Above All" + ], + "requires": "Knower Of Secrets", + "requires_expr": [ + "knower of secrets" ] - ], - "traits": [ - 1, - "Feared Above All" - ], - "requires": "Knower Of Secrets", - "requires_expr": [ - "knower of secrets" - ] + } } } } -- 2.37.3 From 38a49c8327e1c9c2e50d5cccc18ba923b73fe577 Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Wed, 25 Jan 2023 19:54:06 -0600 Subject: [PATCH 25/45] Switch all lifepath files to wrapped format And change loading accordingly --- src/data/gold/lifepaths/dwarf.json | 3797 ++--- src/data/gold/lifepaths/elf.json | 3941 ++--- src/data/gold/lifepaths/man.json | 23343 ++++++++++++++------------- src/data/gold/lifepaths/orc.json | 3039 ++-- src/data/gold/lifepaths/roden.json | 3303 ++-- src/data/gold/lifepaths/wolf.json | 1811 +-- src/lib/data/custom.rb | 34 +- src/lib/data/dark_elf.rb | 5 +- src/lib/data/gold.rb | 3 +- src/lib/data/troll.rb | 3 +- src/lib/data/wizard.rb | 5 +- 11 files changed, 19653 insertions(+), 19631 deletions(-) diff --git a/src/data/gold/lifepaths/dwarf.json b/src/data/gold/lifepaths/dwarf.json index c8902ba..4bda8c6 100644 --- a/src/data/gold/lifepaths/dwarf.json +++ b/src/data/gold/lifepaths/dwarf.json @@ -1,1939 +1,1942 @@ { - "Clansman Setting": { - "Born Clansman": { - "time": 20, - "res": 10, - "leads": [ - "Guilder" - ], - "skills": [ - [ - 3, - "General" - ] - ], - "traits": [ - 1 - ], - "key_leads": [ - "Guilder Setting" - ] - }, - "Tender": { - "time": 20, - "res": 7, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Guilder", - "Host" - ], - "skills": [ - [ - 5, - "Farming", - "Crop-wise", - "Hills-wise" - ] - ], - "traits": [ - 2, - "Cursing" - ], - "key_leads": [ - "Guilder Setting", - "Dwarven Host Subsetting" - ] - }, - "Herder": { - "time": 15, - "res": 9, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Guilder", - "Host" - ], - "skills": [ - [ - 5, - "Animal Husbandry", - "Flock-wise", - "Fence Building", - "Climbing" - ] - ], - "traits": [ - 2, - "Booming Voice", - "Affinity For Sheep And Goats" - ], - "key_leads": [ - "Guilder Setting", - "Dwarven Host Subsetting" - ] - }, - "Tinkerer": { - "time": 35, - "res": 15, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Guilder", - "Outcast" - ], - "skills": [ - [ - 4, - "Stuff-wise", - "Mending", - "Scavenging" - ] - ], - "traits": [ - 2, - "Curious", - "Tinkerer" - ], - "key_leads": [ - "Guilder Setting", - "Dwarven Outcast Subsetting" - ] - }, - "Delver": { - "time": 20, - "res": 10, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Guilder", - "Host" - ], - "skills": [ - [ - 4, - "Tunnel-wise", - "Gas Pocket-wise", - "Excavation" - ] - ], - "traits": [ - 1, - "Deep Sense" - ], - "key_leads": [ - "Guilder Setting", - "Dwarven Host Subsetting" - ] - }, - "Miller": { - "time": 30, - "res": 30, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Guilder", - "Host" - ], - "skills": [ - [ - 6, - "Grain Appraisal", - "Miller", - "Mending", - "Brewer", - "Grain-wise" - ] - ], - "traits": [ - 1 - ], - "key_leads": [ - "Guilder Setting", - "Dwarven Host Subsetting" - ] - }, - "Brewer": { - "time": 40, - "res": 40, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Guilder", - "Host", - "Outcast" - ], - "skills": [ - [ - 5, - "Beer Appraisal", - "Nogger", - "Miller", - "Beer-wise" - ] - ], - "traits": [ - 1 - ], - "requires": "Miller, Longbeard, Seneschal, Captain or Drunk", - "requires_expr": [ - "miller", - "longbeard", - "seneschal", - "captain", - "drunk" - ], - "key_leads": [ - "Guilder Setting", - "Dwarven Host Subsetting", - "Dwarven Outcast Subsetting" - ] - }, - "Foreman": { - "time": 35, - "res": 25, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Guilder", - "Host", - "Artificer" - ], - "skills": [ - [ - 5, - "Ore-wise", - "Vein-wise", - "Engineering" - ] - ], - "traits": [ - 1 - ], - "requires": "Delver, Artificer's Ardent or Engineer", - "requires_expr": [ - "delver", - "artificer setting:ardent", - "engineer" - ], - "key_leads": [ - "Guilder Setting", - "Dwarven Host Subsetting", - "Artificer Setting" - ] - }, - "Husband/wife": { - "time": 70, - "res": 18, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Guilder", - "Host", - "Outcast" - ], - "skills": [ - [ - 5, - "Clan-wise", - "Family-wise", - "Haggling", - "Soothing Platitudes" - ] - ], - "traits": [ - 2, - "Dispute-settler", - "Pragmatic Outlook" - ], - "restriction": "husband/wife cannot be the character's second lifepath", - "key_leads": [ - "Guilder Setting", - "Dwarven Host Subsetting", - "Dwarven Outcast Subsetting" - ] - }, - "Longbeard": { - "time": 77, - "res": 30, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Host", - "Outcast" - ], - "skills": [ - [ - 6, - "Coarse Persuasion", - "Ugly Truth", - "Guilder-wise", - "Host-wise" - ] - ], - "traits": [ - 2, - "Folksy Wisdom", - "Oathswearer" - ], - "requires": "Foreman, Graybeard, Artificer, Trader, Seneschal, Adventurer or Husband/Wife", - "requires_expr": [ - "foreman", - "graybeard", - "artificer", - "trader", - "seneschal", - "adventurer", - "husband/wife" - ], - "key_leads": [ - "Dwarven Host Subsetting", - "Dwarven Outcast Subsetting" - ] - } - }, - "Guilder Setting": { - "Born Guilder": { - "time": 21, - "res": 5, - "leads": [ - "Clansman" - ], - "skills": [ - [ - 4, - "General" - ] - ], - "traits": [ - 1 - ], - "key_leads": [ - "Clansman Setting" - ] - }, - "Wordbearer": { - "time": 15, - "res": 10, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Clansman", - "Host" - ], - "skills": [ - [ - 5, - "Hold-wise", - "Rumour-wise", - "Oratory", - "Clan History" - ] - ], - "traits": [ - 1, - "Quirky", - "Iron Memory", - "Quick-step" - ], - "key_leads": [ - "Clansman Setting", - "Dwarven Host Subsetting" - ] - }, - "Hauler": { - "time": 10, - "res": 7, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Clansman", - "Host" - ], - "skills": [ - [ - 5, - "Hauling", - "Wagon-wise", - "Cargo-wise", - "Road-wise" - ] - ], - "traits": [ - 2, - "Lifting Heavy Things" - ], - "key_leads": [ - "Clansman Setting", - "Dwarven Host Subsetting" - ] - }, - "Carter": { - "time": 20, - "res": 10, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Clansman", - "Outcast" - ], - "skills": [ - [ - 5, - "Animal Husbandry", - "Driving", - "Mending", - "Mule-wise" - ] - ], - "traits": [ - 1, - "Patient", - "Iron Nose" - ], - "key_leads": [ - "Clansman Setting", - "Dwarven Outcast Subsetting" - ] - }, - "Hawker": { - "time": 15, - "res": 15, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Clansman", - "Outcast", - "Host" - ], - "skills": [ - [ - 6, - "Inconspicuous", - "Conspicuous", - "Streetwise", - "Haggling", - "Spiel-wise" - ] - ], - "traits": [ - 1 - ], - "key_leads": [ - "Clansman Setting", - "Dwarven Outcast Subsetting", - "Dwarven Host Subsetting" - ] - }, - "Apprentice": { - "time": 15, - "res": 20, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Clansman", - "Artificer" - ], - "skills": [ - [ - 4, - "Carving", - "Tanner", - "Carpentry", - "Scutwork-wise" - ] - ], - "traits": [ - 1, - "Seen Not Heard" - ], - "key_leads": [ - "Clansman Setting", - "Artificer Setting" - ] - }, - "Journeyman": { - "time": 25, - "res": 25, - "stat": [ - [ - 1, - "pm" - ] - ], - "leads": [ - "Clansman", - "Host", - "Artificer" - ], - "skills": [ - [ - 7, - "Haggling", - "Reputation-wise", - "Cartwright", - "Mending", - "Black Metal Artifice" - ] - ], - "traits": [ - 1, - "Hungry" - ], - "requires": "Apprentice or any Ardent lifepath", - "requires_expr": [ - "apprentice", - "ardent" - ], - "key_leads": [ - "Clansman Setting", - "Dwarven Host Subsetting", - "Artificer Setting" - ] - }, - "Craftsman": { - "time": 45, - "res": 45, - "stat": [ - [ - 1, - "pm" - ] - ], - "leads": [ - "Clansman", - "Artificer" - ], - "skills": [ - [ - 4, - "Appraisal", - "Shipwright", - "Artificer-wise" - ], - [ - 1, - "General" - ] - ], - "traits": [ - 1 - ], - "requires": "Journeyman, Artificer, Artillerist or Engineer", - "requires_expr": [ - "journeyman", - "artificer", - "artillerist", - "engineer" - ], - "key_leads": [ - "Clansman Setting", - "Artificer Setting" - ] - }, - "Trader": { - "time": 45, - "res": 70, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Clansman", - "Outcast" - ], - "skills": [ - [ - 7, - "Stentorious Debate", - "Shrewd Appraisal", - "Haggling", - "Persuasion" - ] - ], - "traits": [ - 1 - ], - "requires": "Hawker, Journeyman, Adventurer or Husband/Wife", - "requires_expr": [ - "hawker", - "journeyman", - "adventurer", - "husband/wife" - ], - "key_leads": [ - "Clansman Setting", - "Dwarven Outcast Subsetting" - ] - } - }, - "Artificer Setting": { - "Born Artificer": { - "time": 20, - "res": 15, - "leads": [ - "Clansman" - ], - "skills": [ - [ + "stock": "dwarf", + "settings": { + "Clansman Setting": { + "Born Clansman": { + "time": 20, + "res": 10, + "leads": [ + "Guilder" + ], + "skills": [ + [ + 3, + "General" + ] + ], + "traits": [ + 1 + ], + "key_leads": [ + "Guilder Setting" + ] + }, + "Tender": { + "time": 20, + "res": 7, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Guilder", + "Host" + ], + "skills": [ + [ + 5, + "Farming", + "Crop-wise", + "Hills-wise" + ] + ], + "traits": [ 2, - "Dwarven Rune Script" + "Cursing" ], - [ - 3, - "General" - ] - ], - "traits": [ - 1 - ], - "key_leads": [ - "Clansman Setting" - ] - }, - "Ardent": { - "time": 21, - "res": 15, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Clansman", - "Noble", - "Host", - "Guilder" - ], - "skills": [ - [ - 4, - "Firebuilding", - "Soothing Platitudes", - "Soot-wise" - ] - ], - "traits": [ - 2, - "Humility", - "Hard Work" - ], - "key_leads": [ - "Clansman Setting", - "Dwarven Noble Setting", - "Dwarven Host Subsetting", - "Guilder Setting" - ] - }, - "Tyro Artificer": { - "time": 21, - "res": 20, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Outcast", - "Host", - "Guilder" - ], - "skills": [ - [ - 5, - "Black Metal Artifice", - "Mending", - "Dwarven Art-wise" - ] - ], - "traits": [ - 1, - "Determined" - ], - "requires": "Artificer's Ardent or Journeyman", - "requires_expr": [ - "artificer setting:ardent", - "journeyman" - ], - "key_leads": [ - "Dwarven Outcast Subsetting", - "Dwarven Host Subsetting", - "Guilder Setting" - ] - }, - "Artificer": { - "time": 30, - "res": 35, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Outcast", - "Host" - ], - "skills": [ - [ - 8, - "Stone Artifice", - "Etching", - "White Metal Artifice", - "Gem Artifice" - ] - ], - "traits": [ - 1, - "Stolid" - ], - "requires": "Tyro or Craftsman", - "requires_expr": [ - "tyro artificer", - "craftsman" - ], - "key_leads": [ - "Dwarven Outcast Subsetting", - "Dwarven Host Subsetting" - ] - }, - "Mask Bearer": { - "time": 55, - "res": 50, - "stat": [ - [ - 1, - "pm" - ] - ], - "leads": [ - "Outcast", - "Host", - "Noble" - ], - "skills": [ - [ - 6, - "Jargon", - "Fire And Steel-wise", - "War Art" - ] - ], - "traits": [ - 1 - ], - "requires": "Artificer", - "requires_expr": [ - "artificer" - ], - "key_leads": [ - "Dwarven Outcast Subsetting", - "Dwarven Host Subsetting", - "Dwarven Noble Setting" - ] - }, - "Master Of Arches": { - "time": 75, - "res": 75, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Outcast", - "Host" - ], - "skills": [ - [ - 8, - "Lithography", - "Sculpture", - "Hallmaster", - "Symbology", - "Etiquette" - ] - ], - "traits": [ - 2, - "Confident", - "Patient" - ], - "requires": "Artificer", - "requires_expr": [ - "artificer" - ], - "key_leads": [ - "Dwarven Outcast Subsetting", - "Dwarven Host Subsetting" - ] - }, - "Master Of Forges": { - "time": 75, - "res": 75, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Outcast", - "Host" - ], - "skills": [ - [ - 6, - "Forge Artifice", - "Appraisal", - "Engineering", - "Command", - "Maker's Mark-wise" - ] - ], - "traits": [ - 1, - "Meticulous", - "Estimation" - ], - "requires": "Mask Bearer", - "requires_expr": [ - "mask bearer" - ], - "key_leads": [ - "Dwarven Outcast Subsetting", - "Dwarven Host Subsetting" - ] - }, - "Master Engraver": { - "time": 100, - "res": 60, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Outcast", - "Host" - ], - "skills": [ - [ - 4, - "Reason Of Old Stone", - "Stone-wise", - "Mountain-wise" - ], - [ + "key_leads": [ + "Guilder Setting", + "Dwarven Host Subsetting" + ] + }, + "Herder": { + "time": 15, + "res": 9, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Guilder", + "Host" + ], + "skills": [ + [ + 5, + "Animal Husbandry", + "Flock-wise", + "Fence Building", + "Climbing" + ] + ], + "traits": [ 2, - "General" - ] - ], - "traits": [ - 1 - ], - "requires": "Master of Arches", - "requires_expr": [ - "master of arches" - ], - "key_leads": [ - "Dwarven Outcast Subsetting", - "Dwarven Host Subsetting" - ] - } - }, - "Dwarven Noble Setting": { - "Born Noble": { - "time": 21, - "res": 10, - "leads": [ - "Guilder", - "Artificer" - ], - "skills": [ - [ + "Booming Voice", + "Affinity For Sheep And Goats" + ], + "key_leads": [ + "Guilder Setting", + "Dwarven Host Subsetting" + ] + }, + "Tinkerer": { + "time": 35, + "res": 15, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Guilder", + "Outcast" + ], + "skills": [ + [ + 4, + "Stuff-wise", + "Mending", + "Scavenging" + ] + ], + "traits": [ 2, - "Dwarven Rune Script" + "Curious", + "Tinkerer" ], - [ - 4, - "General" - ] - ], - "traits": [ - 2, - "Dvergar" - ], - "key_leads": [ - "Guilder Setting", - "Artificer Setting" - ] - }, - "Abecedart": { - "time": 20, - "res": 10, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Outcast", - "Guilder", - "Artificer" - ], - "skills": [ - [ - 4, - "Chronology Of Kings", - "Etiquette", - "Obscure Text-wise" - ] - ], - "traits": [ - 1, - "Know It All" - ], - "key_leads": [ - "Dwarven Outcast Subsetting", - "Guilder Setting", - "Artificer Setting" - ] - }, - "Ardent": { - "time": 25, - "res": 15, - "stat": [ - [ + "key_leads": [ + "Guilder Setting", + "Dwarven Outcast Subsetting" + ] + }, + "Delver": { + "time": 20, + "res": 10, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Guilder", + "Host" + ], + "skills": [ + [ + 4, + "Tunnel-wise", + "Gas Pocket-wise", + "Excavation" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Guilder", - "Artificer", - "Outcast" - ], - "skills": [ - [ - 4, - "Sing", - "Soothing Platitudes", - "Accounting", - "Whispered Secrets-wise" + "Deep Sense" + ], + "key_leads": [ + "Guilder Setting", + "Dwarven Host Subsetting" + ] + }, + "Miller": { + "time": 30, + "res": 30, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Guilder", + "Host" + ], + "skills": [ + [ + 6, + "Grain Appraisal", + "Miller", + "Mending", + "Brewer", + "Grain-wise" + ] + ], + "traits": [ + 1 + ], + "key_leads": [ + "Guilder Setting", + "Dwarven Host Subsetting" + ] + }, + "Brewer": { + "time": 40, + "res": 40, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Guilder", + "Host", + "Outcast" + ], + "skills": [ + [ + 5, + "Beer Appraisal", + "Nogger", + "Miller", + "Beer-wise" + ] + ], + "traits": [ + 1 + ], + "requires": "Miller, Longbeard, Seneschal, Captain or Drunk", + "requires_expr": [ + "miller", + "longbeard", + "seneschal", + "captain", + "drunk" + ], + "key_leads": [ + "Guilder Setting", + "Dwarven Host Subsetting", + "Dwarven Outcast Subsetting" + ] + }, + "Foreman": { + "time": 35, + "res": 25, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Guilder", + "Host", + "Artificer" + ], + "skills": [ + [ + 5, + "Ore-wise", + "Vein-wise", + "Engineering" + ] + ], + "traits": [ + 1 + ], + "requires": "Delver, Artificer's Ardent or Engineer", + "requires_expr": [ + "delver", + "artificer setting:ardent", + "engineer" + ], + "key_leads": [ + "Guilder Setting", + "Dwarven Host Subsetting", + "Artificer Setting" + ] + }, + "Husband/wife": { + "time": 70, + "res": 18, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Guilder", + "Host", + "Outcast" + ], + "skills": [ + [ + 5, + "Clan-wise", + "Family-wise", + "Haggling", + "Soothing Platitudes" + ] + ], + "traits": [ + 2, + "Dispute-settler", + "Pragmatic Outlook" + ], + "restriction": "husband/wife cannot be the character's second lifepath", + "key_leads": [ + "Guilder Setting", + "Dwarven Host Subsetting", + "Dwarven Outcast Subsetting" + ] + }, + "Longbeard": { + "time": 77, + "res": 30, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Host", + "Outcast" + ], + "skills": [ + [ + 6, + "Coarse Persuasion", + "Ugly Truth", + "Guilder-wise", + "Host-wise" + ] + ], + "traits": [ + 2, + "Folksy Wisdom", + "Oathswearer" + ], + "requires": "Foreman, Graybeard, Artificer, Trader, Seneschal, Adventurer or Husband/Wife", + "requires_expr": [ + "foreman", + "graybeard", + "artificer", + "trader", + "seneschal", + "adventurer", + "husband/wife" + ], + "key_leads": [ + "Dwarven Host Subsetting", + "Dwarven Outcast Subsetting" ] - ], - "traits": [ - 2, - "Humility In The Face Of Your Betters" - ], - "key_leads": [ - "Guilder Setting", - "Artificer Setting", - "Dwarven Outcast Subsetting" - ] + } }, - "Axe Bearer": { - "time": 20, - "res": 25, - "stat": [ - [ + "Guilder Setting": { + "Born Guilder": { + "time": 21, + "res": 5, + "leads": [ + "Clansman" + ], + "skills": [ + [ + 4, + "General" + ] + ], + "traits": [ + 1 + ], + "key_leads": [ + "Clansman Setting" + ] + }, + "Wordbearer": { + "time": 15, + "res": 10, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Clansman", + "Host" + ], + "skills": [ + [ + 5, + "Hold-wise", + "Rumour-wise", + "Oratory", + "Clan History" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Outcast", - "Host" - ], - "skills": [ - [ - 8, - "Axe", - "Armor Training", - "Shield Training", - "Formation Fighting", - "Throwing" - ] - ], - "traits": [ - 1, - "Proud" - ], - "requires": "Noble Ardent or Banner Bearer", - "requires_expr": [ - "dwarven noble setting:ardent", - "banner bearer" - ], - "key_leads": [ - "Dwarven Outcast Subsetting", - "Dwarven Host Subsetting" - ] - }, - "Chronicler": { - "time": 50, - "res": 20, - "stat": [ - [ + "Quirky", + "Iron Memory", + "Quick-step" + ], + "key_leads": [ + "Clansman Setting", + "Dwarven Host Subsetting" + ] + }, + "Hauler": { + "time": 10, + "res": 7, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Clansman", + "Host" + ], + "skills": [ + [ + 5, + "Hauling", + "Wagon-wise", + "Cargo-wise", + "Road-wise" + ] + ], + "traits": [ + 2, + "Lifting Heavy Things" + ], + "key_leads": [ + "Clansman Setting", + "Dwarven Host Subsetting" + ] + }, + "Carter": { + "time": 20, + "res": 10, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Clansman", + "Outcast" + ], + "skills": [ + [ + 5, + "Animal Husbandry", + "Driving", + "Mending", + "Mule-wise" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Host", - "Guilder", - "Artificer" - ], - "skills": [ - [ - 9, - "Illuminations", - "Ancient History", - "Clan-wise", - "Dwarf-wise", - "Poetry", - "Cartography", - "Etiquette", - "Symbology", - "Oath-wise" - ] - ], - "traits": [ - 1 - ], - "requires": "Abecedart, Khirurgeon or Graybeard", - "requires_expr": [ - "abecedart", - "khirurgeon", - "graybeard" - ], - "key_leads": [ - "Dwarven Host Subsetting", - "Guilder Setting", - "Artificer Setting" - ] - }, - "Seneschal": { - "time": 55, - "res": 50, - "stat": [ - [ + "Patient", + "Iron Nose" + ], + "key_leads": [ + "Clansman Setting", + "Dwarven Outcast Subsetting" + ] + }, + "Hawker": { + "time": 15, + "res": 15, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Clansman", + "Outcast", + "Host" + ], + "skills": [ + [ + 6, + "Inconspicuous", + "Conspicuous", + "Streetwise", + "Haggling", + "Spiel-wise" + ] + ], + "traits": [ + 1 + ], + "key_leads": [ + "Clansman Setting", + "Dwarven Outcast Subsetting", + "Dwarven Host Subsetting" + ] + }, + "Apprentice": { + "time": 15, + "res": 20, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Clansman", + "Artificer" + ], + "skills": [ + [ + 4, + "Carving", + "Tanner", + "Carpentry", + "Scutwork-wise" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Host", - "Guilder" - ], - "skills": [ - [ - 5, - "Etiquette", - "Command", - "Estate Management", - "Hold-wise" - ] - ], - "traits": [ - 1, - "Practical" - ], - "requires": "Trader, Longbeard, Quartermaster, Chronicler, Khirurgeon or Graybeard", - "requires_expr": [ - "trader", - "longbeard", - "quartermaster", - "chronicler", - "khirurgeon", - "graybeard" - ], - "key_leads": [ - "Dwarven Host Subsetting", - "Guilder Setting" - ] - }, - "Treasurer": { - "time": 75, - "res": 100, - "stat": [ - [ + "Seen Not Heard" + ], + "key_leads": [ + "Clansman Setting", + "Artificer Setting" + ] + }, + "Journeyman": { + "time": 25, + "res": 25, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Clansman", + "Host", + "Artificer" + ], + "skills": [ + [ + 7, + "Haggling", + "Reputation-wise", + "Cartwright", + "Mending", + "Black Metal Artifice" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Outcast", - "Host" - ], - "skills": [ - [ - 6, - "Accounting", - "Etiquette", - "Treasure-wise", - "Administration" + "Hungry" + ], + "requires": "Apprentice or any Ardent lifepath", + "requires_expr": [ + "apprentice", + "ardent" + ], + "key_leads": [ + "Clansman Setting", + "Dwarven Host Subsetting", + "Artificer Setting" + ] + }, + "Craftsman": { + "time": 45, + "res": 45, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Clansman", + "Artificer" + ], + "skills": [ + [ + 4, + "Appraisal", + "Shipwright", + "Artificer-wise" + ], + [ + 1, + "General" + ] + ], + "traits": [ + 1 + ], + "requires": "Journeyman, Artificer, Artillerist or Engineer", + "requires_expr": [ + "journeyman", + "artificer", + "artillerist", + "engineer" + ], + "key_leads": [ + "Clansman Setting", + "Artificer Setting" + ] + }, + "Trader": { + "time": 45, + "res": 70, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Clansman", + "Outcast" + ], + "skills": [ + [ + 7, + "Stentorious Debate", + "Shrewd Appraisal", + "Haggling", + "Persuasion" + ] + ], + "traits": [ + 1 + ], + "requires": "Hawker, Journeyman, Adventurer or Husband/Wife", + "requires_expr": [ + "hawker", + "journeyman", + "adventurer", + "husband/wife" + ], + "key_leads": [ + "Clansman Setting", + "Dwarven Outcast Subsetting" ] - ], - "traits": [ - 2, - "Dangerous Obsession", - "Rainman" - ], - "requires": "Seneschal, Artificer or Warden", - "requires_expr": [ - "seneschal", - "artificer", - "warden" - ], - "key_leads": [ - "Dwarven Outcast Subsetting", - "Dwarven Host Subsetting" - ] + } }, - "High Captain": { - "time": 75, - "res": 75, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Outcast", - "Host" - ], - "skills": [ - [ - 5, - "Command", - "Strategy", - "Conspicuous" - ], - [ + "Artificer Setting": { + "Born Artificer": { + "time": 20, + "res": 15, + "leads": [ + "Clansman" + ], + "skills": [ + [ + 2, + "Dwarven Rune Script" + ], + [ + 3, + "General" + ] + ], + "traits": [ + 1 + ], + "key_leads": [ + "Clansman Setting" + ] + }, + "Ardent": { + "time": 21, + "res": 15, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Clansman", + "Noble", + "Host", + "Guilder" + ], + "skills": [ + [ + 4, + "Firebuilding", + "Soothing Platitudes", + "Soot-wise" + ] + ], + "traits": [ 2, - "General" - ] - ], - "traits": [ - 2, - "Muttering", - "Stentorious Voice" - ], - "requires": "Noble Axe Bearer and either Captain or Warden", - "requires_expr": [ - "+and", - [ - "dwarven noble setting:axe bearer" - ], - [ - "captain", - "warden" - ] - ], - "key_leads": [ - "Dwarven Outcast Subsetting", - "Dwarven Host Subsetting" - ] - }, - "Prince": { - "time": 100, - "res": 200, - "stat": [ - [ + "Humility", + "Hard Work" + ], + "key_leads": [ + "Clansman Setting", + "Dwarven Noble Setting", + "Dwarven Host Subsetting", + "Guilder Setting" + ] + }, + "Tyro Artificer": { + "time": 21, + "res": 20, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Outcast", + "Host", + "Guilder" + ], + "skills": [ + [ + 5, + "Black Metal Artifice", + "Mending", + "Dwarven Art-wise" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Outcast", - "Host" - ], - "skills": [ - [ - 8, - "Conspicuous", - "Etiquette", - "Intimidation", - "Oratory", - "Command", - "Burden Of The Crown-wise" - ] - ], - "traits": [ - 2, - "Grumbling", - "Galvanizing Presence", - "Baleful Stare" - ], - "requires": "Born Noble and Noble Axe Bearer", - "requires_expr": [ - "+and", - [ - "born noble" - ], - [ - "dwarven noble setting:axe bearer" - ] - ], - "key_leads": [ - "Dwarven Outcast Subsetting", - "Dwarven Host Subsetting" - ] - } - }, - "Dwarven Host Subsetting": { - "Foot Soldier": { - "time": 10, - "res": 6, - "stat": [ - [ + "Determined" + ], + "requires": "Artificer's Ardent or Journeyman", + "requires_expr": [ + "artificer setting:ardent", + "journeyman" + ], + "key_leads": [ + "Dwarven Outcast Subsetting", + "Dwarven Host Subsetting", + "Guilder Setting" + ] + }, + "Artificer": { + "time": 30, + "res": 35, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Outcast", + "Host" + ], + "skills": [ + [ + 8, + "Stone Artifice", + "Etching", + "White Metal Artifice", + "Gem Artifice" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Outcast", - "Clansman", - "Guilder" - ], - "skills": [ - [ - 6, - "Foraging", - "Brawling", - "Hammer", - "Armor Training", - "Shield Training", - "Cadence-wise" - ] - ], - "traits": [ - 1, - "Salt Of The Earth" - ], - "key_leads": [ - "Dwarven Outcast Subsetting", - "Clansman Setting", - "Guilder Setting" - ] - }, - "Arbalester": { - "time": 12, - "res": 12, - "stat": [ - [ + "Stolid" + ], + "requires": "Tyro or Craftsman", + "requires_expr": [ + "tyro artificer", + "craftsman" + ], + "key_leads": [ + "Dwarven Outcast Subsetting", + "Dwarven Host Subsetting" + ] + }, + "Mask Bearer": { + "time": 55, + "res": 50, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Outcast", + "Host", + "Noble" + ], + "skills": [ + [ + 6, + "Jargon", + "Fire And Steel-wise", + "War Art" + ] + ], + "traits": [ + 1 + ], + "requires": "Artificer", + "requires_expr": [ + "artificer" + ], + "key_leads": [ + "Dwarven Outcast Subsetting", + "Dwarven Host Subsetting", + "Dwarven Noble Setting" + ] + }, + "Master Of Arches": { + "time": 75, + "res": 75, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Outcast", + "Host" + ], + "skills": [ + [ + 8, + "Lithography", + "Sculpture", + "Hallmaster", + "Symbology", + "Etiquette" + ] + ], + "traits": [ + 2, + "Confident", + "Patient" + ], + "requires": "Artificer", + "requires_expr": [ + "artificer" + ], + "key_leads": [ + "Dwarven Outcast Subsetting", + "Dwarven Host Subsetting" + ] + }, + "Master Of Forges": { + "time": 75, + "res": 75, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Outcast", + "Host" + ], + "skills": [ + [ + 6, + "Forge Artifice", + "Appraisal", + "Engineering", + "Command", + "Maker's Mark-wise" + ] + ], + "traits": [ 1, - "pm" - ] - ], - "leads": [ - "Outcast", - "Clansman", - "Guilder" - ], - "skills": [ - [ - 5, - "Crossbow", - "Mending", - "Fletcher", - "Artillery Hand", - "Windage-wise" + "Meticulous", + "Estimation" + ], + "requires": "Mask Bearer", + "requires_expr": [ + "mask bearer" + ], + "key_leads": [ + "Dwarven Outcast Subsetting", + "Dwarven Host Subsetting" + ] + }, + "Master Engraver": { + "time": 100, + "res": 60, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Outcast", + "Host" + ], + "skills": [ + [ + 4, + "Reason Of Old Stone", + "Stone-wise", + "Mountain-wise" + ], + [ + 2, + "General" + ] + ], + "traits": [ + 1 + ], + "requires": "Master of Arches", + "requires_expr": [ + "master of arches" + ], + "key_leads": [ + "Dwarven Outcast Subsetting", + "Dwarven Host Subsetting" ] - ], - "traits": [ - 1, - "Squinty" - ], - "key_leads": [ - "Dwarven Outcast Subsetting", - "Clansman Setting", - "Guilder Setting" - ] + } }, - "Banner Bearer": { - "time": 7, - "res": 10, - "stat": [ - [ + "Dwarven Noble Setting": { + "Born Noble": { + "time": 21, + "res": 10, + "leads": [ + "Guilder", + "Artificer" + ], + "skills": [ + [ + 2, + "Dwarven Rune Script" + ], + [ + 4, + "General" + ] + ], + "traits": [ + 2, + "Dvergar" + ], + "key_leads": [ + "Guilder Setting", + "Artificer Setting" + ] + }, + "Abecedart": { + "time": 20, + "res": 10, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Outcast", + "Guilder", + "Artificer" + ], + "skills": [ + [ + 4, + "Chronology Of Kings", + "Etiquette", + "Obscure Text-wise" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Outcast", - "Clansman", - "Guilder" - ], - "skills": [ - [ - 4, - "Conspicuous", - "Banner-wise", - "Intimidation" - ] - ], - "traits": [ - 2, - "Resigned (To Death)", - "Obsessive" - ], - "key_leads": [ - "Dwarven Outcast Subsetting", - "Clansman Setting", - "Guilder Setting" - ] - }, - "Horncaller": { - "time": 7, - "res": 9, - "stat": [ - [ + "Know It All" + ], + "key_leads": [ + "Dwarven Outcast Subsetting", + "Guilder Setting", + "Artificer Setting" + ] + }, + "Ardent": { + "time": 25, + "res": 15, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Guilder", + "Artificer", + "Outcast" + ], + "skills": [ + [ + 4, + "Sing", + "Soothing Platitudes", + "Accounting", + "Whispered Secrets-wise" + ] + ], + "traits": [ + 2, + "Humility In The Face Of Your Betters" + ], + "key_leads": [ + "Guilder Setting", + "Artificer Setting", + "Dwarven Outcast Subsetting" + ] + }, + "Axe Bearer": { + "time": 20, + "res": 25, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Outcast", + "Host" + ], + "skills": [ + [ + 8, + "Axe", + "Armor Training", + "Shield Training", + "Formation Fighting", + "Throwing" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Outcast", - "Clansman", - "Guilder" - ], - "skills": [ - [ - 5, - "Links", - "Conspicuous", - "Cadence-wise", - "Suicidal Bravery-wise" - ] - ], - "traits": [ - 1 - ], - "key_leads": [ - "Dwarven Outcast Subsetting", - "Clansman Setting", - "Guilder Setting" - ] - }, - "Axe Bearer": { - "time": 15, - "res": 15, - "stat": [ - [ + "Proud" + ], + "requires": "Noble Ardent or Banner Bearer", + "requires_expr": [ + "dwarven noble setting:ardent", + "banner bearer" + ], + "key_leads": [ + "Dwarven Outcast Subsetting", + "Dwarven Host Subsetting" + ] + }, + "Chronicler": { + "time": 50, + "res": 20, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Host", + "Guilder", + "Artificer" + ], + "skills": [ + [ + 9, + "Illuminations", + "Ancient History", + "Clan-wise", + "Dwarf-wise", + "Poetry", + "Cartography", + "Etiquette", + "Symbology", + "Oath-wise" + ] + ], + "traits": [ + 1 + ], + "requires": "Abecedart, Khirurgeon or Graybeard", + "requires_expr": [ + "abecedart", + "khirurgeon", + "graybeard" + ], + "key_leads": [ + "Dwarven Host Subsetting", + "Guilder Setting", + "Artificer Setting" + ] + }, + "Seneschal": { + "time": 55, + "res": 50, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Host", + "Guilder" + ], + "skills": [ + [ + 5, + "Etiquette", + "Command", + "Estate Management", + "Hold-wise" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Outcast", - "Guilder", - "Noble" - ], - "skills": [ - [ - 9, - "Foraging", - "Axe", - "Conspicuous", - "Intimidation", - "Armor Training", - "Shield Training", - "Formation Fighting", - "Throwing" + "Practical" + ], + "requires": "Trader, Longbeard, Quartermaster, Chronicler, Khirurgeon or Graybeard", + "requires_expr": [ + "trader", + "longbeard", + "quartermaster", + "chronicler", + "khirurgeon", + "graybeard" + ], + "key_leads": [ + "Dwarven Host Subsetting", + "Guilder Setting" + ] + }, + "Treasurer": { + "time": 75, + "res": 100, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Outcast", + "Host" + ], + "skills": [ + [ + 6, + "Accounting", + "Etiquette", + "Treasure-wise", + "Administration" + ] + ], + "traits": [ + 2, + "Dangerous Obsession", + "Rainman" + ], + "requires": "Seneschal, Artificer or Warden", + "requires_expr": [ + "seneschal", + "artificer", + "warden" + ], + "key_leads": [ + "Dwarven Outcast Subsetting", + "Dwarven Host Subsetting" + ] + }, + "High Captain": { + "time": 75, + "res": 75, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Outcast", + "Host" + ], + "skills": [ + [ + 5, + "Command", + "Strategy", + "Conspicuous" + ], + [ + 2, + "General" + ] + ], + "traits": [ + 2, + "Muttering", + "Stentorious Voice" + ], + "requires": "Noble Axe Bearer and either Captain or Warden", + "requires_expr": [ + "+and", + [ + "dwarven noble setting:axe bearer" + ], + [ + "captain", + "warden" + ] + ], + "key_leads": [ + "Dwarven Outcast Subsetting", + "Dwarven Host Subsetting" + ] + }, + "Prince": { + "time": 100, + "res": 200, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Outcast", + "Host" + ], + "skills": [ + [ + 8, + "Conspicuous", + "Etiquette", + "Intimidation", + "Oratory", + "Command", + "Burden Of The Crown-wise" + ] + ], + "traits": [ + 2, + "Grumbling", + "Galvanizing Presence", + "Baleful Stare" + ], + "requires": "Born Noble and Noble Axe Bearer", + "requires_expr": [ + "+and", + [ + "born noble" + ], + [ + "dwarven noble setting:axe bearer" + ] + ], + "key_leads": [ + "Dwarven Outcast Subsetting", + "Dwarven Host Subsetting" ] - ], - "traits": [ - 1, - "Swaggering" - ], - "requires": "Noble Ardent, Graybeard or Banner Bearer", - "requires_expr": [ - "dwarven noble setting:ardent", - "graybeard", - "banner bearer" - ], - "key_leads": [ - "Dwarven Outcast Subsetting", - "Guilder Setting", - "Dwarven Noble Setting" - ] + } }, - "Graybeard": { - "time": 20, - "res": 20, - "stat": [ - [ + "Dwarven Host Subsetting": { + "Foot Soldier": { + "time": 10, + "res": 6, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Outcast", + "Clansman", + "Guilder" + ], + "skills": [ + [ + 6, + "Foraging", + "Brawling", + "Hammer", + "Armor Training", + "Shield Training", + "Cadence-wise" + ] + ], + "traits": [ 1, - "pm" - ] - ], - "leads": [ - "Outcast", - "Guilder", - "Noble" - ], - "skills": [ - [ - 5, - "Intimidation", - "Field Dressing", - "Command", - "Campaign-wise" - ] - ], - "traits": [ - 2, - "Chuffing", - "Oddly Likeable" - ], - "requires": "Axe Bearer, Longbeard or three Host lifepaths", - "requires_expr": [ - "+or", - [ - "axe bearer" - ], - [ - "longbeard" - ], - [ - "+has_n_lifepaths_in", - 3, - "dwarven host subsetting:foot soldier", - "dwarven host subsetting:arbalester", - "dwarven host subsetting:banner bearer", - "dwarven host subsetting:horncaller", - "dwarven host subsetting:axe bearer", - "dwarven host subsetting:graybeard", - "dwarven host subsetting:khirurgeon", - "dwarven host subsetting:quartermaster", - "dwarven host subsetting:captain", - "dwarven host subsetting:artillerist", - "dwarven host subsetting:engineer", - "dwarven host subsetting:warden" - ] - ], - "key_leads": [ - "Dwarven Outcast Subsetting", - "Guilder Setting", - "Dwarven Noble Setting" - ] - }, - "Khirurgeon": { - "time": 25, - "res": 25, - "stat": [ - [ + "Salt Of The Earth" + ], + "key_leads": [ + "Dwarven Outcast Subsetting", + "Clansman Setting", + "Guilder Setting" + ] + }, + "Arbalester": { + "time": 12, + "res": 12, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Outcast", + "Clansman", + "Guilder" + ], + "skills": [ + [ + 5, + "Crossbow", + "Mending", + "Fletcher", + "Artillery Hand", + "Windage-wise" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Outcast", - "Guilder", - "Noble" - ], - "skills": [ - [ - 6, - "Khirurgy", - "Soothing Platitudes", - "Cooking", - "Infection-wise" - ] - ], - "traits": [ - 1 - ], - "requires": "Abecedart, Seneschal or Graybeard", - "requires_expr": [ - "abecedart", - "seneschal", - "graybeard" - ], - "key_leads": [ - "Dwarven Outcast Subsetting", - "Guilder Setting", - "Dwarven Noble Setting" - ] - }, - "Quartermaster": { - "time": 50, - "res": 35, - "stat": [ - [ + "Squinty" + ], + "key_leads": [ + "Dwarven Outcast Subsetting", + "Clansman Setting", + "Guilder Setting" + ] + }, + "Banner Bearer": { + "time": 7, + "res": 10, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Outcast", + "Clansman", + "Guilder" + ], + "skills": [ + [ + 4, + "Conspicuous", + "Banner-wise", + "Intimidation" + ] + ], + "traits": [ + 2, + "Resigned (To Death)", + "Obsessive" + ], + "key_leads": [ + "Dwarven Outcast Subsetting", + "Clansman Setting", + "Guilder Setting" + ] + }, + "Horncaller": { + "time": 7, + "res": 9, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Outcast", + "Clansman", + "Guilder" + ], + "skills": [ + [ + 5, + "Links", + "Conspicuous", + "Cadence-wise", + "Suicidal Bravery-wise" + ] + ], + "traits": [ + 1 + ], + "key_leads": [ + "Dwarven Outcast Subsetting", + "Clansman Setting", + "Guilder Setting" + ] + }, + "Axe Bearer": { + "time": 15, + "res": 15, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Outcast", + "Guilder", + "Noble" + ], + "skills": [ + [ + 9, + "Foraging", + "Axe", + "Conspicuous", + "Intimidation", + "Armor Training", + "Shield Training", + "Formation Fighting", + "Throwing" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Outcast", - "Guilder", - "Noble" - ], - "skills": [ - [ - 7, - "Logistics", - "Accounting", - "Strategy", - "Supply-wise", - "Host-wise" - ] - ], - "traits": [ - 1, - "No-nonsense" - ], - "requires": "Seneschal, Treasurer, Trader or Graybeard", - "requires_expr": [ - "seneschal", - "treasurer", - "trader", - "graybeard" - ], - "key_leads": [ - "Dwarven Outcast Subsetting", - "Guilder Setting", - "Dwarven Noble Setting" - ] - }, - "Captain": { - "time": 55, - "res": 40, - "stat": [ - [ + "Swaggering" + ], + "requires": "Noble Ardent, Graybeard or Banner Bearer", + "requires_expr": [ + "dwarven noble setting:ardent", + "graybeard", + "banner bearer" + ], + "key_leads": [ + "Dwarven Outcast Subsetting", + "Guilder Setting", + "Dwarven Noble Setting" + ] + }, + "Graybeard": { + "time": 20, + "res": 20, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Outcast", + "Guilder", + "Noble" + ], + "skills": [ + [ + 5, + "Intimidation", + "Field Dressing", + "Command", + "Campaign-wise" + ] + ], + "traits": [ + 2, + "Chuffing", + "Oddly Likeable" + ], + "requires": "Axe Bearer, Longbeard or three Host lifepaths", + "requires_expr": [ + "+or", + [ + "axe bearer" + ], + [ + "longbeard" + ], + [ + "+has_n_lifepaths_in", + 3, + "dwarven host subsetting:foot soldier", + "dwarven host subsetting:arbalester", + "dwarven host subsetting:banner bearer", + "dwarven host subsetting:horncaller", + "dwarven host subsetting:axe bearer", + "dwarven host subsetting:graybeard", + "dwarven host subsetting:khirurgeon", + "dwarven host subsetting:quartermaster", + "dwarven host subsetting:captain", + "dwarven host subsetting:artillerist", + "dwarven host subsetting:engineer", + "dwarven host subsetting:warden" + ] + ], + "key_leads": [ + "Dwarven Outcast Subsetting", + "Guilder Setting", + "Dwarven Noble Setting" + ] + }, + "Khirurgeon": { + "time": 25, + "res": 25, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Outcast", + "Guilder", + "Noble" + ], + "skills": [ + [ + 6, + "Khirurgy", + "Soothing Platitudes", + "Cooking", + "Infection-wise" + ] + ], + "traits": [ + 1 + ], + "requires": "Abecedart, Seneschal or Graybeard", + "requires_expr": [ + "abecedart", + "seneschal", + "graybeard" + ], + "key_leads": [ + "Dwarven Outcast Subsetting", + "Guilder Setting", + "Dwarven Noble Setting" + ] + }, + "Quartermaster": { + "time": 50, + "res": 35, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Outcast", + "Guilder", + "Noble" + ], + "skills": [ + [ + 7, + "Logistics", + "Accounting", + "Strategy", + "Supply-wise", + "Host-wise" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Outcast", - "Guilder", - "Noble" - ], - "skills": [ - [ - 7, - "Command", - "Conspicuous", - "Formation Fighting", - "Strategy", - "Cartography", - "Graybeard-wise" - ] - ], - "traits": [ - 1 - ], - "requires": "Prince or Graybeard", - "requires_expr": [ - "prince", - "graybeard" - ], - "key_leads": [ - "Dwarven Outcast Subsetting", - "Guilder Setting", - "Dwarven Noble Setting" - ] - }, - "Artillerist": { - "time": 55, - "res": 45, - "stat": [ - [ + "No-nonsense" + ], + "requires": "Seneschal, Treasurer, Trader or Graybeard", + "requires_expr": [ + "seneschal", + "treasurer", + "trader", + "graybeard" + ], + "key_leads": [ + "Dwarven Outcast Subsetting", + "Guilder Setting", + "Dwarven Noble Setting" + ] + }, + "Captain": { + "time": 55, + "res": 40, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Outcast", + "Guilder", + "Noble" + ], + "skills": [ + [ + 7, + "Command", + "Conspicuous", + "Formation Fighting", + "Strategy", + "Cartography", + "Graybeard-wise" + ] + ], + "traits": [ + 1 + ], + "requires": "Prince or Graybeard", + "requires_expr": [ + "prince", + "graybeard" + ], + "key_leads": [ + "Dwarven Outcast Subsetting", + "Guilder Setting", + "Dwarven Noble Setting" + ] + }, + "Artillerist": { + "time": 55, + "res": 45, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Outcast", + "Noble", + "Artificer" + ], + "skills": [ + [ + 5, + "Artillerist", + "Mending", + "Carpentry", + "Structural Weakness-wise" + ] + ], + "traits": [ 1, - "pm" - ] - ], - "leads": [ - "Outcast", - "Noble", - "Artificer" - ], - "skills": [ - [ - 5, - "Artillerist", - "Mending", - "Carpentry", - "Structural Weakness-wise" - ] - ], - "traits": [ - 1, - "Complaining" - ], - "requires": "Mask Bearer, Craftsman, Foreman or three Arbalester lifepaths", - "requires_expr": [ - "+or", - [ + "Complaining" + ], + "requires": "Mask Bearer, Craftsman, Foreman or three Arbalester lifepaths", + "requires_expr": [ + "+or", + [ + "mask bearer" + ], + [ + "craftsman" + ], + [ + "foreman" + ], + [ + "+has_n_lifepaths_in", + 3, + "arbalester" + ] + ], + "key_leads": [ + "Dwarven Outcast Subsetting", + "Dwarven Noble Setting", + "Artificer Setting" + ] + }, + "Engineer": { + "time": 60, + "res": 50, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Noble", + "Artificer" + ], + "skills": [ + [ + 6, + "Jargon", + "War Engineer", + "Scavenging", + "Leverage-wise" + ] + ], + "traits": [ + 2, + "Estimation" + ], + "requires": "Artillerist or Mask Bearer", + "requires_expr": [ + "artillerist", "mask bearer" ], - [ - "craftsman" + "key_leads": [ + "Dwarven Noble Setting", + "Artificer Setting" + ] + }, + "Warden": { + "time": 75, + "res": 65, + "stat": [ + [ + 1, + "pm" + ] ], - [ - "foreman" + "leads": [ + "Outcast", + "Noble" ], - [ - "+has_n_lifepaths_in", - 3, - "arbalester" - ] - ], - "key_leads": [ - "Dwarven Outcast Subsetting", - "Dwarven Noble Setting", - "Artificer Setting" - ] - }, - "Engineer": { - "time": 60, - "res": 50, - "stat": [ - [ - 1, - "pm" - ] - ], - "leads": [ - "Noble", - "Artificer" - ], - "skills": [ - [ - 6, - "Jargon", - "War Engineer", - "Scavenging", - "Leverage-wise" - ] - ], - "traits": [ - 2, - "Estimation" - ], - "requires": "Artillerist or Mask Bearer", - "requires_expr": [ - "artillerist", - "mask bearer" - ], - "key_leads": [ - "Dwarven Noble Setting", - "Artificer Setting" - ] - }, - "Warden": { - "time": 75, - "res": 65, - "stat": [ - [ - 1, - "pm" - ] - ], - "leads": [ - "Outcast", - "Noble" - ], - "skills": [ - [ - 7, - "Conspicuous", - "Oratory", - "Observation", - "Strategy", - "Etiquette", - "Champion-wise" - ] - ], - "traits": [ - 1, - "Chuntering", - "Hard As Nails" - ], - "requires": "Prince, Captain or High Captain", - "requires_expr": [ - "prince", - "captain", - "high captain" - ], - "key_leads": [ - "Dwarven Outcast Subsetting", - "Dwarven Noble Setting" - ] - } - }, - "Dwarven Outcast Subsetting": { - "Adventurer": { - "time": 5, - "res": 10, - "stat": [ - [ - 1, - "pm" - ] - ], - "leads": [ - "Clansman", - "Guilder" - ], - "skills": [ - [ - 12, - "Survival", - "Climbing", - "Knots", - "Herbalism", - "Haggling", - "Firebuilding", - "Brawling", - "Knives", - "Sword", - "Crossbow", - "Lock Pick", - "Appraisal", - "Obscure History", - "Symbology", - "Lost Treasures-wise" - ] - ], - "traits": [ - 2, - "Adventurer", - "Boaster" - ], - "key_leads": [ - "Clansman Setting", - "Guilder Setting" - ] - }, - "Gambler": { - "time": 7, - "res": 15, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Clansman" - ], - "skills": [ - [ - 5, - "Games Of Chance", - "Observation", - "Sleight Of Hand", - "Cheat-wise" - ] - ], - "traits": [ - 2, - "Stone-faced" - ], - "key_leads": [ - "Clansman Setting" - ] - }, - "Oathbreaker": { - "time": 20, - "res": 5, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Clansman" - ], - "skills": [ - [ - 4, - "Ugly Truth", - "Falsehood", - "Oath-wise" - ] - ], - "traits": [ - 2, - "Oathbreaker", - "Bitter" - ], - "key_leads": [ - "Clansman Setting" - ] - }, - "Drunk": { - "time": 10, - "res": 5, - "leads": [ - "Clansman" - ], - "skills": [ - [ - 4, - "Stentorious Singing", - "Drunking", - "Tavern Tales-wise" - ] - ], - "traits": [ - 2, - "Drunk", - "Despondent" - ], - "key_leads": [ - "Clansman Setting" - ] - }, - "Coward": { - "time": 15, - "res": 5, - "stat": [ - [ + "skills": [ + [ + 7, + "Conspicuous", + "Oratory", + "Observation", + "Strategy", + "Etiquette", + "Champion-wise" + ] + ], + "traits": [ 1, - "pm" - ] - ], - "leads": [ - "Outcast", - "Host", - "Clansman", - "Guilder", - "Noble", - "Artificer" - ], - "skills": [ - [ - 5, - "Inconspicuous", - "Ugly Truth", - "Oratory", - "Hypocritical Bastards-wise" + "Chuntering", + "Hard As Nails" + ], + "requires": "Prince, Captain or High Captain", + "requires_expr": [ + "prince", + "captain", + "high captain" + ], + "key_leads": [ + "Dwarven Outcast Subsetting", + "Dwarven Noble Setting" ] - ], - "traits": [ - 3, - "Branded A Coward" - ], - "key_leads": [ - "Dwarven Outcast Subsetting", - "Dwarven Host Subsetting", - "Clansman Setting", - "Guilder Setting", - "Dwarven Noble Setting", - "Artificer Setting" - ] + } }, - "Rune Caster": { - "time": 20, - "res": 6, - "stat": [ - [ - 1, - "p" + "Dwarven Outcast Subsetting": { + "Adventurer": { + "time": 5, + "res": 10, + "stat": [ + [ + 1, + "pm" + ] ], - [ - 1, - "m" - ] - ], - "leads": [ - "Outcast", - "Clansman", - "Guilder", - "Noble", - "Artificer" - ], - "skills": [ - [ - 5, - "Rune Casting", - "Foraging", - "Scavenging", - "Bad End-wise" - ] - ], - "traits": [ - 2, - "Slave To Fate" - ], - "key_leads": [ - "Dwarven Outcast Subsetting", - "Clansman Setting", - "Guilder Setting", - "Dwarven Noble Setting", - "Artificer Setting" - ] + "leads": [ + "Clansman", + "Guilder" + ], + "skills": [ + [ + 12, + "Survival", + "Climbing", + "Knots", + "Herbalism", + "Haggling", + "Firebuilding", + "Brawling", + "Knives", + "Sword", + "Crossbow", + "Lock Pick", + "Appraisal", + "Obscure History", + "Symbology", + "Lost Treasures-wise" + ] + ], + "traits": [ + 2, + "Adventurer", + "Boaster" + ], + "key_leads": [ + "Clansman Setting", + "Guilder Setting" + ] + }, + "Gambler": { + "time": 7, + "res": 15, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Clansman" + ], + "skills": [ + [ + 5, + "Games Of Chance", + "Observation", + "Sleight Of Hand", + "Cheat-wise" + ] + ], + "traits": [ + 2, + "Stone-faced" + ], + "key_leads": [ + "Clansman Setting" + ] + }, + "Oathbreaker": { + "time": 20, + "res": 5, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Clansman" + ], + "skills": [ + [ + 4, + "Ugly Truth", + "Falsehood", + "Oath-wise" + ] + ], + "traits": [ + 2, + "Oathbreaker", + "Bitter" + ], + "key_leads": [ + "Clansman Setting" + ] + }, + "Drunk": { + "time": 10, + "res": 5, + "leads": [ + "Clansman" + ], + "skills": [ + [ + 4, + "Stentorious Singing", + "Drunking", + "Tavern Tales-wise" + ] + ], + "traits": [ + 2, + "Drunk", + "Despondent" + ], + "key_leads": [ + "Clansman Setting" + ] + }, + "Coward": { + "time": 15, + "res": 5, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Outcast", + "Host", + "Clansman", + "Guilder", + "Noble", + "Artificer" + ], + "skills": [ + [ + 5, + "Inconspicuous", + "Ugly Truth", + "Oratory", + "Hypocritical Bastards-wise" + ] + ], + "traits": [ + 3, + "Branded A Coward" + ], + "key_leads": [ + "Dwarven Outcast Subsetting", + "Dwarven Host Subsetting", + "Clansman Setting", + "Guilder Setting", + "Dwarven Noble Setting", + "Artificer Setting" + ] + }, + "Rune Caster": { + "time": 20, + "res": 6, + "stat": [ + [ + 1, + "p" + ], + [ + 1, + "m" + ] + ], + "leads": [ + "Outcast", + "Clansman", + "Guilder", + "Noble", + "Artificer" + ], + "skills": [ + [ + 5, + "Rune Casting", + "Foraging", + "Scavenging", + "Bad End-wise" + ] + ], + "traits": [ + 2, + "Slave To Fate" + ], + "key_leads": [ + "Dwarven Outcast Subsetting", + "Clansman Setting", + "Guilder Setting", + "Dwarven Noble Setting", + "Artificer Setting" + ] + } } } } diff --git a/src/data/gold/lifepaths/elf.json b/src/data/gold/lifepaths/elf.json index c13f766..c416ed8 100644 --- a/src/data/gold/lifepaths/elf.json +++ b/src/data/gold/lifepaths/elf.json @@ -1,2024 +1,2027 @@ { - "Wilderlands Setting": { - "Born Wilder Elf": { - "time": 20, - "res": 5, - "leads": [ - "Citadel" - ], - "skills": [ - [ - 2, - "Sing", - "Elven Script" + "stock": "elf", + "settings": { + "Wilderlands Setting": { + "Born Wilder Elf": { + "time": 20, + "res": 5, + "leads": [ + "Citadel" ], - [ - 4, - "General" - ] - ], - "traits": [ - 1 - ], - "key_leads": [ - "Citadel Setting" - ] - }, - "Rider": { - "time": 20, - "res": 8, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Citadel", - "Protector" - ], - "skills": [ - [ - 6, - "Riding", - "Gift Of Speed", - "Lay Of The Horse" - ] - ], - "traits": [ - 1, - "Oikofugic" - ], - "key_leads": [ - "Citadel Setting", - "Protector Subsetting" - ] - }, - "Harvester": { - "time": 50, - "res": 5, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Protector" - ], - "skills": [ - [ - 5, - "Round Of Harvest", - "Farming", - "Firebuilding", - "Animal Husbandry", - "Mending" - ] - ], - "traits": [ - 1, - "Seasoned" - ], - "key_leads": [ - "Protector Subsetting" - ] - }, - "Gatherer": { - "time": 40, - "res": 3, - "skills": [ - [ - 5, - "Rhyme Of The Gatherer", - "Herb-wise", - "Orienteering" - ] - ], - "traits": [ - 1, - "Rough Hands" - ] - }, - "Fisherman": { - "time": 50, - "res": 8, - "leads": [ - "Citadel" - ], - "skills": [ - [ - 9, - "Hymn Of Scales And Fins", - "Pilot", - "Boatwright", - "Knots", - "Mending", - "Cooking", - "Seamanship", - "Rigging" - ] - ], - "traits": [ - 1, - "Wary" - ], - "key_leads": [ - "Citadel Setting" - ] - }, - "Shepherd": { - "time": 45, - "res": 6, - "leads": [ - "Citadel" - ], - "skills": [ - [ - 4, - "Song Of Flocks And Herds", - "Climbing", - "Wolf-wise" - ] - ], - "traits": [ - 1, - "Never Cry Wolf" - ], - "key_leads": [ - "Citadel Setting" - ] - }, - "Wanderer": { - "time": 75, - "res": 5, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Citadel" - ], - "skills": [ - [ - 6, - "Song Of Paths And Ways", - "Air Of Gates", - "Foraging", - "Road-wise" - ] - ], - "traits": [ - 1, - "Oikofugic" - ], - "key_leads": [ - "Citadel Setting" - ] - }, - "Huntsman": { - "time": 45, - "res": 9, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Citadel", - "Protector" - ], - "skills": [ - [ - 7, - "Call Of The Wild", - "Javelin", - "Bow", - "Tracking", - "Stealthy", - "Observation" - ] - ], - "traits": [ - 1, - "Watchful" - ], - "key_leads": [ - "Citadel Setting", - "Protector Subsetting" - ] - }, - "Chandler": { - "time": 50, - "res": 15, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Citadel", - "Protector" - ], - "skills": [ - [ - 5, - "Chant Of Offering", - "Haggling", - "Conspicuous", - "Appraisal" - ] - ], - "traits": [ - 1 - ], - "key_leads": [ - "Citadel Setting", - "Protector Subsetting" - ] - }, - "Weaver": { - "time": 50, - "res": 10, - "stat": [ - [ + "skills": [ + [ + 2, + "Sing", + "Elven Script" + ], + [ + 4, + "General" + ] + ], + "traits": [ + 1 + ], + "key_leads": [ + "Citadel Setting" + ] + }, + "Rider": { + "time": 20, + "res": 8, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Citadel", + "Protector" + ], + "skills": [ + [ + 6, + "Riding", + "Gift Of Speed", + "Lay Of The Horse" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Citadel" - ], - "skills": [ - [ - 5, - "Weaving Way", - "Threading Chant", - "Mending" - ] - ], - "traits": [ - 1, - "Fateful" - ], - "key_leads": [ - "Citadel Setting" - ] - }, - "Forester": { - "time": 90, - "res": 5, - "stat": [ - [ + "Oikofugic" + ], + "key_leads": [ + "Citadel Setting", + "Protector Subsetting" + ] + }, + "Harvester": { + "time": 50, + "res": 5, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Protector" + ], + "skills": [ + [ + 5, + "Round Of Harvest", + "Farming", + "Firebuilding", + "Animal Husbandry", + "Mending" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Citadel", - "Protector" - ], - "skills": [ - [ - 6, - "Song Of Arbors", - "Forest-wise", - "Tree-wise", - "Song Of The Eldar" - ] - ], - "traits": [ - 2, - "Stern" - ], - "key_leads": [ - "Citadel Setting", - "Protector Subsetting" - ] - }, - "Vintner": { - "time": 60, - "res": 20, - "stat": [ - [ + "Seasoned" + ], + "key_leads": [ + "Protector Subsetting" + ] + }, + "Gatherer": { + "time": 40, + "res": 3, + "skills": [ + [ + 5, + "Rhyme Of The Gatherer", + "Herb-wise", + "Orienteering" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Citadel" - ], - "skills": [ - [ - 7, - "Purple Song", - "Vine-wise", - "Cooper", - "Vintage-wise", - "Terroir-wise" - ] - ], - "traits": [ - 1, - "Rarified" - ], - "key_leads": [ - "Citadel Setting" - ] - }, - "Miller": { - "time": 60, - "res": 18, - "stat": [ - [ + "Rough Hands" + ] + }, + "Fisherman": { + "time": 50, + "res": 8, + "leads": [ + "Citadel" + ], + "skills": [ + [ + 9, + "Hymn Of Scales And Fins", + "Pilot", + "Boatwright", + "Knots", + "Mending", + "Cooking", + "Seamanship", + "Rigging" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Citadel" - ], - "skills": [ - [ - 6, - "Grain Song", - "Mending", - "Carpentry", - "Mill-wise", - "Grain-wise" - ] - ], - "traits": [ - 1, - "Earthen" - ], - "key_leads": [ - "Citadel Setting" - ] - }, - "Song Singer": { - "time": 45, - "res": 10, - "stat": [ - [ + "Wary" + ], + "key_leads": [ + "Citadel Setting" + ] + }, + "Shepherd": { + "time": 45, + "res": 6, + "leads": [ + "Citadel" + ], + "skills": [ + [ + 4, + "Song Of Flocks And Herds", + "Climbing", + "Wolf-wise" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Citadel", - "Protector" - ], - "skills": [ - [ - 6, - "Song Of Songs", - "Song Of Soothing", - "Lament Of The Westering Sun", - "Oratory" - ] - ], - "traits": [ - 1, - "Vocal" - ], - "key_leads": [ - "Citadel Setting", - "Protector Subsetting" - ] - }, - "Spouse": { - "time": 75, - "res": 10, - "stat": [ - [ + "Never Cry Wolf" + ], + "key_leads": [ + "Citadel Setting" + ] + }, + "Wanderer": { + "time": 75, + "res": 5, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Citadel" + ], + "skills": [ + [ + 6, + "Song Of Paths And Ways", + "Air Of Gates", + "Foraging", + "Road-wise" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Citadel", - "Protector" - ], - "skills": [ - [ - 5, - "Song Of Soothing", - "Rhyme Of Rules", - "Song Of Feasting", - "Fealty-wise" - ] - ], - "traits": [ - 1 - ], - "key_leads": [ - "Citadel Setting", - "Protector Subsetting" - ] - }, - "Patriarch/matriarch": { - "time": 100, - "res": 15, - "stat": [ - [ + "Oikofugic" + ], + "key_leads": [ + "Citadel Setting" + ] + }, + "Huntsman": { + "time": 45, + "res": 9, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Citadel", + "Protector" + ], + "skills": [ + [ + 7, + "Call Of The Wild", + "Javelin", + "Bow", + "Tracking", + "Stealthy", + "Observation" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Citadel" - ], - "skills": [ - [ - 6, - "Homesong", - "Lyric Of Healing", - "Dignity Of The Wilderlands" - ] - ], - "traits": [ - 1, - "Patriarchal/matriarchal" - ], - "requires": "Spouse", - "requires_expr": [ - "spouse" - ], - "key_leads": [ - "Citadel Setting" - ] - }, - "Elder": { - "time": 150, - "res": 30, - "stat": [ - [ + "Watchful" + ], + "key_leads": [ + "Citadel Setting", + "Protector Subsetting" + ] + }, + "Chandler": { + "time": 50, + "res": 15, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Citadel", + "Protector" + ], + "skills": [ + [ + 5, + "Chant Of Offering", + "Haggling", + "Conspicuous", + "Appraisal" + ] + ], + "traits": [ + 1 + ], + "key_leads": [ + "Citadel Setting", + "Protector Subsetting" + ] + }, + "Weaver": { + "time": 50, + "res": 10, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Citadel" + ], + "skills": [ + [ + 5, + "Weaving Way", + "Threading Chant", + "Mending" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Citadel", - "Etharch" - ], - "skills": [ - [ - 5, - "Verse Of Decision", - "Council Caller" - ] - ], - "traits": [ - 2, - "Wise Aphorisms" - ], - "requires": "Character must be 750 years old after taking this path or the oldest character in the group by 100 years.", - "requires_expr": [ - "+age_greater_than", - 600 - ], - "key_leads": [ - "Citadel Setting", - "Etharch Setting" - ] - } - }, - "Citadel Setting": { - "Citadel Born": { - "time": 20, - "res": 7, - "leads": [ - "Wilderlands" - ], - "skills": [ - [ + "Fateful" + ], + "key_leads": [ + "Citadel Setting" + ] + }, + "Forester": { + "time": 90, + "res": 5, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Citadel", + "Protector" + ], + "skills": [ + [ + 6, + "Song Of Arbors", + "Forest-wise", + "Tree-wise", + "Song Of The Eldar" + ] + ], + "traits": [ 2, - "Elven Script", - "Sing" + "Stern" ], - [ - 5, - "General" - ] - ], - "traits": [ - 1 - ], - "key_leads": [ - "Wilderlands Setting" - ] - }, - "Servitor": { - "time": 20, - "res": 5, - "leads": [ - "Wilderlands", - "Protector" - ], - "skills": [ - [ - 5, - "Hauling", - "Observation", - "Citadel-wise", - "Althing-wise" - ] - ], - "traits": [ - 2, - "Humility", - "Lifting Heavy Things" - ], - "key_leads": [ - "Wilderlands Setting", - "Protector Subsetting" - ] - }, - "Wanderer": { - "time": 75, - "res": 5, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Wilderlands" - ], - "skills": [ - [ - 6, - "Song Of Paths And Ways", - "Air Of Gates", - "Scavenging", - "Streetwise" - ] - ], - "traits": [ - 1, - "Lonesome" - ], - "key_leads": [ - "Wilderlands Setting" - ] - }, - "Song Singer": { - "time": 25, - "res": 10, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Wilderlands", - "Protector" - ], - "skills": [ - [ - 5, - "Sing", - "Song Of Songs", - "Song Of Soothing", - "Lament Of Stars" - ] - ], - "traits": [ - 1, - "Voice In The Crowd" - ], - "key_leads": [ - "Wilderlands Setting", - "Protector Subsetting" - ] - }, - "Student": { - "time": 20, - "res": 10, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Wilderlands", - "Protector" - ], - "skills": [ - [ - 6, - "Lyric Of Law", - "Ballad Of History", - "Elven Script", - "Etiquette", - "Oratory" - ] - ], - "traits": [ - 1, - "Educated" - ], - "key_leads": [ - "Wilderlands Setting", - "Protector Subsetting" - ] - }, - "Clothier": { - "time": 75, - "res": 20, - "leads": [ - "Wilderlands", - "Protector" - ], - "skills": [ - [ - 7, - "Threading Chant", - "Embroidery", - "Leathercraft", - "Weaving Way" - ] - ], - "traits": [ - 1, - "Well Dressed" - ], - "key_leads": [ - "Wilderlands Setting", - "Protector Subsetting" - ] - }, - "Soldier-protector": { - "time": 5, - "res": 10, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Wilderlands", - "Protector", - "Etharch" - ], - "skills": [ - [ - 8, - "Alarm", - "Armor Training", - "Shield Training", - "Sword", - "Bow", - "Knives", - "Fletcher", - "Mending" - ] - ], - "traits": [ - 1, - "Dutiful" - ], - "requires": "Wanderer, Seafarer, Spouse, Rider, Huntsman, or any Etharch or Protector lifepath", - "requires_expr": [ - "wanderer", - "seafarer", - "spouse", - "rider", - "huntsman", - "etharch setting:born etharch", - "etharch setting:student", - "etharch setting:attendant", - "etharch setting:second", - "etharch setting:sword singer", - "etharch setting:steward", - "etharch setting:prince/princess", - "etharch setting:etharch", - "protector subsetting:rider", - "protector subsetting:herald", - "protector subsetting:soother", - "protector subsetting:ranger", - "protector subsetting:bowyer", - "protector subsetting:spearbearer", - "protector subsetting:sword singer", - "protector subsetting:outrider", - "protector subsetting:lancer", - "protector subsetting:lieutenant", - "protector subsetting:captain", - "protector subsetting:armorer", - "protector subsetting:bladesmith", - "protector subsetting:lord protector" - ], - "key_leads": [ - "Wilderlands Setting", - "Protector Subsetting", - "Etharch Setting" - ] - }, - "Seafarer": { - "time": 50, - "res": 5, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Wilderlands", - "Protector" - ], - "skills": [ - [ - 9, - "Weathersong", - "Rope Chant", - "Rhyme Of The Mariner", - "Seamanship", - "Pilot", - "Spear" - ] - ], - "traits": [ - 1, - "Call Of The Sea", - "Rower" - ], - "key_leads": [ - "Wilderlands Setting", - "Protector Subsetting" - ] - }, - "Sea Captain": { - "time": 100, - "res": 15, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Wilderlands", - "Protector", - "Etharch" - ], - "skills": [ - [ - 8, - "Slip Of Currents", - "Supplication To The Wind", - "Command", - "Oratory", - "Sword" - ] - ], - "traits": [ - 1 - ], - "requires": "Seafarer, Adjutant, Lieutenant or Sword Singer", - "requires_expr": [ - "seafarer", - "adjutant", - "lieutenant", - "sword singer" - ], - "key_leads": [ - "Wilderlands Setting", - "Protector Subsetting", - "Etharch Setting" - ] - }, - "Novice": { - "time": 10, - "res": 10, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Wilderlands" - ], - "skills": [ - [ - 4, - "Mending", - "Craft-wise", - "Elven Artifact-wise" - ] - ], - "traits": [ - 2, - "Loyal" - ], - "key_leads": [ - "Wilderlands Setting" - ] - }, - "Shaper": { - "time": 35, - "res": 15, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Wilderlands", - "Protector" - ], - "skills": [ - [ - 6, - "Woodcraft", - "Stonecraft", - "Smithcraft" - ] - ], - "traits": [ - 1, - "Long Fingered" - ], - "requires": "Novice", - "requires_expr": [ - "novice" - ], - "key_leads": [ - "Wilderlands Setting", - "Protector Subsetting" - ] - }, - "Jeweler": { - "time": 75, - "res": 20, - "leads": [ - "Wilderlands", - "Protector" - ], - "skills": [ - [ - 5, - "Jewelcraft", - "Gemcraft", - "Appraisal" - ] - ], - "traits": [ - 2, - "Patient", - "Nimble" - ], - "requires": "Shaper", - "requires_expr": [ - "shaper" - ], - "key_leads": [ - "Wilderlands Setting", - "Protector Subsetting" - ] - }, - "Artisan": { - "time": 150, - "res": 40, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Wilderlands", - "Protector", - "Etharch" - ], - "skills": [ - [ - 6, - "Archcraft", - "Stonecraft", - "Canticle Of Years", - "Antiphon Union Training" - ] - ], - "traits": [ - 1 - ], - "requires": "Shaper", - "requires_expr": [ - "shaper" - ], - "key_leads": [ - "Wilderlands Setting", - "Protector Subsetting", - "Etharch Setting" - ] - }, - "Keel Master": { - "time": 100, - "res": 25, - "stat": [ - [ - 1, - "pm" - ] - ], - "leads": [ - "Wilderlands", - "Protector" - ], - "skills": [ - [ - 6, - "Shipwright", - "Ship-wise", - "Carving" - ] - ], - "traits": [ - 2, - "Perfectionist" - ], - "requires": "Shaper", - "requires_expr": [ - "shaper" - ], - "key_leads": [ - "Wilderlands Setting", - "Protector Subsetting" - ] - }, - "Artist": { - "time": 60, - "res": 12, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Wilderlands" - ], - "skills": [ - [ - 5, - "Song Of Form", - "Painting" - ] - ], - "traits": [ - 2, - "Appreciation For Beauty" - ], - "key_leads": [ - "Wilderlands Setting" - ] - }, - "Bard": { - "time": 65, - "res": 20, - "stat": [ - [ + "key_leads": [ + "Citadel Setting", + "Protector Subsetting" + ] + }, + "Vintner": { + "time": 60, + "res": 20, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Citadel" + ], + "skills": [ + [ + 7, + "Purple Song", + "Vine-wise", + "Cooper", + "Vintage-wise", + "Terroir-wise" + ] + ], + "traits": [ 1, - "pm" - ] - ], - "leads": [ - "Wilderlands", - "Protector" - ], - "skills": [ - [ - 11, - "Song Of Merriment", - "Lament Of Mourning", - "Verse Of Friendship", - "Tract Of Enmity", - "Oratory", - "Conspicuous", - "Lyre", - "Flute" - ] - ], - "traits": [ - 1 - ], - "requires": "Song Singer", - "requires_expr": [ - "song singer" - ], - "key_leads": [ - "Wilderlands Setting", - "Protector Subsetting" - ] - }, - "Adjutant": { - "time": 75, - "res": 20, - "stat": [ - [ + "Rarified" + ], + "key_leads": [ + "Citadel Setting" + ] + }, + "Miller": { + "time": 60, + "res": 18, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Citadel" + ], + "skills": [ + [ + 6, + "Grain Song", + "Mending", + "Carpentry", + "Mill-wise", + "Grain-wise" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Wilderlands", - "Protector" - ], - "skills": [ - [ - 7, - "Code Of Citadels", - "Etiquette", - "Administration", - "Etharch-wise", - "Citadel-wise", - "Protector-wise" - ] - ], - "traits": [ - 2, - "Organized", - "Patient" - ], - "requires": "Herald, Attendant, Student or Spouse", - "requires_expr": [ - "herald", - "attendant", - "student", - "spouse" - ], - "key_leads": [ - "Wilderlands Setting", - "Protector Subsetting" - ] - }, - "Loremaster": { - "time": 200, - "res": 25, - "stat": [ - [ + "Earthen" + ], + "key_leads": [ + "Citadel Setting" + ] + }, + "Song Singer": { + "time": 45, + "res": 10, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Citadel", + "Protector" + ], + "skills": [ + [ + 6, + "Song Of Songs", + "Song Of Soothing", + "Lament Of The Westering Sun", + "Oratory" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Wilderlands", - "Etharch" - ], - "skills": [ - [ - 10, - "Ancient And Obscure History", - "Research", - "Ballad Of History", - "Lyric Of Law", - "Canticle Of Years", - "Rhyme Of Tongues" - ] - ], - "traits": [ - 1 - ], - "requires": "Bard, Adjutant, Steward or Patriarch/Martriarch", - "requires_expr": [ - "bard", - "adjutant", - "steward", - "patriarch/matriarch" - ], - "key_leads": [ - "Wilderlands Setting", - "Etharch Setting" - ] - }, - "Althing": { - "time": 250, - "res": 100, - "stat": [ - [ + "Vocal" + ], + "key_leads": [ + "Citadel Setting", + "Protector Subsetting" + ] + }, + "Spouse": { + "time": 75, + "res": 10, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Citadel", + "Protector" + ], + "skills": [ + [ + 5, + "Song Of Soothing", + "Rhyme Of Rules", + "Song Of Feasting", + "Fealty-wise" + ] + ], + "traits": [ + 1 + ], + "key_leads": [ + "Citadel Setting", + "Protector Subsetting" + ] + }, + "Patriarch/matriarch": { + "time": 100, + "res": 15, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Citadel" + ], + "skills": [ + [ + 6, + "Homesong", + "Lyric Of Healing", + "Dignity Of The Wilderlands" + ] + ], + "traits": [ 1, - "pm" - ] - ], - "leads": [ - "Citadel", - "Protector" - ], - "skills": [ - [ - 10, - "Council Caller", - "Song Of Silence", - "Persuasion", - "Soothing Platitudes", - "Ugly Truth", - "Administration" - ] - ], - "traits": [ - 2, - "Servant Of The Citadel" - ], - "requires": "Loremaster, Bard, Artisan, Steward, Captain, Sea Captain or Patriarch/Martriarch", - "requires_expr": [ - "loremaster", - "bard", - "artisan", - "steward", - "captain", - "sea captain", - "patriarch/matriarch" - ], - "key_leads": [ - "Citadel Setting", - "Protector Subsetting" - ] - } - }, - "Etharch Setting": { - "Born Etharch": { - "time": 25, - "res": 10, - "leads": [ - "Wilderlands", - "Citadel" - ], - "skills": [ - [ + "Patriarchal/matriarchal" + ], + "requires": "Spouse", + "requires_expr": [ + "spouse" + ], + "key_leads": [ + "Citadel Setting" + ] + }, + "Elder": { + "time": 150, + "res": 30, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Citadel", + "Etharch" + ], + "skills": [ + [ + 5, + "Verse Of Decision", + "Council Caller" + ] + ], + "traits": [ 2, - "Elven Script", - "Etiquette", - "Sing" + "Wise Aphorisms" ], - [ - 5, - "General" + "requires": "Character must be 750 years old after taking this path or the oldest character in the group by 100 years.", + "requires_expr": [ + "+age_greater_than", + 600 + ], + "key_leads": [ + "Citadel Setting", + "Etharch Setting" ] - ], - "traits": [ - 2, - "Etharchal", - "Fea", - "Aman" - ], - "key_leads": [ - "Wilderlands Setting", - "Citadel Setting" - ] + } }, - "Student": { - "time": 25, - "res": 10, - "stat": [ - [ + "Citadel Setting": { + "Citadel Born": { + "time": 20, + "res": 7, + "leads": [ + "Wilderlands" + ], + "skills": [ + [ + 2, + "Elven Script", + "Sing" + ], + [ + 5, + "General" + ] + ], + "traits": [ + 1 + ], + "key_leads": [ + "Wilderlands Setting" + ] + }, + "Servitor": { + "time": 20, + "res": 5, + "leads": [ + "Wilderlands", + "Protector" + ], + "skills": [ + [ + 5, + "Hauling", + "Observation", + "Citadel-wise", + "Althing-wise" + ] + ], + "traits": [ + 2, + "Humility", + "Lifting Heavy Things" + ], + "key_leads": [ + "Wilderlands Setting", + "Protector Subsetting" + ] + }, + "Wanderer": { + "time": 75, + "res": 5, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Wilderlands" + ], + "skills": [ + [ + 6, + "Song Of Paths And Ways", + "Air Of Gates", + "Scavenging", + "Streetwise" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Wilderlands", - "Citadel" - ], - "skills": [ - [ - 9, - "Ages Of The Etharch", - "Lyric Of Law", - "Ballad Of History", - "Oratory", - "Calligraphy", - "Song Of The Eldar" - ] - ], - "traits": [ - 1, - "Learned" - ], - "key_leads": [ - "Wilderlands Setting", - "Citadel Setting" - ] - }, - "Attendant": { - "time": 25, - "res": 15, - "stat": [ - [ + "Lonesome" + ], + "key_leads": [ + "Wilderlands Setting" + ] + }, + "Song Singer": { + "time": 25, + "res": 10, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Wilderlands", + "Protector" + ], + "skills": [ + [ + 5, + "Sing", + "Song Of Songs", + "Song Of Soothing", + "Lament Of Stars" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Wilderlands", - "Citadel", - "Protector" - ], - "skills": [ - [ - 4, - "Etiquette", - "Riding", - "Brawling", - "Sword" - ] - ], - "traits": [ - 2, - "Calm Demeanor" - ], - "key_leads": [ - "Wilderlands Setting", - "Citadel Setting", - "Protector Subsetting" - ] - }, - "Second": { - "time": 35, - "res": 15, - "stat": [ - [ + "Voice In The Crowd" + ], + "key_leads": [ + "Wilderlands Setting", + "Protector Subsetting" + ] + }, + "Student": { + "time": 20, + "res": 10, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Wilderlands", + "Protector" + ], + "skills": [ + [ + 6, + "Lyric Of Law", + "Ballad Of History", + "Elven Script", + "Etiquette", + "Oratory" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Wilderlands", - "Citadel", - "Protector", - "Etharch" - ], - "skills": [ - [ - 8, - "Song Of Bonding", - "Sword", - "Knives", - "Bow", - "Mending", - "Riding", - "Mounted Combat Training" - ] - ], - "traits": [ - 2, - "Lesson Of One", - "Patient" - ], - "requires": "Attendant, Bowyer, Spearbearer, Seafarer or Soldier-Protector", - "requires_expr": [ - "attendant", - "bowyer", - "spearbearer", - "seafarer", - "soldier-protector" - ], - "key_leads": [ - "Wilderlands Setting", - "Citadel Setting", - "Protector Subsetting", - "Etharch Setting" - ] - }, - "Sword Singer": { - "time": 40, - "res": 10, - "stat": [ - [ + "Educated" + ], + "key_leads": [ + "Wilderlands Setting", + "Protector Subsetting" + ] + }, + "Clothier": { + "time": 75, + "res": 20, + "leads": [ + "Wilderlands", + "Protector" + ], + "skills": [ + [ + 7, + "Threading Chant", + "Embroidery", + "Leathercraft", + "Weaving Way" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Wilderlands", - "Citadel", - "Protector", - "Etharch" - ], - "skills": [ - [ - 10, - "Song Of The Sword", - "Sword", - "Armor Training", - "Shield Training", - "Knives", - "Brawling" - ] - ], - "traits": [ - 1, - "Fealty To The Fea", - "Cool Headed" - ], - "requires": "Second, Lancer or Lieutenant", - "requires_expr": [ - "second", - "lancer", - "lieutenant" - ], - "key_leads": [ - "Wilderlands Setting", - "Citadel Setting", - "Protector Subsetting", - "Etharch Setting" - ] - }, - "Steward": { - "time": 110, - "res": 20, - "stat": [ - [ + "Well Dressed" + ], + "key_leads": [ + "Wilderlands Setting", + "Protector Subsetting" + ] + }, + "Soldier-protector": { + "time": 5, + "res": 10, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Wilderlands", + "Protector", + "Etharch" + ], + "skills": [ + [ + 8, + "Alarm", + "Armor Training", + "Shield Training", + "Sword", + "Bow", + "Knives", + "Fletcher", + "Mending" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Citadel", - "Protector" - ], - "skills": [ - [ - 8, - "Estate Management", - "Accounting", - "Etiquette", - "Estate-wise", - "Intrigue-wise" - ] - ], - "traits": [ - 1 - ], - "requires": "Lieutenant, Artisan, Bard, Loremaster, Adjutant, Sea Captain or Patriarch/Martriarch", - "requires_expr": [ - "lieutenant", - "artisan", - "bard", - "loremaster", - "adjutant", - "sea captain", - "patriarch/matriarch" - ], - "key_leads": [ - "Citadel Setting", - "Protector Subsetting" - ] - }, - "Prince/princess": { - "time": 150, - "res": 100, - "stat": [ - [ + "Dutiful" + ], + "requires": "Wanderer, Seafarer, Spouse, Rider, Huntsman, or any Etharch or Protector lifepath", + "requires_expr": [ + "wanderer", + "seafarer", + "spouse", + "rider", + "huntsman", + "etharch setting:born etharch", + "etharch setting:student", + "etharch setting:attendant", + "etharch setting:second", + "etharch setting:sword singer", + "etharch setting:steward", + "etharch setting:prince/princess", + "etharch setting:etharch", + "protector subsetting:rider", + "protector subsetting:herald", + "protector subsetting:soother", + "protector subsetting:ranger", + "protector subsetting:bowyer", + "protector subsetting:spearbearer", + "protector subsetting:sword singer", + "protector subsetting:outrider", + "protector subsetting:lancer", + "protector subsetting:lieutenant", + "protector subsetting:captain", + "protector subsetting:armorer", + "protector subsetting:bladesmith", + "protector subsetting:lord protector" + ], + "key_leads": [ + "Wilderlands Setting", + "Protector Subsetting", + "Etharch Setting" + ] + }, + "Seafarer": { + "time": 50, + "res": 5, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Wilderlands", + "Protector" + ], + "skills": [ + [ + 9, + "Weathersong", + "Rope Chant", + "Rhyme Of The Mariner", + "Seamanship", + "Pilot", + "Spear" + ] + ], + "traits": [ 1, - "pm" - ] - ], - "leads": [ - "Citadel", - "Protector" - ], - "skills": [ - [ - 6, - "Song Of Lordship", - "Voice Of Ages" - ], - [ - 4, - "General" - ] - ], - "traits": [ - 1, - "Prince/princess Of The Blood" - ], - "requires": "Fea trait and Sword Singer", - "requires_expr": [ - "+and", - [ - "+trait", - "fea" - ], - [ + "Call Of The Sea", + "Rower" + ], + "key_leads": [ + "Wilderlands Setting", + "Protector Subsetting" + ] + }, + "Sea Captain": { + "time": 100, + "res": 15, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Wilderlands", + "Protector", + "Etharch" + ], + "skills": [ + [ + 8, + "Slip Of Currents", + "Supplication To The Wind", + "Command", + "Oratory", + "Sword" + ] + ], + "traits": [ + 1 + ], + "requires": "Seafarer, Adjutant, Lieutenant or Sword Singer", + "requires_expr": [ + "seafarer", + "adjutant", + "lieutenant", "sword singer" - ] - ], - "key_leads": [ - "Citadel Setting", - "Protector Subsetting" - ] - }, - "Etharch": { - "time": 250, - "res": 200, - "stat": [ - [ + ], + "key_leads": [ + "Wilderlands Setting", + "Protector Subsetting", + "Etharch Setting" + ] + }, + "Novice": { + "time": 10, + "res": 10, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Wilderlands" + ], + "skills": [ + [ + 4, + "Mending", + "Craft-wise", + "Elven Artifact-wise" + ] + ], + "traits": [ + 2, + "Loyal" + ], + "key_leads": [ + "Wilderlands Setting" + ] + }, + "Shaper": { + "time": 35, + "res": 15, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Wilderlands", + "Protector" + ], + "skills": [ + [ + 6, + "Woodcraft", + "Stonecraft", + "Smithcraft" + ] + ], + "traits": [ 1, - "pm" - ] - ], - "leads": [ - "Citadel", - "Protector" - ], - "skills": [ - [ - 8, - "Council Caller", - "Voice Of Thunder", - "Doom Sayer", - "Discerner" - ], - [ - 4, - "General" - ] - ], - "traits": [ - 2, - "Lord Of Ages" - ], - "requires": "Aman trait and either Loremaster or Prince", - "requires_expr": [ - "+and", - [ - "+trait", - "aman" - ], - [ + "Long Fingered" + ], + "requires": "Novice", + "requires_expr": [ + "novice" + ], + "key_leads": [ + "Wilderlands Setting", + "Protector Subsetting" + ] + }, + "Jeweler": { + "time": 75, + "res": 20, + "leads": [ + "Wilderlands", + "Protector" + ], + "skills": [ + [ + 5, + "Jewelcraft", + "Gemcraft", + "Appraisal" + ] + ], + "traits": [ + 2, + "Patient", + "Nimble" + ], + "requires": "Shaper", + "requires_expr": [ + "shaper" + ], + "key_leads": [ + "Wilderlands Setting", + "Protector Subsetting" + ] + }, + "Artisan": { + "time": 150, + "res": 40, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Wilderlands", + "Protector", + "Etharch" + ], + "skills": [ + [ + 6, + "Archcraft", + "Stonecraft", + "Canticle Of Years", + "Antiphon Union Training" + ] + ], + "traits": [ + 1 + ], + "requires": "Shaper", + "requires_expr": [ + "shaper" + ], + "key_leads": [ + "Wilderlands Setting", + "Protector Subsetting", + "Etharch Setting" + ] + }, + "Keel Master": { + "time": 100, + "res": 25, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Wilderlands", + "Protector" + ], + "skills": [ + [ + 6, + "Shipwright", + "Ship-wise", + "Carving" + ] + ], + "traits": [ + 2, + "Perfectionist" + ], + "requires": "Shaper", + "requires_expr": [ + "shaper" + ], + "key_leads": [ + "Wilderlands Setting", + "Protector Subsetting" + ] + }, + "Artist": { + "time": 60, + "res": 12, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Wilderlands" + ], + "skills": [ + [ + 5, + "Song Of Form", + "Painting" + ] + ], + "traits": [ + 2, + "Appreciation For Beauty" + ], + "key_leads": [ + "Wilderlands Setting" + ] + }, + "Bard": { + "time": 65, + "res": 20, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Wilderlands", + "Protector" + ], + "skills": [ + [ + 11, + "Song Of Merriment", + "Lament Of Mourning", + "Verse Of Friendship", + "Tract Of Enmity", + "Oratory", + "Conspicuous", + "Lyre", + "Flute" + ] + ], + "traits": [ + 1 + ], + "requires": "Song Singer", + "requires_expr": [ + "song singer" + ], + "key_leads": [ + "Wilderlands Setting", + "Protector Subsetting" + ] + }, + "Adjutant": { + "time": 75, + "res": 20, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Wilderlands", + "Protector" + ], + "skills": [ + [ + 7, + "Code Of Citadels", + "Etiquette", + "Administration", + "Etharch-wise", + "Citadel-wise", + "Protector-wise" + ] + ], + "traits": [ + 2, + "Organized", + "Patient" + ], + "requires": "Herald, Attendant, Student or Spouse", + "requires_expr": [ + "herald", + "attendant", + "student", + "spouse" + ], + "key_leads": [ + "Wilderlands Setting", + "Protector Subsetting" + ] + }, + "Loremaster": { + "time": 200, + "res": 25, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Wilderlands", + "Etharch" + ], + "skills": [ + [ + 10, + "Ancient And Obscure History", + "Research", + "Ballad Of History", + "Lyric Of Law", + "Canticle Of Years", + "Rhyme Of Tongues" + ] + ], + "traits": [ + 1 + ], + "requires": "Bard, Adjutant, Steward or Patriarch/Martriarch", + "requires_expr": [ + "bard", + "adjutant", + "steward", + "patriarch/matriarch" + ], + "key_leads": [ + "Wilderlands Setting", + "Etharch Setting" + ] + }, + "Althing": { + "time": 250, + "res": 100, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Citadel", + "Protector" + ], + "skills": [ + [ + 10, + "Council Caller", + "Song Of Silence", + "Persuasion", + "Soothing Platitudes", + "Ugly Truth", + "Administration" + ] + ], + "traits": [ + 2, + "Servant Of The Citadel" + ], + "requires": "Loremaster, Bard, Artisan, Steward, Captain, Sea Captain or Patriarch/Martriarch", + "requires_expr": [ "loremaster", - "prince/princess" - ] - ], - "key_leads": [ - "Citadel Setting", - "Protector Subsetting" - ] - } - }, - "Protector Subsetting": { - "Rider": { - "time": 15, - "res": 8, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Wilderlands", - "Citadel" - ], - "skills": [ - [ - 6, - "Riding", - "Animal Husbandry", - "Gift Of Speed", - "Lay Of The Horse" - ] - ], - "traits": [ - 1, - "Smells Like A Horse" - ], - "key_leads": [ - "Wilderlands Setting", - "Citadel Setting" - ] - }, - "Herald": { - "time": 35, - "res": 10, - "stat": [ - [ - 1, - "pm" - ] - ], - "leads": [ - "Wilderlands", - "Citadel" - ], - "skills": [ - [ - 8, - "Paean Of Deeds", - "Mornsong", - "Evensong", - "Recitation Of Ages", - "Silver Trumpet" - ] - ], - "traits": [ - 2, - "Stoic" - ], - "key_leads": [ - "Wilderlands Setting", - "Citadel Setting" - ] - }, - "Soother": { - "time": 30, - "res": 10, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Wilderlands", - "Citadel" - ], - "skills": [ - [ - 6, - "Lyric Of Healing", - "Song Of Soothing", - "Doom Of Strength", - "Foraging" + "bard", + "artisan", + "steward", + "captain", + "sea captain", + "patriarch/matriarch" + ], + "key_leads": [ + "Citadel Setting", + "Protector Subsetting" ] - ], - "traits": [ - 1 - ], - "key_leads": [ - "Wilderlands Setting", - "Citadel Setting" - ] + } }, - "Ranger": { - "time": 45, - "res": 10, - "stat": [ - [ + "Etharch Setting": { + "Born Etharch": { + "time": 25, + "res": 10, + "leads": [ + "Wilderlands", + "Citadel" + ], + "skills": [ + [ + 2, + "Elven Script", + "Etiquette", + "Sing" + ], + [ + 5, + "General" + ] + ], + "traits": [ + 2, + "Etharchal", + "Fea", + "Aman" + ], + "key_leads": [ + "Wilderlands Setting", + "Citadel Setting" + ] + }, + "Student": { + "time": 25, + "res": 10, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Wilderlands", + "Citadel" + ], + "skills": [ + [ + 9, + "Ages Of The Etharch", + "Lyric Of Law", + "Ballad Of History", + "Oratory", + "Calligraphy", + "Song Of The Eldar" + ] + ], + "traits": [ 1, - "pm" - ] - ], - "leads": [ - "Wilderlands" - ], - "skills": [ - [ - 10, - "Observation", - "Stealthy", - "Bow", - "Foraging", - "Rhyme Of The Pathfinder", - "Song Of Soothing", - "Threne Of The Chameleon", - "Lyric Of Healing" - ] - ], - "traits": [ - 1, - "Grey Mantle", - "Sprinter" - ], - "requires": "Forester, Wanderer, Bowyer or Second", - "requires_expr": [ - "forester", - "wanderer", - "bowyer", - "second" - ], - "key_leads": [ - "Wilderlands Setting" - ] - }, - "Bowyer": { - "time": 20, - "res": 8, - "stat": [ - [ + "Learned" + ], + "key_leads": [ + "Wilderlands Setting", + "Citadel Setting" + ] + }, + "Attendant": { + "time": 25, + "res": 15, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Wilderlands", + "Citadel", + "Protector" + ], + "skills": [ + [ + 4, + "Etiquette", + "Riding", + "Brawling", + "Sword" + ] + ], + "traits": [ + 2, + "Calm Demeanor" + ], + "key_leads": [ + "Wilderlands Setting", + "Citadel Setting", + "Protector Subsetting" + ] + }, + "Second": { + "time": 35, + "res": 15, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Wilderlands", + "Citadel", + "Protector", + "Etharch" + ], + "skills": [ + [ + 8, + "Song Of Bonding", + "Sword", + "Knives", + "Bow", + "Mending", + "Riding", + "Mounted Combat Training" + ] + ], + "traits": [ + 2, + "Lesson Of One", + "Patient" + ], + "requires": "Attendant, Bowyer, Spearbearer, Seafarer or Soldier-Protector", + "requires_expr": [ + "attendant", + "bowyer", + "spearbearer", + "seafarer", + "soldier-protector" + ], + "key_leads": [ + "Wilderlands Setting", + "Citadel Setting", + "Protector Subsetting", + "Etharch Setting" + ] + }, + "Sword Singer": { + "time": 40, + "res": 10, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Wilderlands", + "Citadel", + "Protector", + "Etharch" + ], + "skills": [ + [ + 10, + "Song Of The Sword", + "Sword", + "Armor Training", + "Shield Training", + "Knives", + "Brawling" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Wilderlands", - "Citadel" - ], - "skills": [ - [ - 5, - "Bowcraft", - "Mending", - "Bow", - "Bow-wise" - ] - ], - "traits": [ - 1, - "Circumspect" - ], - "key_leads": [ - "Wilderlands Setting", - "Citadel Setting" - ] - }, - "Spearbearer": { - "time": 20, - "res": 8, - "stat": [ - [ + "Fealty To The Fea", + "Cool Headed" + ], + "requires": "Second, Lancer or Lieutenant", + "requires_expr": [ + "second", + "lancer", + "lieutenant" + ], + "key_leads": [ + "Wilderlands Setting", + "Citadel Setting", + "Protector Subsetting", + "Etharch Setting" + ] + }, + "Steward": { + "time": 110, + "res": 20, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Citadel", + "Protector" + ], + "skills": [ + [ + 8, + "Estate Management", + "Accounting", + "Etiquette", + "Estate-wise", + "Intrigue-wise" + ] + ], + "traits": [ + 1 + ], + "requires": "Lieutenant, Artisan, Bard, Loremaster, Adjutant, Sea Captain or Patriarch/Martriarch", + "requires_expr": [ + "lieutenant", + "artisan", + "bard", + "loremaster", + "adjutant", + "sea captain", + "patriarch/matriarch" + ], + "key_leads": [ + "Citadel Setting", + "Protector Subsetting" + ] + }, + "Prince/princess": { + "time": 150, + "res": 100, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Citadel", + "Protector" + ], + "skills": [ + [ + 6, + "Song Of Lordship", + "Voice Of Ages" + ], + [ + 4, + "General" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Wilderlands", - "Citadel" - ], - "skills": [ - [ - 8, - "Spearcraft", - "Spear", - "Armor Training", - "Formation Fighting" + "Prince/princess Of The Blood" + ], + "requires": "Fea trait and Sword Singer", + "requires_expr": [ + "+and", + [ + "+trait", + "fea" + ], + [ + "sword singer" + ] + ], + "key_leads": [ + "Citadel Setting", + "Protector Subsetting" + ] + }, + "Etharch": { + "time": 250, + "res": 200, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Citadel", + "Protector" + ], + "skills": [ + [ + 8, + "Council Caller", + "Voice Of Thunder", + "Doom Sayer", + "Discerner" + ], + [ + 4, + "General" + ] + ], + "traits": [ + 2, + "Lord Of Ages" + ], + "requires": "Aman trait and either Loremaster or Prince", + "requires_expr": [ + "+and", + [ + "+trait", + "aman" + ], + [ + "loremaster", + "prince/princess" + ] + ], + "key_leads": [ + "Citadel Setting", + "Protector Subsetting" ] - ], - "traits": [ - 1 - ], - "key_leads": [ - "Wilderlands Setting", - "Citadel Setting" - ] + } }, - "Sword Singer": { - "time": 30, - "res": 10, - "stat": [ - [ + "Protector Subsetting": { + "Rider": { + "time": 15, + "res": 8, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Wilderlands", + "Citadel" + ], + "skills": [ + [ + 6, + "Riding", + "Animal Husbandry", + "Gift Of Speed", + "Lay Of The Horse" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Wilderlands", - "Citadel", - "Protector", - "Etharch" - ], - "skills": [ - [ - 10, - "Sword", - "Armor Training", - "Shield Training", - "Knives", - "Brawling", - "Song Of The Sword" - ] - ], - "traits": [ - 1, - "Sword Of The White Towers" - ], - "requires": "Second, Soldier-Protector, Soother, Spouse or Spearbearer", - "requires_expr": [ - "second", - "soldier-protector", - "soother", - "spouse", - "spearbearer" - ], - "key_leads": [ - "Wilderlands Setting", - "Citadel Setting", - "Protector Subsetting", - "Etharch Setting" - ] - }, - "Outrider": { - "time": 20, - "res": 10, - "stat": [ - [ + "Smells Like A Horse" + ], + "key_leads": [ + "Wilderlands Setting", + "Citadel Setting" + ] + }, + "Herald": { + "time": 35, + "res": 10, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Wilderlands", + "Citadel" + ], + "skills": [ + [ + 8, + "Paean Of Deeds", + "Mornsong", + "Evensong", + "Recitation Of Ages", + "Silver Trumpet" + ] + ], + "traits": [ + 2, + "Stoic" + ], + "key_leads": [ + "Wilderlands Setting", + "Citadel Setting" + ] + }, + "Soother": { + "time": 30, + "res": 10, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Wilderlands", + "Citadel" + ], + "skills": [ + [ + 6, + "Lyric Of Healing", + "Song Of Soothing", + "Doom Of Strength", + "Foraging" + ] + ], + "traits": [ + 1 + ], + "key_leads": [ + "Wilderlands Setting", + "Citadel Setting" + ] + }, + "Ranger": { + "time": 45, + "res": 10, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Wilderlands" + ], + "skills": [ + [ + 10, + "Observation", + "Stealthy", + "Bow", + "Foraging", + "Rhyme Of The Pathfinder", + "Song Of Soothing", + "Threne Of The Chameleon", + "Lyric Of Healing" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Citadel", - "Wilderlands" - ], - "skills": [ - [ - 9, - "Bow", - "Spear", - "Observation", - "Trails-wise", - "Mounted Combat: Bowman Training", - "Animal Husbandry", - "Mending", - "Stealthy" - ] - ], - "traits": [ - 1, - "Daring" - ], - "requires": "Rider", - "requires_expr": [ - "rider" - ], - "key_leads": [ - "Citadel Setting", - "Wilderlands Setting" - ] - }, - "Lancer": { - "time": 50, - "res": 12, - "stat": [ - [ + "Grey Mantle", + "Sprinter" + ], + "requires": "Forester, Wanderer, Bowyer or Second", + "requires_expr": [ + "forester", + "wanderer", + "bowyer", + "second" + ], + "key_leads": [ + "Wilderlands Setting" + ] + }, + "Bowyer": { + "time": 20, + "res": 8, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Wilderlands", + "Citadel" + ], + "skills": [ + [ + 5, + "Bowcraft", + "Mending", + "Bow", + "Bow-wise" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Wilderlands", - "Citadel", - "Protector", - "Etharch" - ], - "skills": [ - [ - 10, - "Song Of Burning Bright", - "Lament For The Fallen", - "Lance", - "Mounted Combat Training", - "Shield Training", - "Armor Training" - ] - ], - "traits": [ - 1 - ], - "requires": "Outrider or Second", - "requires_expr": [ - "outrider", - "second" - ], - "key_leads": [ - "Wilderlands Setting", - "Citadel Setting", - "Protector Subsetting", - "Etharch Setting" - ] - }, - "Lieutenant": { - "time": 65, - "res": 10, - "stat": [ - [ + "Circumspect" + ], + "key_leads": [ + "Wilderlands Setting", + "Citadel Setting" + ] + }, + "Spearbearer": { + "time": 20, + "res": 8, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Wilderlands", + "Citadel" + ], + "skills": [ + [ + 8, + "Spearcraft", + "Spear", + "Armor Training", + "Formation Fighting" + ] + ], + "traits": [ + 1 + ], + "key_leads": [ + "Wilderlands Setting", + "Citadel Setting" + ] + }, + "Sword Singer": { + "time": 30, + "res": 10, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Wilderlands", + "Citadel", + "Protector", + "Etharch" + ], + "skills": [ + [ + 10, + "Sword", + "Armor Training", + "Shield Training", + "Knives", + "Brawling", + "Song Of The Sword" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Wilderlands", - "Citadel", - "Protector", - "Etharch" - ], - "skills": [ - [ - 7, - "Paean Of Deeds", - "Command", - "Sword", - "Shield Training", - "Formation Fighting" - ] - ], - "traits": [ - 1, - "Ear To The Ground" - ], - "requires": "Sword Singer, Lancer, Sea Captain or two Bowyer/Spearbearer lifepaths", - "requires_expr": [ - "+or", - [ - "sword singer", - "lancer", - "sea captain" + "Sword Of The White Towers" ], - [ - "+has_n_lifepaths_in", - 2, - "bowyer", + "requires": "Second, Soldier-Protector, Soother, Spouse or Spearbearer", + "requires_expr": [ + "second", + "soldier-protector", + "soother", + "spouse", "spearbearer" - ] - ], - "key_leads": [ - "Wilderlands Setting", - "Citadel Setting", - "Protector Subsetting", - "Etharch Setting" - ] - }, - "Captain": { - "time": 85, - "res": 15, - "stat": [ - [ + ], + "key_leads": [ + "Wilderlands Setting", + "Citadel Setting", + "Protector Subsetting", + "Etharch Setting" + ] + }, + "Outrider": { + "time": 20, + "res": 10, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Citadel", + "Wilderlands" + ], + "skills": [ + [ + 9, + "Bow", + "Spear", + "Observation", + "Trails-wise", + "Mounted Combat: Bowman Training", + "Animal Husbandry", + "Mending", + "Stealthy" + ] + ], + "traits": [ 1, - "p" + "Daring" + ], + "requires": "Rider", + "requires_expr": [ + "rider" + ], + "key_leads": [ + "Citadel Setting", + "Wilderlands Setting" + ] + }, + "Lancer": { + "time": 50, + "res": 12, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Wilderlands", + "Citadel", + "Protector", + "Etharch" + ], + "skills": [ + [ + 10, + "Song Of Burning Bright", + "Lament For The Fallen", + "Lance", + "Mounted Combat Training", + "Shield Training", + "Armor Training" + ] + ], + "traits": [ + 1 ], - [ + "requires": "Outrider or Second", + "requires_expr": [ + "outrider", + "second" + ], + "key_leads": [ + "Wilderlands Setting", + "Citadel Setting", + "Protector Subsetting", + "Etharch Setting" + ] + }, + "Lieutenant": { + "time": 65, + "res": 10, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Wilderlands", + "Citadel", + "Protector", + "Etharch" + ], + "skills": [ + [ + 7, + "Paean Of Deeds", + "Command", + "Sword", + "Shield Training", + "Formation Fighting" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Wilderlands", - "Citadel", - "Protector", - "Etharch" - ], - "skills": [ - [ - 9, - "Oratory", - "Sword", - "Command", - "Tactics", - "Formation Fighting", - "Monody Of The March", - "Silent Fury", - "Hymn Of Victory" - ] - ], - "traits": [ - 2, - "Sworn To The Lord Protector (Or Etharch Or Althing)" - ], - "requires": "Lieutenant, Prince, Sea Captain, Steward or two Sword Singer lifepaths", - "requires_expr": [ - "+or", - [ - "lieutenant", - "prince/princess", - "sea captain", - "steward" + "Ear To The Ground" + ], + "requires": "Sword Singer, Lancer, Sea Captain or two Bowyer/Spearbearer lifepaths", + "requires_expr": [ + "+or", + [ + "sword singer", + "lancer", + "sea captain" + ], + [ + "+has_n_lifepaths_in", + 2, + "bowyer", + "spearbearer" + ] + ], + "key_leads": [ + "Wilderlands Setting", + "Citadel Setting", + "Protector Subsetting", + "Etharch Setting" + ] + }, + "Captain": { + "time": 85, + "res": 15, + "stat": [ + [ + 1, + "p" + ], + [ + 1, + "m" + ] + ], + "leads": [ + "Wilderlands", + "Citadel", + "Protector", + "Etharch" ], - [ - "+has_n_lifepaths_in", + "skills": [ + [ + 9, + "Oratory", + "Sword", + "Command", + "Tactics", + "Formation Fighting", + "Monody Of The March", + "Silent Fury", + "Hymn Of Victory" + ] + ], + "traits": [ 2, - "sword singer" - ] - ], - "key_leads": [ - "Wilderlands Setting", - "Citadel Setting", - "Protector Subsetting", - "Etharch Setting" - ] - }, - "Armorer": { - "time": 90, - "res": 15, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Wilderlands", - "Citadel" - ], - "skills": [ - [ - 7, - "Armorer", - "Etching", - "Sewing", - "Tanner", - "Antiphon Union Training" - ] - ], - "traits": [ - 1, - "Patient" - ], - "requires": "Shaper or Bladesmith", - "requires_expr": [ - "shaper", - "bladesmith" - ], - "key_leads": [ - "Wilderlands Setting", - "Citadel Setting" - ] - }, - "Bladesmith": { - "time": 80, - "res": 15, - "stat": [ - [ + "Sworn To The Lord Protector (Or Etharch Or Althing)" + ], + "requires": "Lieutenant, Prince, Sea Captain, Steward or two Sword Singer lifepaths", + "requires_expr": [ + "+or", + [ + "lieutenant", + "prince/princess", + "sea captain", + "steward" + ], + [ + "+has_n_lifepaths_in", + 2, + "sword singer" + ] + ], + "key_leads": [ + "Wilderlands Setting", + "Citadel Setting", + "Protector Subsetting", + "Etharch Setting" + ] + }, + "Armorer": { + "time": 90, + "res": 15, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Wilderlands", + "Citadel" + ], + "skills": [ + [ + 7, + "Armorer", + "Etching", + "Sewing", + "Tanner", + "Antiphon Union Training" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Wilderlands", - "Citadel" - ], - "skills": [ - [ - 5, - "Riddle Of Steel", - "Etching", - "Elven Blade-wise" - ] - ], - "traits": [ - 1, - "Acute" - ], - "requires": "Armorer, Shaper, Bowyer or Spearbearer", - "requires_expr": [ - "armorer", - "shaper", - "bowyer", - "spearbearer" - ], - "key_leads": [ - "Wilderlands Setting", - "Citadel Setting" - ] - }, - "Lord Protector": { - "time": 125, - "res": 60, - "stat": [ - [ + "Patient" + ], + "requires": "Shaper or Bladesmith", + "requires_expr": [ + "shaper", + "bladesmith" + ], + "key_leads": [ + "Wilderlands Setting", + "Citadel Setting" + ] + }, + "Bladesmith": { + "time": 80, + "res": 15, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Wilderlands", + "Citadel" + ], + "skills": [ + [ + 5, + "Riddle Of Steel", + "Etching", + "Elven Blade-wise" + ] + ], + "traits": [ 1, - "p" + "Acute" + ], + "requires": "Armorer, Shaper, Bowyer or Spearbearer", + "requires_expr": [ + "armorer", + "shaper", + "bowyer", + "spearbearer" ], - [ + "key_leads": [ + "Wilderlands Setting", + "Citadel Setting" + ] + }, + "Lord Protector": { + "time": 125, + "res": 60, + "stat": [ + [ + 1, + "p" + ], + [ + 1, + "m" + ] + ], + "leads": [ + "Wilderlands", + "Citadel", + "Protector", + "Etharch" + ], + "skills": [ + [ + 10, + "Strain Of Far Sight", + "Anthem Of Courage", + "Ballad Of Rage", + "Command", + "Formation Fighting", + "Administration", + "Logistics", + "Strategy" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Wilderlands", - "Citadel", - "Protector", - "Etharch" - ], - "skills": [ - [ - 10, - "Strain Of Far Sight", - "Anthem Of Courage", - "Ballad Of Rage", - "Command", - "Formation Fighting", - "Administration", - "Logistics", - "Strategy" + "Sworn To Protect" + ], + "requires": "Captain or Prince", + "requires_expr": [ + "captain", + "prince/princess" + ], + "key_leads": [ + "Wilderlands Setting", + "Citadel Setting", + "Protector Subsetting", + "Etharch Setting" ] - ], - "traits": [ - 1, - "Sworn To Protect" - ], - "requires": "Captain or Prince", - "requires_expr": [ - "captain", - "prince/princess" - ], - "key_leads": [ - "Wilderlands Setting", - "Citadel Setting", - "Protector Subsetting", - "Etharch Setting" - ] + } } } } diff --git a/src/data/gold/lifepaths/man.json b/src/data/gold/lifepaths/man.json index 2969a1f..b8f5da6 100644 --- a/src/data/gold/lifepaths/man.json +++ b/src/data/gold/lifepaths/man.json @@ -1,11814 +1,11817 @@ { - "Peasant Setting": { - "Born Peasant": { - "time": 8, - "res": 3, - "leads": [ - "Servitude", - "Soldier", - "Seafaring", - "Religious" - ], - "skills": [ - [ - 3, - "General" - ] - ], - "traits": [ - 2 - ], - "key_leads": [ - "Servitude And Captive Setting", - "Professional Soldier Subsetting", - "Seafaring Setting", - "Religious Subsetting" - ] - }, - "Farmer": { - "time": 8, - "res": 5, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Villager", - "Soldier", - "Servitude" - ], - "skills": [ - [ - 8, - "Farming", - "Mending", - "Animal Husbandry", - "Weaving", - "Cooking", - "Sewing", - "Firebuilding", - "Sing" - ] - ], - "traits": [ - 1, - "Hoarding" - ], - "key_leads": [ - "Villager Setting", - "Professional Soldier Subsetting", - "Servitude And Captive Setting" - ] - }, - "Head Of Household": { - "time": 15, - "res": 20, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Villager", - "Soldier" - ], - "skills": [ - [ - 8, - "Carpentry", - "Hunting", - "Haggling", - "Almanac" - ] - ], - "traits": [ - 2 - ], - "restrict": "May not be the character's second lifepath.", - "requires_expr": [ - "+has_n_lifepaths_or_more", - 2 - ], - "key_leads": [ - "Villager Setting", - "Professional Soldier Subsetting" - ] - }, - "Midwife": { - "time": 10, - "res": 15, - "stat": [ - [ + "stock": "man", + "settings": { + "Peasant Setting": { + "Born Peasant": { + "time": 8, + "res": 3, + "leads": [ + "Servitude", + "Soldier", + "Seafaring", + "Religious" + ], + "skills": [ + [ + 3, + "General" + ] + ], + "traits": [ + 2 + ], + "key_leads": [ + "Servitude And Captive Setting", + "Professional Soldier Subsetting", + "Seafaring Setting", + "Religious Subsetting" + ] + }, + "Farmer": { + "time": 8, + "res": 5, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Villager", + "Soldier", + "Servitude" + ], + "skills": [ + [ + 8, + "Farming", + "Mending", + "Animal Husbandry", + "Weaving", + "Cooking", + "Sewing", + "Firebuilding", + "Sing" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Villager", - "Outcast" - ], - "skills": [ - [ - 7, - "Animal Husbandry", - "Herbalism", - "Midwifery", - "Omen-wise" - ] - ], - "traits": [ - 2, - "Bedside Manner" - ], - "requires": "Any female gender-specific lifepath (Lady, for example), Farmer or Itinerant Priest.", - "requires_expr": [ - "farmer", - "itinerant priest", - "augur", - "midwife", - "country wife", - "village wife", - "city wife", - "serving wench", - "alewife", - "young lady", - "lady", - "nurse", - "weather witch", - "governess", - "crazy witch", - "dame" - ], - "key_leads": [ - "Villager Setting", - "Outcast Subsetting" - ] - }, - "Lazy Stayabout": { - "time": 7, - "res": 3, - "leads": [ - "Outcast", - "Servitude", - "Soldier" - ], - "skills": [ - [ - 3, - "Lazy-wise", - "Peasant-wise", - "Wife-wise", - "Work-wise" - ] - ], - "traits": [ - 1, - "A Little Fat" - ], - "key_leads": [ - "Outcast Subsetting", - "Servitude And Captive Setting", - "Professional Soldier Subsetting" - ] - }, - "Conscript": { - "time": 1, - "res": 4, - "leads": [ - "Outcast", - "Servitude", - "Soldier" - ], - "skills": [ - [ + "Hoarding" + ], + "key_leads": [ + "Villager Setting", + "Professional Soldier Subsetting", + "Servitude And Captive Setting" + ] + }, + "Head Of Household": { + "time": 15, + "res": 20, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Villager", + "Soldier" + ], + "skills": [ + [ + 8, + "Carpentry", + "Hunting", + "Haggling", + "Almanac" + ] + ], + "traits": [ + 2 + ], + "restrict": "May not be the character's second lifepath.", + "requires_expr": [ + "+has_n_lifepaths_or_more", + 2 + ], + "key_leads": [ + "Villager Setting", + "Professional Soldier Subsetting" + ] + }, + "Midwife": { + "time": 10, + "res": 15, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Villager", + "Outcast" + ], + "skills": [ + [ + 7, + "Animal Husbandry", + "Herbalism", + "Midwifery", + "Omen-wise" + ] + ], + "traits": [ 2, - "Foraging", - "Battle-wise", - "Rumour-wise" - ] - ], - "traits": [ - 1, - "Flee From Battle" - ], - "key_leads": [ - "Outcast Subsetting", - "Servitude And Captive Setting", - "Professional Soldier Subsetting" - ] - }, - "Peasant Pilgrim": { - "time": 3, - "res": 4, - "leads": [ - "Villager", - "Servitude", - "Outcast" - ], - "skills": [ - [ - 3, - "Doctrine", - "Pilgrimage-wise", - "Saint-wise" + "Bedside Manner" ], - [ - 1, - "General" - ] - ], - "traits": [ - 2, - "Road Weary", - "Alms-taker" - ], - "key_leads": [ - "Villager Setting", - "Servitude And Captive Setting", - "Outcast Subsetting" - ] - }, - "Miller": { - "time": 7, - "res": 15, - "leads": [ - "Villager" - ], - "skills": [ - [ - 5, - "Miller", - "Brewer", - "Mending", - "Carpentry" - ] - ], - "traits": [ - 1, - "Lord's Favorite" - ], - "key_leads": [ - "Villager Setting" - ] - }, - "Fisherman": { - "time": 6, - "res": 5, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Villager", - "Outcast", - "Seafaring" - ], - "skills": [ - [ - 6, - "Fishing", - "Rigging", - "Knots", - "Mending", - "Cooking", - "Boatwright" - ] - ], - "traits": [ - 2, - "Superstitious" - ], - "key_leads": [ - "Villager Setting", - "Outcast Subsetting", - "Seafaring Setting" - ] - }, - "Shepherd": { - "time": 4, - "res": 4, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Villager", - "Outcast" - ], - "skills": [ - [ - 5, - "Animal Husbandry", - "Sing", - "Climbing", - "Flute" - ] - ], - "traits": [ - 1, - "Cry Wolf" - ], - "key_leads": [ - "Villager Setting", - "Outcast Subsetting" - ] - }, - "Woodcutter": { - "time": 5, - "res": 5, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Villager", - "Outcast" - ], - "skills": [ - [ - 5, - "Firebuilding", - "Mending", - "Foraging", - "Orienteering", - "Tree-wise", - "Tree Cutting" - ] - ], - "traits": [ - 1 - ], - "key_leads": [ - "Villager Setting", - "Outcast Subsetting" - ] - }, - "Hunter": { - "time": 5, - "res": 6, - "stat": [ - [ - 1, - "p" + "requires": "Any female gender-specific lifepath (Lady, for example), Farmer or Itinerant Priest.", + "requires_expr": [ + "farmer", + "itinerant priest", + "augur", + "midwife", + "country wife", + "village wife", + "city wife", + "serving wench", + "alewife", + "young lady", + "lady", + "nurse", + "weather witch", + "governess", + "crazy witch", + "dame" ], - [ - 1, - "m" - ] - ], - "leads": [ - "Villager", - "Outcast", - "Soldier" - ], - "skills": [ - [ - 7, - "Hunting", - "Tracking", - "Stealthy", - "Cooking", - "Orienteering", - "Javelin", - "Bow" - ] - ], - "traits": [ - 1 - ], - "key_leads": [ - "Villager Setting", - "Outcast Subsetting", - "Professional Soldier Subsetting" - ] - }, - "Trapper": { - "time": 5, - "res": 8, - "stat": [ - [ - 1, - "p" + "key_leads": [ + "Villager Setting", + "Outcast Subsetting" + ] + }, + "Lazy Stayabout": { + "time": 7, + "res": 3, + "leads": [ + "Outcast", + "Servitude", + "Soldier" ], - [ - 1, - "m" - ] - ], - "leads": [ - "Villager", - "Outcast", - "Soldier" - ], - "skills": [ - [ - 6, - "Trapper", - "Stealthy", - "Tracking", - "Cooking", - "Haggling", - "Taxidermy" - ] - ], - "traits": [ - 1, - "Foul Smelling" - ], - "key_leads": [ - "Villager Setting", - "Outcast Subsetting", - "Professional Soldier Subsetting" - ] - }, - "Peddler": { - "time": 5, - "res": 10, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Villager", - "City", - "Servitude", - "Outcast" - ], - "skills": [ - [ - 7, - "Mending", - "Sing", - "Haggling", - "Chandler", - "Persuasion", - "Inconspicuous", - "Falsehood" - ] - ], - "traits": [ - 2, - "Blank Stare", - "Glib", - "Eidetic Memory" - ], - "key_leads": [ - "Villager Setting", - "City Dweller Setting", - "Servitude And Captive Setting", - "Outcast Subsetting" - ] - }, - "Elder": { - "time": 15, - "res": 5, - "stat": [ - [ + "skills": [ + [ + 3, + "Lazy-wise", + "Peasant-wise", + "Wife-wise", + "Work-wise" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Villager", - "Outcast" - ], - "skills": [ - [ - 6, - "Observation", - "Persuasion", - "Ugly Truth", - "Peasant-wise", - "Local History" - ] - ], - "traits": [ - 1, - "Crotchety" - ], - "requires": "The character must have at least 4 lifepaths and start the game over 50 years old.", - "requires_expr": [ - "+and", - [ - "+has_n_lifepaths_or_more", - 4 + "A Little Fat" ], - [ - "+age_greater_than", - 35 - ] - ], - "key_leads": [ - "Villager Setting", - "Outcast Subsetting" - ] - }, - "Augur": { - "time": 5, - "res": 10, - "stat": [ - [ + "key_leads": [ + "Outcast Subsetting", + "Servitude And Captive Setting", + "Professional Soldier Subsetting" + ] + }, + "Conscript": { + "time": 1, + "res": 4, + "leads": [ + "Outcast", + "Servitude", + "Soldier" + ], + "skills": [ + [ + 2, + "Foraging", + "Battle-wise", + "Rumour-wise" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Servitude", - "Outcast" - ], - "skills": [ - [ - 4, - "Astrology", - "Sorcery", - "Falsehood", - "Ugly Truth", - "Omen-wise" - ] - ], - "traits": [ - 2, - "Disturbed", - "Dreamer", - "Cassandra", - "Touch Of Ages" - ], - "requires": "Midwife, Country Wife or must be female and character has no more than three lifepaths total.", - "requires_expr": [ - "+or", - [ - "midwife", - "country wife" + "Flee From Battle" ], - [ - "+and", + "key_leads": [ + "Outcast Subsetting", + "Servitude And Captive Setting", + "Professional Soldier Subsetting" + ] + }, + "Peasant Pilgrim": { + "time": 3, + "res": 4, + "leads": [ + "Villager", + "Servitude", + "Outcast" + ], + "skills": [ [ - "+sex", - "female" + 3, + "Doctrine", + "Pilgrimage-wise", + "Saint-wise" ], [ - "+has_n_lifepaths_or_less", - 2 + 1, + "General" ] - ] - ], - "key_leads": [ - "Servitude And Captive Setting", - "Outcast Subsetting" - ] - }, - "Itinerant Priest": { - "time": 6, - "res": 8, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Villager", - "Outcast", - "City", - "Religious" - ], - "skills": [ - [ - 7, - "Oratory", - "Suasion", - "Chandler", - "Riding", - "Write", - "Read", - "Doctrine" - ] - ], - "traits": [ - 2, - "Dusty", - "Faithful" - ], - "requires": "Any Acolyte lifepath from any setting.", - "requires_expr": [ - "acolyte", - "failed acolyte", - "temple acolyte", - "religious acolyte" - ], - "key_leads": [ - "Villager Setting", - "Outcast Subsetting", - "City Dweller Setting", - "Religious Subsetting" - ] - }, - "Recluse Wizard": { - "time": 15, - "res": 28, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Outcast", - "Villager", - "City", - "Court" - ], - "skills": [ - [ - 7, - "Astrology", - "Alchemy", - "Enchanting", - "Illuminations", - "Ancient History", - "Obscure History" - ] - ], - "traits": [ - 2, - "Batshit", - "Gifted" - ], - "requires": "A previous lifepath that contains the sorcery skill.", - "requires_expr": [ - "augur", - "sorcerer", - "court sorcerer", - "rogue wizard", - "wizard of war" - ], - "key_leads": [ - "Outcast Subsetting", - "Villager Setting", - "City Dweller Setting", - "Noble Court Subsetting" - ] - }, - "Country Wife": { - "time": 10, - "res": 5, - "stat": [ - [ - 1, - "p" ], - [ + "traits": [ + 2, + "Road Weary", + "Alms-taker" + ], + "key_leads": [ + "Villager Setting", + "Servitude And Captive Setting", + "Outcast Subsetting" + ] + }, + "Miller": { + "time": 7, + "res": 15, + "leads": [ + "Villager" + ], + "skills": [ + [ + 5, + "Miller", + "Brewer", + "Mending", + "Carpentry" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Religious" - ], - "skills": [ - [ + "Lord's Favorite" + ], + "key_leads": [ + "Villager Setting" + ] + }, + "Fisherman": { + "time": 6, + "res": 5, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Villager", + "Outcast", + "Seafaring" + ], + "skills": [ + [ + 6, + "Fishing", + "Rigging", + "Knots", + "Mending", + "Cooking", + "Boatwright" + ] + ], + "traits": [ 2, - "Child Rearing", - "Cooking" - ] - ], - "traits": [ - 1 - ], - "note": "A player who takes the Country Wife lifepath may also choose her husband's lifepath from the Peasant setting and may choose from his skills: she gets half of his skill points rounded down. She also receives half of her husband's resource points.", - "restrict": "Character must be female.", - "requires_expr": [ - "+sex", - "female" - ], - "key_leads": [ - "Religious Subsetting" - ] - } - }, - "Villager Setting": { - "Village Born": { - "time": 10, - "res": 4, - "leads": [ - "Peasant", - "Servitude", - "Seafaring", - "Religious" - ], - "skills": [ - [ - 3, - "General" - ] - ], - "traits": [ - 2 - ], - "key_leads": [ - "Peasant Setting", - "Servitude And Captive Setting", - "Seafaring Setting", - "Religious Subsetting" - ] - }, - "Kid": { - "time": 4, - "res": 3, - "stat": [ - [ + "Superstitious" + ], + "key_leads": [ + "Villager Setting", + "Outcast Subsetting", + "Seafaring Setting" + ] + }, + "Shepherd": { + "time": 4, + "res": 4, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Villager", + "Outcast" + ], + "skills": [ + [ + 5, + "Animal Husbandry", + "Sing", + "Climbing", + "Flute" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Peasant", - "Villager", - "City", - "Servitude", - "Outcast", - "Soldier", - "Seafaring", - "Religious" - ], - "skills": [ - [ - 3, - "Trouble-wise", - "Throwing", - "Inconspicuous" - ] - ], - "traits": [ - 1, - "Bad Egg", - "Good For Nothing", - "Fleet Of Foot" - ], - "restrict": "If chosen this must be the second lifepath and may only be taken once.", - "requires_expr": [ - "+and", - [ - "+has_n_lifepaths_or_more", + "Cry Wolf" + ], + "key_leads": [ + "Villager Setting", + "Outcast Subsetting" + ] + }, + "Woodcutter": { + "time": 5, + "res": 5, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Villager", + "Outcast" + ], + "skills": [ + [ + 5, + "Firebuilding", + "Mending", + "Foraging", + "Orienteering", + "Tree-wise", + "Tree Cutting" + ] + ], + "traits": [ 1 ], - [ - "+has_n_lifepaths_or_less", + "key_leads": [ + "Villager Setting", + "Outcast Subsetting" + ] + }, + "Hunter": { + "time": 5, + "res": 6, + "stat": [ + [ + 1, + "p" + ], + [ + 1, + "m" + ] + ], + "leads": [ + "Villager", + "Outcast", + "Soldier" + ], + "skills": [ + [ + 7, + "Hunting", + "Tracking", + "Stealthy", + "Cooking", + "Orienteering", + "Javelin", + "Bow" + ] + ], + "traits": [ 1 - ] - ], - "key_leads": [ - "Peasant Setting", - "Villager Setting", - "City Dweller Setting", - "Servitude And Captive Setting", - "Outcast Subsetting", - "Professional Soldier Subsetting", - "Seafaring Setting", - "Religious Subsetting" - ] - }, - "Idiot": { - "time": 10, - "res": 4, - "leads": [ - "Outcast", - "Peasant" - ], - "skills": [ - [ - 4, - "Inconspicuous", - "Conspicuous", - "Ugly Truth", - "Village Secrets-wise" - ] - ], - "traits": [ - 1, - "Problems", - "Alcoholic", - "Abused", - "Handicapped" - ], - "key_leads": [ - "Outcast Subsetting", - "Peasant Setting" - ] - }, - "Pilgrim": { - "time": 2, - "res": 4, - "leads": [ - "Religious", - "Servitude", - "City" - ], - "skills": [ - [ - 5, - "Religious Rumor-wise", - "Road-wise", - "Shrine-wise", - "Alms-wise", - "Relic-wise", - "Doctrine" - ] - ], - "traits": [ - 2, - "Collector" - ], - "key_leads": [ - "Religious Subsetting", - "Servitude And Captive Setting", - "City Dweller Setting" - ] - }, - "Conscript": { - "time": 1, - "res": 5, - "leads": [ - "Servitude", - "Soldier", - "Outcast" - ], - "skills": [ - [ - 2, - "Foraging", - "Baggage Train-wise" - ] - ], - "traits": [ - 1, - "Hide Before Battle" - ], - "key_leads": [ - "Servitude And Captive Setting", - "Professional Soldier Subsetting", - "Outcast Subsetting" - ] - }, - "Groom": { - "time": 4, - "res": 7, - "leads": [ - "Peasant", - "City", - "Soldier" - ], - "skills": [ - [ - 4, - "Animal Husbandry", - "Riding", - "Mending", - "Horse-wise", - "Road-wise" - ] - ], - "traits": [ - 1 - ], - "key_leads": [ - "Peasant Setting", - "City Dweller Setting", - "Professional Soldier Subsetting" - ] - }, - "Runner": { - "time": 4, - "res": 6, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "City", - "Peasant", - "Soldier" - ], - "skills": [ - [ - 3, - "Streetwise", - "Inconspicuous", - "Shortcut-wise" - ] - ], - "traits": [ - 1, - "Skinny", - "Fleet Of Foot" - ], - "key_leads": [ - "City Dweller Setting", - "Peasant Setting", - "Professional Soldier Subsetting" - ] - }, - "Village Peddler": { - "time": 5, - "res": 10, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Peasant", - "Servitude", - "City", - "Outcast" - ], - "skills": [ - [ - 7, - "Mending", - "Sing", - "Haggling", - "Chandler", - "Persuasion", - "Inconspicuous", - "Falsehood" - ] - ], - "traits": [ - 2, - "Odd" - ], - "key_leads": [ - "Peasant Setting", - "Servitude And Captive Setting", - "City Dweller Setting", - "Outcast Subsetting" - ] - }, - "Shopkeeper": { - "time": 6, - "res": 15, - "leads": [ - "City", - "Peasant" - ], - "skills": [ - [ - 5, - "Haggling", - "Accounting", - "Observation", - "Merchant-wise" - ] - ], - "traits": [ - 1 - ], - "key_leads": [ - "City Dweller Setting", - "Peasant Setting" - ] - }, - "Clerk": { - "time": 4, - "res": 9, - "leads": [ - "City", - "Outcast", - "Soldier" - ], - "skills": [ - [ - 4, - "Bureaucracy", - "Write", - "Read", - "Contract-wise" - ] - ], - "traits": [ - 1, - "Cramped Hands", - "Mind For Small Details" - ], - "key_leads": [ - "City Dweller Setting", - "Outcast Subsetting", - "Professional Soldier Subsetting" - ] - }, - "Sailor": { - "time": 5, - "res": 5, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Soldier", - "City", - "Peasant", - "Servitude", - "Seafaring" - ], - "skills": [ - [ - 6, - "Rigging", - "Knots", - "Brawling", - "Mending", - "Sing", - "Fishing" - ] - ], - "traits": [ - 1, - "Superstitious", - "Sea Legs" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "City Dweller Setting", - "Peasant Setting", - "Servitude And Captive Setting", - "Seafaring Setting" - ] - }, - "Laborer": { - "time": 4, - "res": 4, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Soldier", - "Outcast", - "Servitude", - "Peasant" - ], - "skills": [ - [ - 2, - "Ditch Digging", - "Latrine-wise" - ] - ], - "traits": [ - 2, - "Calloused", - "Starved", - "Broken", - "Hardened", - "Numb" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "Outcast Subsetting", - "Servitude And Captive Setting", - "Peasant Setting" - ] - }, - "Miner": { - "time": 3, - "res": 7, - "stat": [ - [ + ], + "key_leads": [ + "Villager Setting", + "Outcast Subsetting", + "Professional Soldier Subsetting" + ] + }, + "Trapper": { + "time": 5, + "res": 8, + "stat": [ + [ + 1, + "p" + ], + [ + 1, + "m" + ] + ], + "leads": [ + "Villager", + "Outcast", + "Soldier" + ], + "skills": [ + [ + 6, + "Trapper", + "Stealthy", + "Tracking", + "Cooking", + "Haggling", + "Taxidermy" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Soldier", - "Outcast", - "Servitude", - "Peasant" - ], - "skills": [ - [ + "Foul Smelling" + ], + "key_leads": [ + "Villager Setting", + "Outcast Subsetting", + "Professional Soldier Subsetting" + ] + }, + "Peddler": { + "time": 5, + "res": 10, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Villager", + "City", + "Servitude", + "Outcast" + ], + "skills": [ + [ + 7, + "Mending", + "Sing", + "Haggling", + "Chandler", + "Persuasion", + "Inconspicuous", + "Falsehood" + ] + ], + "traits": [ 2, - "Mining", - "Cave-in-wise" - ] - ], - "traits": [ - 3, - "Black Lung", - "Drunk", - "Superstitious" - ], - "requires": "Laborer, Conscript, Farmer or Foot Soldier.", - "requires_expr": [ - "laborer", - "conscript", - "farmer", - "foot soldier" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "Outcast Subsetting", - "Servitude And Captive Setting", - "Peasant Setting" - ] - }, - "Taskmaster": { - "time": 6, - "res": 15, - "leads": [ - "City", - "Outcast", - "Soldier" - ], - "skills": [ - [ - 5, - "Intimidation", - "Brawling", - "Sing", - "Conspicuous", - "Lazy Bastard-wise" - ] - ], - "traits": [ - 1, - "Hard-hearted", - "Mean", - "Barker", - "Booming Voice" - ], - "requires": "Village Sergeant or any Soldier lifepath.", - "requires_expr": [ - "village sergeant", - "professional soldier subsetting:runner", - "professional soldier subsetting:apprentice", - "professional soldier subsetting:musician", - "professional soldier subsetting:foot soldier", - "professional soldier subsetting:archer", - "professional soldier subsetting:crossbowman", - "professional soldier subsetting:sailor", - "professional soldier subsetting:herald", - "professional soldier subsetting:bannerman", - "professional soldier subsetting:scout", - "professional soldier subsetting:sergeant", - "professional soldier subsetting:veteran", - "professional soldier subsetting:cavalryman", - "professional soldier subsetting:journeyman", - "professional soldier subsetting:armorer", - "professional soldier subsetting:atilliator", - "professional soldier subsetting:chaplain", - "professional soldier subsetting:engineer", - "professional soldier subsetting:wizard of war", - "professional soldier subsetting:quartermaster", - "professional soldier subsetting:captain" - ], - "key_leads": [ - "City Dweller Setting", - "Outcast Subsetting", - "Professional Soldier Subsetting" - ] - }, - "Serving Wench (Bitter)": { - "display_name": "Serving Wench", - "time": 3, - "res": 5, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Peasant", - "Villager", - "City", - "Court", - "Servitude", - "Outcast", - "Soldier", - "Seafaring", - "Religious" - ], - "skills": [ - [ - 4, - "Soothing Platitudes", - "Ugly Truth", - "Customer-wise", - "Sleight Of Hand" - ] - ], - "traits": [ - 2, - "Extremely Bitter", - "Ugly", - "Drop Dead Gorgeous", - "Buxom" - ], - "restrict": "Character must be female.", - "requires_expr": [ - "+sex", - "female" - ], - "key_leads": [ - "Peasant Setting", - "Villager Setting", - "City Dweller Setting", - "Noble Court Subsetting", - "Servitude And Captive Setting", - "Outcast Subsetting", - "Professional Soldier Subsetting", - "Seafaring Setting", - "Religious Subsetting" - ] - }, - "Serving Wench (Ugly)": { - "display_name": "Serving Wench", - "time": 3, - "res": 5, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Peasant", - "Villager", - "City", - "Court", - "Servitude", - "Outcast", - "Soldier", - "Seafaring", - "Religious" - ], - "skills": [ - [ - 4, - "Soothing Platitudes", - "Ugly Truth", - "Customer-wise", - "Sleight Of Hand" - ] - ], - "traits": [ - 2, - "Ugly", - "Extremely Bitter", - "Drop Dead Gorgeous", - "Buxom" - ], - "restrict": "Character must be female.", - "requires_expr": [ - "+sex", - "female" - ], - "key_leads": [ - "Peasant Setting", - "Villager Setting", - "City Dweller Setting", - "Noble Court Subsetting", - "Servitude And Captive Setting", - "Outcast Subsetting", - "Professional Soldier Subsetting", - "Seafaring Setting", - "Religious Subsetting" - ] - }, - "Serving Wench (Gorgeous)": { - "display_name": "Serving Wench", - "time": 3, - "res": 5, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Peasant", - "Villager", - "City", - "Court", - "Servitude", - "Outcast", - "Soldier", - "Seafaring", - "Religious" - ], - "skills": [ - [ - 4, - "Soothing Platitudes", - "Ugly Truth", - "Customer-wise", - "Sleight Of Hand" - ] - ], - "traits": [ - 2, - "Drop Dead Gorgeous", - "Ugly", - "Extremely Bitter", - "Buxom" - ], - "restrict": "Character must be female.", - "requires_expr": [ - "+sex", - "female" - ], - "key_leads": [ - "Peasant Setting", - "Villager Setting", - "City Dweller Setting", - "Noble Court Subsetting", - "Servitude And Captive Setting", - "Outcast Subsetting", - "Professional Soldier Subsetting", - "Seafaring Setting", - "Religious Subsetting" - ] - }, - "Serving Wench (Buxom)": { - "display_name": "Serving Wench", - "time": 3, - "res": 5, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Peasant", - "Villager", - "City", - "Court", - "Servitude", - "Outcast", - "Soldier", - "Seafaring", - "Religious" - ], - "skills": [ - [ - 4, - "Soothing Platitudes", - "Ugly Truth", - "Customer-wise", - "Sleight Of Hand" - ] - ], - "traits": [ - 2, - "Buxom", - "Drop Dead Gorgeous", - "Ugly", - "Extremely Bitter" - ], - "restrict": "Character must be female.", - "requires_expr": [ - "+sex", - "female" - ], - "key_leads": [ - "Peasant Setting", - "Villager Setting", - "City Dweller Setting", - "Noble Court Subsetting", - "Servitude And Captive Setting", - "Outcast Subsetting", - "Professional Soldier Subsetting", - "Seafaring Setting", - "Religious Subsetting" - ] - }, - "Hosteller": { - "time": 6, - "res": 15, - "leads": [ - "City", - "Peasant" - ], - "skills": [ - [ - 5, - "Cooking", - "Mending", - "Accounting", - "Soothing Platitudes", - "Guest-wise" - ] - ], - "traits": [ - 1, - "Fixed Smile", - "Gossip" - ], - "restrict": "May not be the character's second lifepath.", - "requires_expr": [ - "+has_n_lifepaths_or_more", - 2 - ], - "key_leads": [ - "City Dweller Setting", - "Peasant Setting" - ] - }, - "Village Guard": { - "time": 3, - "res": 7, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Soldier", - "City", - "Peasant", - "Servitude" - ], - "skills": [ - [ - 4, - "Appropriate Weapons", - "Intimidation", - "Brawling", - "Graft-wise", - "Village-wise", - "Guard-wise" - ] - ], - "traits": [ - 1, - "Thug" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "City Dweller Setting", - "Peasant Setting", - "Servitude And Captive Setting" - ] - }, - "Village Sergeant": { - "time": 5, - "res": 9, - "stat": [ - [ - 1, - "pm" - ] - ], - "leads": [ - "Soldier", - "Servitude", - "Court" - ], - "skills": [ - [ - 6, - "Command", - "Intimidation", - "Field Dressing", - "Appropriate Weapons", - "Shield Training", - "Armor Training", - "Bribe-wise", - "Wealthy-wise" - ] - ], - "traits": [ - 1, - "Overworked", - "Underpaid" - ], - "requires": "Village Guard, Squire, Freebooter, Sergeant-At-Arms or Man-At-Arms.", - "requires_expr": [ - "village guard", - "squire", - "freebooter", - "sergeant-at-arms", - "man-at-arms" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "Servitude And Captive Setting", - "Noble Court Subsetting" - ] - }, - "Corrupt Sergeant": { - "time": 5, - "res": 12, - "stat": [ - [ - 1, - "pm" - ] - ], - "leads": [ - "Soldier", - "Servitude", - "Court" - ], - "skills": [ - [ - 6, - "Intimidation", - "Appropriate Weapons", - "Shield Training", - "Armor Training", - "Bribe-wise", - "Wealthy-wise", - "Criminal-wise" - ] - ], - "traits": [ - 1, - "Predatory" - ], - "requires": "Village Guard, Squire, Freebooter, Sergeant-At-Arms or Man-At-Arms.", - "requires_expr": [ - "village guard", - "squire", - "freebooter", - "sergeant-at-arms", - "man-at-arms" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "Servitude And Captive Setting", - "Noble Court Subsetting" - ] - }, - "Tailor": { - "time": 5, - "res": 12, - "leads": [ - "City", - "Peasant" - ], - "skills": [ - [ - 5, - "Sewing", - "Embroidery", - "Clothing-wise" - ] - ], - "traits": [ - 1, - "Frippery" - ], - "key_leads": [ - "City Dweller Setting", - "Peasant Setting" - ] - }, - "Tax Collector": { - "time": 5, - "res": 15, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "City", - "Peasant", - "Outcast" - ], - "skills": [ - [ - 4, - "Intimidation", - "Accounting", - "Haggling", - "Persuasion" - ] - ], - "traits": [ - 1, - "Hard-hearted", - "Manhunter" - ], - "restrict": "May not be the character's second lifepath.", - "requires_expr": [ - "+has_n_lifepaths_or_more", - 2 - ], - "key_leads": [ - "City Dweller Setting", - "Peasant Setting", - "Outcast Subsetting" - ] - }, - "Cobbler": { - "time": 8, - "res": 20, - "leads": [ - "City", - "Peasant", - "Soldier" - ], - "skills": [ - [ - 4, - "Cobbler", - "Shoe-wise", - "Feet-wise", - "Leather-wise", - "Nail-wise" - ] - ], - "traits": [ - 1, - "Comfortable Shoes" - ], - "requires": "Apprentice", - "requires_expr": [ - "apprentice" - ], - "key_leads": [ - "City Dweller Setting", - "Peasant Setting", - "Professional Soldier Subsetting" - ] - }, - "Farrier": { - "time": 5, - "res": 12, - "leads": [ - "City", - "Peasant", - "Soldier" - ], - "skills": [ - [ - 4, - "Blacksmith", - "Animal Husbandry", - "Horse-wise", - "Haggling" - ] - ], - "traits": [ - 1, - "A Bit Deaf" - ], - "requires": "Apprentice", - "requires_expr": [ - "apprentice" - ], - "key_leads": [ - "City Dweller Setting", - "Peasant Setting", - "Professional Soldier Subsetting" - ] - }, - "Butcher": { - "time": 6, - "res": 15, - "leads": [ - "City", - "Peasant", - "Outcast" - ], - "skills": [ - [ - 4, - "Butchery", - "Cooking", - "Guts-wise", - "Anatomy" - ] - ], - "traits": [ - 2, - "Prominent Scar", - "Thick Skin", - "Stinky", - "Muttering" - ], - "key_leads": [ - "City Dweller Setting", - "Peasant Setting", - "Outcast Subsetting" - ] - }, - "Barber": { - "time": 7, - "res": 16, - "leads": [ - "City", - "Peasant", - "Outcast" - ], - "skills": [ - [ - 5, - "Bloodletting", - "Anatomy", - "Apothecary", - "Villager-wise", - "Gossip-wise" - ] - ], - "traits": [ - 1, - "Agreeable", - "Seemingly Concerned" - ], - "key_leads": [ - "City Dweller Setting", - "Peasant Setting", - "Outcast Subsetting" - ] - }, - "Brewer": { - "time": 8, - "res": 15, - "leads": [ - "City", - "Peasant", - "Court" - ], - "skills": [ - [ - 4, - "Brewer", - "Miller", - "Grain-wise", - "Brew-wise" - ] - ], - "traits": [ - 1, - "Reeks Of Alcohol", - "Ruddy Complexion" - ], - "key_leads": [ - "City Dweller Setting", - "Peasant Setting", - "Noble Court Subsetting" - ] - }, - "Acolyte": { - "time": 7, - "res": 10, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Peasant", - "Servitude", - "City", - "Religious" - ], - "skills": [ - [ - 6, - "Doctrine", - "Bureaucracy", - "Write", - "Read", - "Ritual", - "Religious History", - "Temple-wise" - ] - ], - "traits": [ - 2, - "Tonsured", - "Early Riser", - "Broken", - "Perfect Pitch" - ], - "key_leads": [ - "Peasant Setting", - "Servitude And Captive Setting", - "City Dweller Setting", - "Religious Subsetting" - ] - }, - "Failed Acolyte": { - "time": 6, - "res": 8, - "leads": [ - "Soldier", - "Peasant", - "Outcast" - ], - "skills": [ - [ - 4, - "Temple-wise", - "Dirty Secrets-wise", - "Doctrine", - "Religious History" - ] - ], - "traits": [ - 2, - "Bitter" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "Peasant Setting", - "Outcast Subsetting" - ] - }, - "Village Priest": { - "time": 8, - "res": 15, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Peasant", - "Villager", - "City", - "Servitude", - "Outcast", - "Soldier", - "Seafaring", - "Religious" - ], - "skills": [ - [ - 5, - "Oratory", - "Suasion", - "Symbology" - ] - ], - "traits": [ - 2, - "Vested", - "Devout", - "Faithful" - ], - "requires": "Acolyte", - "requires_expr": [ - "acolyte" - ], - "key_leads": [ - "Peasant Setting", - "Villager Setting", - "City Dweller Setting", - "Servitude And Captive Setting", - "Outcast Subsetting", - "Professional Soldier Subsetting", - "Seafaring Setting", - "Religious Subsetting" - ] - }, - "Venal Priest": { - "time": 9, - "res": 20, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Peasant", - "Villager", - "City", - "Servitude", - "Outcast", - "Soldier", - "Seafaring", - "Religious" - ], - "skills": [ - [ - 6, - "Persuasion", - "Soothing Platitudes", - "Falsehood" - ] - ], - "traits": [ - 2, - "Venal", - "Vested" - ], - "requires": "Acolyte, Clerk, Student or any Religious setting lifepath.", - "requires_expr": [ - "acolyte", - "clerk", - "student", - "religious subsetting:castrati", - "religious subsetting:pardoner", - "religious subsetting:zealous convert", - "religious subsetting:military order", - "religious subsetting:grave digger", - "religious subsetting:porter", - "religious subsetting:notary", - "religious subsetting:custodian", - "religious subsetting:interpreter", - "religious subsetting:archivist", - "religious subsetting:itinerant monk", - "religious subsetting:cloistered monk/nun", - "religious subsetting:temple acolyte", - "religious subsetting:priest", - "religious subsetting:exorcist", - "religious subsetting:inquisitor", - "religious subsetting:theologian", - "religious subsetting:archpriest", - "religious subsetting:canon", - "religious subsetting:abbot/abbess", - "religious subsetting:bishop" - ], - "key_leads": [ - "Peasant Setting", - "Villager Setting", - "City Dweller Setting", - "Servitude And Captive Setting", - "Outcast Subsetting", - "Professional Soldier Subsetting", - "Seafaring Setting", - "Religious Subsetting" - ] - }, - "Apprentice": { - "time": 7, - "res": 7, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "City", - "Peasant", - "Soldier", - "Seafaring" - ], - "skills": [ - [ - 6, - "Mending", - "Blacksmith", - "Carpentry", - "Tanner", - "Potter", - "Cooper" - ] - ], - "traits": [ - 2, - "Broken In", - "Back-breaking Labor" - ], - "key_leads": [ - "City Dweller Setting", - "Peasant Setting", - "Professional Soldier Subsetting", - "Seafaring Setting" - ] - }, - "Journeyman": { - "time": 6, - "res": 15, - "stat": [ - [ - 1, - "pm" - ] - ], - "leads": [ - "City", - "Peasant", - "Soldier", - "Seafaring" - ], - "skills": [ - [ - 5, - "Haggling", - "Appraisal", - "Write", - "Read" - ] - ], - "traits": [ - 1, - "Made Man", - "Geometric" - ], - "requires": "Apprentice", - "requires_expr": [ - "apprentice" - ], - "key_leads": [ - "City Dweller Setting", - "Peasant Setting", - "Professional Soldier Subsetting", - "Seafaring Setting" - ] - }, - "Cloth Dyer": { - "time": 5, - "res": 20, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "City", - "Peasant" - ], - "skills": [ - [ - 6, - "Cloth Dyeing", - "Dye Manufacture", - "Accounting", - "Haggling", - "Fabric-wise", - "Mineral-wise" - ] - ], - "traits": [ - 1, - "Many-colored Hands" - ], - "requires": "Apprentice", - "requires_expr": [ - "apprentice" - ], - "key_leads": [ - "City Dweller Setting", - "Peasant Setting" - ] - }, - "Bowyer": { - "time": 6, - "res": 15, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "City", - "Peasant", - "Outcast" - ], - "skills": [ - [ - 4, - "Bowyer", - "Fletcher", - "Mending", - "Bow", - "Bow-wise" - ] - ], - "traits": [ - 1 - ], - "requires": "Apprentice, Huntsman, Forester or Archer", - "requires_expr": [ - "apprentice", - "huntsman", - "forester", - "archer" - ], - "key_leads": [ - "City Dweller Setting", - "Peasant Setting", - "Outcast Subsetting" - ] - }, - "Master Craftsman": { - "time": 10, - "res": 30, - "stat": [ - [ - 1, - "p" + "Blank Stare", + "Glib", + "Eidetic Memory" ], - [ - 1, - "m" - ] - ], - "leads": [ - "City", - "Soldier" - ], - "skills": [ - [ - 6, - "Craftsman-wise", - "Artisan-wise", - "Materials-wise", - "Tools-wise" - ], - [ - 3, - "General" - ] - ], - "traits": [ - 1, - "Perfectionist", - "Early Riser", - "Stubborn", - "Healthy" - ], - "requires": "Journeyman", - "requires_expr": [ - "journeyman" - ], - "key_leads": [ - "City Dweller Setting", - "Professional Soldier Subsetting" - ] - }, - "Vintner": { - "time": 10, - "res": 40, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Court", - "Peasant", - "City" - ], - "skills": [ - [ - 4, - "Vintner", - "Wine Tasting", - "Estate Management", - "Grape-wise" - ] - ], - "traits": [ - 1, - "Patient", - "Lugubrious" - ], - "restrict": "May not be the character's second lifepath.", - "requires_expr": [ - "+has_n_lifepaths_or_more", - 2 - ], - "key_leads": [ - "Noble Court Subsetting", - "Peasant Setting", - "City Dweller Setting" - ] - }, - "Apiarist": { - "time": 8, - "res": 20, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "City", - "Court", - "Peasant" - ], - "skills": [ - [ - 4, - "Insect Husbandry", - "Carpentry", - "Firebuilding", - "Honey-wise" - ] - ], - "traits": [ - 2, - "Stung Once (Once)", - "Beespeaker" - ], - "key_leads": [ - "City Dweller Setting", - "Noble Court Subsetting", - "Peasant Setting" - ] - }, - "Mining Engineer": { - "time": 8, - "res": 15, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "City", - "Court", - "Soldier" - ], - "skills": [ - [ - 5, - "Prospecting", - "Engineering", - "Ore-wise", - "Rock-wise", - "Command" - ] - ], - "traits": [ - 1, - "Grim", - "Agoraphobic", - "Deep Sense" - ], - "requires": "Apprentice, Miner, Student or Journeyman", - "requires_expr": [ - "apprentice", - "miner", - "student", - "journeyman" - ], - "key_leads": [ - "City Dweller Setting", - "Noble Court Subsetting", - "Professional Soldier Subsetting" - ] - }, - "Town Official": { - "time": 5, - "res": 25, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "City", - "Outcast", - "Soldier" - ], - "skills": [ - [ - 8, - "Rule Of Law", - "Persuasion", - "Etiquette", - "Interrogation", - "Falsehood", - "Town-wise" - ] - ], - "traits": [ - 1, - "Pragmatic" - ], - "requires": "Clerk, Priest or Student", - "requires_expr": [ - "clerk", - "priest", - "student" - ], - "key_leads": [ - "City Dweller Setting", - "Outcast Subsetting", - "Professional Soldier Subsetting" - ] - }, - "Merchant": { - "time": 7, - "res": 30, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "City", - "Outcast", - "Seafaring" - ], - "skills": [ - [ - 6, - "Accounting", - "Persuasion", - "Falsehood", - "Haggling", - "Wholesale-wise", - "Landlord-wise" - ] - ], - "traits": [ - 1, - "Distracted" - ], - "requires": "Accountant, Sea Captain, Shopkeeper, Smuggler, Fence, Vintner or Chamberlain", - "requires_expr": [ - "accountant", - "ship's captain", - "shopkeeper", - "smuggler", - "fence", - "vintner", - "chamberlain" - ], - "key_leads": [ - "City Dweller Setting", - "Outcast Subsetting", - "Seafaring Setting" - ] - }, - "Village Wife": { - "time": 8, - "res": 5, - "stat": [ - [ - 1, - "p" + "key_leads": [ + "Villager Setting", + "City Dweller Setting", + "Servitude And Captive Setting", + "Outcast Subsetting" + ] + }, + "Elder": { + "time": 15, + "res": 5, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Villager", + "Outcast" + ], + "skills": [ + [ + 6, + "Observation", + "Persuasion", + "Ugly Truth", + "Peasant-wise", + "Local History" + ] ], - [ + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Religious", - "City", - "Servitude" - ], - "skills": [ - [ + "Crotchety" + ], + "requires": "The character must have at least 4 lifepaths and start the game over 50 years old.", + "requires_expr": [ + "+and", + [ + "+has_n_lifepaths_or_more", + 4 + ], + [ + "+age_greater_than", + 35 + ] + ], + "key_leads": [ + "Villager Setting", + "Outcast Subsetting" + ] + }, + "Augur": { + "time": 5, + "res": 10, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Servitude", + "Outcast" + ], + "skills": [ + [ + 4, + "Astrology", + "Sorcery", + "Falsehood", + "Ugly Truth", + "Omen-wise" + ] + ], + "traits": [ 2, - "Child Rearing", - "Cooking" - ] - ], - "traits": [ - 1 - ], - "note": "A player who takes the Village Wife lifepath may also choose her husband's lifepath from the Villager setting and may choose from his skills: she gets half of his skill points rounded down. She also receives half of her husband's resource points.", - "restrict": "Character must be female.", - "requires_expr": [ - "+sex", - "female" - ], - "key_leads": [ - "Religious Subsetting", - "City Dweller Setting", - "Servitude And Captive Setting" - ] - } - }, - "City Dweller Setting": { - "City Born": { - "time": 12, - "res": 10, - "leads": [ - "Servitude", - "Court", - "Noble", - "Outcast" - ], - "skills": [ - [ - 4, - "General" - ] - ], - "traits": [ - 1 - ], - "key_leads": [ - "Servitude And Captive Setting", - "Noble Court Subsetting", - "Noble Setting", - "Outcast Subsetting" - ] - }, - "Runner": { - "time": 3, - "res": 7, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Villager", - "Soldier" - ], - "skills": [ - [ - 3, - "Streetwise", - "Inconspicuous" - ] - ], - "traits": [ - 1 - ], - "key_leads": [ - "Villager Setting", - "Professional Soldier Subsetting" - ] - }, - "Urchin": { - "time": 2, - "res": 4, - "leads": [ - "Outcast", - "Servitude", - "Villager" - ], - "skills": [ - [ - 5, - "Inconspicuous", - "Falsehood", - "Streetwise", - "Stealthy" - ] - ], - "traits": [ - 1, - "Sickly", - "Fleet Of Foot", - "Unheeded" - ], - "restrict": "If taken, must be the character's second or third lifepath.", - "requires_expr": [ - "+and", - [ - "+has_n_lifepaths_or_more", - 1 + "Disturbed", + "Dreamer", + "Cassandra", + "Touch Of Ages" ], - [ - "+has_n_lifepaths_or_less", - 2 - ] - ], - "key_leads": [ - "Outcast Subsetting", - "Servitude And Captive Setting", - "Villager Setting" - ] - }, - "Beggar": { - "time": 5, - "res": 4, - "leads": [ - "Outcast", - "Servitude", - "Villager" - ], - "skills": [ - [ - 6, - "City-wise", - "City Guard-wise", - "Wealth-wise", - "Inconspicuous", - "Persuasion", - "Falsehood" - ] - ], - "traits": [ - 1, - "Lame", - "Downtrodden", - "Hurt", - "Broken" - ], - "key_leads": [ - "Outcast Subsetting", - "Servitude And Captive Setting", - "Villager Setting" - ] - }, - "Courier": { - "time": 4, - "res": 8, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Villager", - "Soldier" - ], - "skills": [ - [ - 4, - "Riding", - "Streetwise", - "Countryside-wise" - ] - ], - "traits": [ - 1 - ], - "key_leads": [ - "Villager Setting", - "Professional Soldier Subsetting" - ] - }, - "Laborer": { - "time": 4, - "res": 4, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Soldier", - "Outcast", - "Servitude", - "Peasant" - ], - "skills": [ - [ - 2, - "Ditch Digging", - "Hauling" - ] - ], - "traits": [ - 2, - "Drunk", - "Mind-numbing Work" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "Outcast Subsetting", - "Servitude And Captive Setting", - "Peasant Setting" - ] - }, - "Pilgrim": { - "time": 2, - "res": 3, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Religious", - "Servitude", - "Villager" - ], - "skills": [ - [ - 4, - "Religious Diatribe", - "City-wise", - "Shrine-wise", - "Doctrine" - ] - ], - "traits": [ - 2, - "Tall Tale Teller", - "Stinky" - ], - "key_leads": [ - "Religious Subsetting", - "Servitude And Captive Setting", - "Villager Setting" - ] - }, - "Groom": { - "time": 4, - "res": 5, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Villager", - "Peasant", - "Soldier" - ], - "skills": [ - [ - 6, - "Road-wise", - "Driving", - "Riding", - "Animal Husbandry", - "Mending", - "City-wise", - "Traveler-wise" - ] - ], - "traits": [ - 1, - "Peripatetic" - ], - "key_leads": [ - "Villager Setting", - "Peasant Setting", - "Professional Soldier Subsetting" - ] - }, - "Duelist": { - "time": 4, - "res": 8, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Soldier", - "Outcast", - "Servitude" - ], - "skills": [ - [ - 7, - "Sword", - "Brawling", - "Two-fisted Fighting Training", - "Streetwise", - "Haggling", - "Conspicuous", - "Trial By Combat-wise" - ] - ], - "traits": [ - 1, - "Mercenary", - "Cold-blooded", - "Fearless" - ], - "requires": "Squire or any outcast or soldier lifepath or any guard lifepath.", - "requires_expr": [ - "squire", - "outcast subsetting:urchin", - "outcast subsetting:apostate", - "outcast subsetting:blackmailer", - "outcast subsetting:kidnapper", - "outcast subsetting:pillager", - "outcast subsetting:vagrant", - "outcast subsetting:cripple", - "outcast subsetting:poacher", - "outcast subsetting:deranged", - "outcast subsetting:outlaw", - "outcast subsetting:fence", - "outcast subsetting:gravedigger", - "outcast subsetting:ratcatcher", - "outcast subsetting:beggar", - "outcast subsetting:leper", - "outcast subsetting:prostitute", - "outcast subsetting:whoremonger", - "outcast subsetting:itinerant performer", - "outcast subsetting:insurrectionist", - "outcast subsetting:cultist", - "outcast subsetting:poisoner", - "outcast subsetting:thug", - "outcast subsetting:desperate killer", - "outcast subsetting:bandit", - "outcast subsetting:pirate", - "outcast subsetting:smuggler", - "outcast subsetting:freebooter", - "outcast subsetting:strider", - "outcast subsetting:mad summoner", - "outcast subsetting:rogue wizard", - "outcast subsetting:crazy witch", - "outcast subsetting:heretic priest", - "outcast subsetting:thinker", - "professional soldier subsetting:runner", - "professional soldier subsetting:apprentice", - "professional soldier subsetting:musician", - "professional soldier subsetting:foot soldier", - "professional soldier subsetting:archer", - "professional soldier subsetting:crossbowman", - "professional soldier subsetting:sailor", - "professional soldier subsetting:herald", - "professional soldier subsetting:bannerman", - "professional soldier subsetting:scout", - "professional soldier subsetting:sergeant", - "professional soldier subsetting:veteran", - "professional soldier subsetting:cavalryman", - "professional soldier subsetting:journeyman", - "professional soldier subsetting:armorer", - "professional soldier subsetting:atilliator", - "professional soldier subsetting:chaplain", - "professional soldier subsetting:engineer", - "professional soldier subsetting:wizard of war", - "professional soldier subsetting:quartermaster", - "professional soldier subsetting:captain", - "village guard", - "city guard", - "guard captain" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "Outcast Subsetting", - "Servitude And Captive Setting" - ] - }, - "Coin Clipper": { - "time": 6, - "res": 15, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Outcast", - "Court" - ], - "skills": [ - [ - 5, - "Streetwise", - "Forgery", - "Falsehood", - "Intimidation", - "Counterfeiting", - "Coin-wise" - ] - ], - "traits": [ - 1, - "Light Sleeper" - ], - "key_leads": [ - "Outcast Subsetting", - "Noble Court Subsetting" - ] - }, - "Pickpocket": { - "time": 4, - "res": 8, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Outcast", - "Villager", - "Servitude" - ], - "skills": [ - [ - 5, - "Inconspicuous", - "Streetwise", - "Sleight Of Hand", - "Crowd-wise" - ] - ], - "traits": [ - 1, - "Plain Faced" - ], - "key_leads": [ - "Outcast Subsetting", - "Villager Setting", - "Servitude And Captive Setting" - ] - }, - "Street Thug": { - "time": 3, - "res": 5, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Soldier", - "Outcast", - "Servitude" - ], - "skills": [ - [ - 5, - "Brawling", - "Intimidation", - "Streetwise", - "Darkened Streets-wise" - ] - ], - "traits": [ - 1, - "Cruel", - "Street Smart" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "Outcast Subsetting", - "Servitude And Captive Setting" - ] - }, - "Criminal": { - "time": 5, - "res": 10, - "stat": [ - [ - 1, - "pm" - ] - ], - "leads": [ - "Soldier", - "Outcast", - "Servitude" - ], - "skills": [ - [ - 6, - "Inconspicuous", - "Streetwise", - "Intimidation", - "Knives", - "Climbing" - ] - ], - "traits": [ - 2, - "Cynical", - "Poker Face", - "Rainman", - "Alert" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "Outcast Subsetting", - "Servitude And Captive Setting" - ] - }, - "Confidence Man": { - "time": 4, - "res": 12, - "leads": [ - "Soldier", - "Outcast", - "Villager" - ], - "skills": [ - [ - 5, - "Falsehood", - "Inconspicuous", - "Disguise", - "Persuasion", - "Grift-wise" - ] - ], - "traits": [ - 1 - ], - "key_leads": [ - "Professional Soldier Subsetting", - "Outcast Subsetting", - "Villager Setting" - ] - }, - "City Peddler": { - "time": 5, - "res": 10, - "leads": [ - "Villager", - "City", - "Servitude", - "Outcast" - ], - "skills": [ - [ - 7, - "Mending", - "Sing", - "Haggling", - "Chandler", - "Persuasion", - "Inconspicuous", - "Falsehood" - ] - ], - "traits": [ - 1, - "The Story" - ], - "key_leads": [ - "Villager Setting", - "City Dweller Setting", - "Servitude And Captive Setting", - "Outcast Subsetting" - ] - }, - "Sailor": { - "time": 5, - "res": 5, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Soldier", - "Peasant", - "Servitude", - "Seafaring" - ], - "skills": [ - [ - 5, - "Rigging", - "Knots", - "Brawling", - "Mending", - "Sing", - "Gambling" - ] - ], - "traits": [ - 1, - "Superstitious", - "Sea Legs" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "Peasant Setting", - "Servitude And Captive Setting", - "Seafaring Setting" - ] - }, - "Student": { - "time": 4, - "res": 5, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Peasant", - "Villager", - "City", - "Court", - "Servitude", - "Outcast", - "Soldier", - "Seafaring", - "Religious" - ], - "skills": [ - [ - 11, - "Write", - "Read", - "Philosophy", - "Rule Of Law", - "History", - "Symbology", - "Anatomy", - "Astrology", - "Inconspicuous", - "Streetwise", - "City-wise" - ] - ], - "traits": [ - 3, - "Rabble-rouser", - "Drunk", - "Geometric" - ], - "key_leads": [ - "Peasant Setting", - "Villager Setting", - "City Dweller Setting", - "Noble Court Subsetting", - "Servitude And Captive Setting", - "Outcast Subsetting", - "Professional Soldier Subsetting", - "Seafaring Setting", - "Religious Subsetting" - ] - }, - "Ganymede": { - "time": 5, - "res": 15, - "leads": [ - "Outcast", - "Servitude", - "Court" - ], - "skills": [ - [ - 5, - "Fashion-wise", - "Inconspicuous", - "Conspicuous", - "Soothing Platitudes" - ] - ], - "traits": [ - 2, - "Catamite", - "Flamboyant", - "Comely", - "Sharp Dresser" - ], - "key_leads": [ - "Outcast Subsetting", - "Servitude And Captive Setting", - "Noble Court Subsetting" - ] - }, - "Dilettante": { - "time": 3, - "res": 8, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Villager", - "Court", - "Outcast" - ], - "skills": [ - [ - 4, - "Sorcery-wise", - "Obscure History", - "Falsehood" - ] - ], - "traits": [ - 1, - "Superstitious", - "Entropic", - "Cipher" - ], - "key_leads": [ - "Villager Setting", - "Noble Court Subsetting", - "Outcast Subsetting" - ] - }, - "Neophyte Sorcerer": { - "time": 6, - "res": 12, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Villager", - "Peasant", - "Outcast", - "Servitude" - ], - "skills": [ - [ - 6, - "Write", - "Read", - "Research", - "Symbology", - "Great Masters-wise" - ] - ], - "traits": [ - 1, - "Extremely Respectful Of One's Betters", - "Bitter", - "Gifted" - ], - "key_leads": [ - "Villager Setting", - "Peasant Setting", - "Outcast Subsetting", - "Servitude And Captive Setting" - ] - }, - "Temple Acolyte": { - "time": 5, - "res": 10, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Peasant", - "Outcast", - "Servitude", - "Religious" - ], - "skills": [ - [ - 5, - "Doctrine", - "Bureaucracy", - "Write", - "Read", - "Temple-wise" - ] - ], - "traits": [ - 1, - "Believer", - "Tonsured", - "Faithful" - ], - "key_leads": [ - "Peasant Setting", - "Outcast Subsetting", - "Servitude And Captive Setting", - "Religious Subsetting" - ] - }, - "Sculptor": { - "time": 5, - "res": 8, - "stat": [ - [ - 1, - "pm" - ] - ], - "leads": [ - "Outcast", - "Peasant", - "Court" - ], - "skills": [ - [ - 6, - "Sculpture", - "Mason", - "Blacksmith", - "Carpentry", - "Stone-wise" - ] - ], - "traits": [ - 2, - "Passionate" - ], - "key_leads": [ - "Outcast Subsetting", - "Peasant Setting", - "Noble Court Subsetting" - ] - }, - "Painter": { - "time": 5, - "res": 5, - "stat": [ - [ - 1, - "pm" - ] - ], - "leads": [ - "Outcast", - "Peasant", - "Court" - ], - "skills": [ - [ - 5, - "Painting", - "Illuminations", - "Anatomy", - "Paint-wise" - ] - ], - "traits": [ - 2, - "Odd", - "Perspective", - "Greater Muse" - ], - "key_leads": [ - "Outcast Subsetting", - "Peasant Setting", - "Noble Court Subsetting" - ] - }, - "Composer": { - "time": 4, - "res": 5, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Outcast", - "Peasant", - "Court" - ], - "skills": [ - [ - 5, - "Music Composition", - "Poetry", - "Sing", - "Musical Instrument" - ] - ], - "traits": [ - 2, - "Isoteric", - "Remote" - ], - "key_leads": [ - "Outcast Subsetting", - "Peasant Setting", - "Noble Court Subsetting" - ] - }, - "Dramaturge": { - "time": 4, - "res": 5, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Outcast", - "Peasant", - "Court" - ], - "skills": [ - [ - 5, - "Playwright", - "Composition", - "Write", - "Drama-wise" - ] - ], - "traits": [ - 1, - "Other Life" - ], - "key_leads": [ - "Outcast Subsetting", - "Peasant Setting", - "Noble Court Subsetting" - ] - }, - "Performer": { - "time": 3, - "res": 5, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Villager", - "Outcast", - "Soldier" - ], - "skills": [ - [ - 6, - "Acting", - "Persuasion", - "Sing", - "Falsehood", - "Conspicuous", - "Sleight Of Hand", - "Musical Instrument" - ] - ], - "traits": [ - 2, - "Colorful" - ], - "key_leads": [ - "Villager Setting", - "Outcast Subsetting", - "Professional Soldier Subsetting" - ] - }, - "Tinkerer": { - "time": 7, - "res": 8, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Villager", - "Peasant", - "Outcast" - ], - "skills": [ - [ - 5, - "Mending", - "Scavenging", - "Junk-wise" - ] - ], - "traits": [ - 2 - ], - "key_leads": [ - "Villager Setting", - "Peasant Setting", - "Outcast Subsetting" - ] - }, - "Coal Man": { - "time": 4, - "res": 5, - "leads": [ - "Servitude", - "Peasant", - "Outcast", - "Soldier" - ], - "skills": [ - [ - 4, - "Firebuilding", - "Streetwise", - "Charcoal-wise", - "Haggling" - ] - ], - "traits": [ - 2, - "Hacking Cough" - ], - "key_leads": [ - "Servitude And Captive Setting", - "Peasant Setting", - "Outcast Subsetting", - "Professional Soldier Subsetting" - ] - }, - "Seamstress": { - "time": 5, - "res": 10, - "leads": [ - "Villager", - "Peasant" - ], - "skills": [ - [ - 4, - "Sewing", - "Embroidery", - "Clothing-wise", - "Fashion-wise" - ] - ], - "traits": [ - 1, - "Fretful", - "Sharp Dresser" - ], - "key_leads": [ - "Villager Setting", - "Peasant Setting" - ] - }, - "Barkeep": { - "time": 5, - "res": 15, - "leads": [ - "Villager", - "Peasant" - ], - "skills": [ - [ - 4, - "Drink-wise", - "Drunk-wise", - "Persuasion" - ] - ], - "traits": [ - 1, - "Good Listener" - ], - "key_leads": [ - "Villager Setting", - "Peasant Setting" - ] - }, - "Shopkeeper": { - "time": 6, - "res": 16, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Villager", - "Peasant" - ], - "skills": [ - [ - 4, - "Merchant-wise", - "Haggling", - "Accounting", - "Observation" - ] - ], - "key_leads": [ - "Villager Setting", - "Peasant Setting" - ] - }, - "Baker": { - "time": 6, - "res": 10, - "leads": [ - "Villager", - "Peasant" - ], - "skills": [ - [ - 5, - "Baking", - "Cooking", - "Daily Bread-wise", - "Sweet Tooth-wise" - ] - ], - "traits": [ - 1, - "Floury" - ], - "key_leads": [ - "Villager Setting", - "Peasant Setting" - ] - }, - "Alewife": { - "time": 6, - "res": 12, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Court", - "Peasant", - "Villager" - ], - "skills": [ - [ - 5, - "Brewer", - "Mending", - "Drinking", - "Administration", - "Drunk Husband-wise" - ] - ], - "traits": [ - 1, - "Domineering Presence" - ], - "restrict": "Character must be female", - "requires_expr": [ - "+sex", - "female" - ], - "key_leads": [ - "Noble Court Subsetting", - "Peasant Setting", - "Villager Setting" - ] - }, - "Conner": { - "time": 6, - "res": 12, - "leads": [ - "Court", - "Peasant", - "Villager" - ], - "skills": [ - [ - 5, - "Brewer", - "Mending", - "Drinking", - "Cooper", - "Beer-wise" - ] - ], - "traits": [ - 1, - "Red Cheeks", - "Drunk" - ], - "key_leads": [ - "Noble Court Subsetting", - "Peasant Setting", - "Villager Setting" - ] - }, - "Clerk": { - "time": 4, - "res": 9, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Villager", - "Outcast", - "Soldier" - ], - "skills": [ - [ - 4, - "Bureaucracy", - "Write", - "Read", - "Accounting", - "Bribe-wise", - "Paperwork-wise" - ] - ], - "traits": [ - 1 - ], - "key_leads": [ - "Villager Setting", - "Outcast Subsetting", - "Professional Soldier Subsetting" - ] - }, - "Scribe": { - "time": 7, - "res": 10, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Villager", - "Peasant" - ], - "skills": [ - [ - 5, - "Write", - "Illuminations", - "Read", - "Handwriting-wise" - ] - ], - "traits": [ - 1, - "Near-sighted", - "Cramped Hands" - ], - "requires": "Student, Acolyte or Clerk", - "requires_expr": [ - "student", - "acolyte", - "clerk" - ], - "key_leads": [ - "Villager Setting", - "Peasant Setting" - ] - }, - "Accountant": { - "time": 10, - "res": 15, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Villager", - "Peasant" - ], - "skills": [ - [ - 4, - "Accounting", - "Bureaucracy", - "Write", - "Read", - "Ledger-wise" - ] - ], - "traits": [ - 1, - "Bored" - ], - "requires": "Clerk, Young Lady or Student", - "requires_expr": [ - "clerk", - "young lady", - "student" - ], - "key_leads": [ - "Villager Setting", - "Peasant Setting" - ] - }, - "Scholar": { - "time": 10, - "res": 15, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Villager", - "Outcast", - "Court" - ], - "skills": [ - [ - 11, - "Read", - "Research", - "History", - "Philosophy", - "Symbology", - "Instruction", - "Illuminations", - "Foreign Languages", - "Ancient Languages" - ] - ], - "traits": [ - 1, - "Know It All", - "Bookworm" - ], - "requires": "Scribe, Thinker, Archivist, Interpreter, Custodian, Bishop or any sorcerous lifepath", - "requires_expr": [ - "scribe", - "thinker", - "archivist", - "interpreter", - "custodian", - "bishop", - "augur", - "sorcerer", - "court sorcerer", - "rogue wizard", - "wizard of war", - "neophyte sorcerer" - ], - "key_leads": [ - "Villager Setting", - "Outcast Subsetting", - "Noble Court Subsetting" - ] - }, - "Moneylender": { - "time": 8, - "res": 20, - "leads": [ - "Villager", - "Peasant", - "Outcast" - ], - "skills": [ - [ - 4, - "Currency-wise", - "Haggling", - "Accounting" - ] - ], - "traits": [ - 1, - "Penny-wise" - ], - "key_leads": [ - "Villager Setting", - "Peasant Setting", - "Outcast Subsetting" - ] - }, - "Tax Collector": { - "time": 5, - "res": 18, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Villager", - "Peasant", - "Outcast" - ], - "skills": [ - [ - 4, - "Intimidation", - "Accounting", - "Haggling", - "Interrogation" - ] - ], - "traits": [ - 1, - "Hard-hearted" - ], - "restrict": "May not be the character's second lifepath.", - "requires_expr": [ - "+has_n_lifepaths_or_more", - 2 - ], - "key_leads": [ - "Villager Setting", - "Peasant Setting", - "Outcast Subsetting" - ] - }, - "Taskmaster": { - "time": 6, - "res": 15, - "stat": [ - [ - 1, - "pm" - ] - ], - "leads": [ - "Villager", - "Outcast", - "Soldier" - ], - "skills": [ - [ - 5, - "Intimidation", - "Brawling", - "Sing", - "Conspicuous", - "Laborer-wise" - ] - ], - "traits": [ - 1, - "Intimidating", - "Dreadful" - ], - "restrict": "May not be the character's second lifepath", - "requires_expr": [ - "+has_n_lifepaths_or_more", - 2 - ], - "key_leads": [ - "Villager Setting", - "Outcast Subsetting", - "Professional Soldier Subsetting" - ] - }, - "Mercenary Captain": { - "time": 5, - "res": 15, - "stat": [ - [ - 1, - "pm" - ] - ], - "leads": [ - "Soldier", - "Seafaring", - "Outcast" - ], - "skills": [ - [ - 6, - "Pilot", - "Fat Merchant-wise", - "Sword", - "Climbing", - "Intimidation" - ] - ], - "traits": [ - 2, - "Predatory" - ], - "requires": "Sailor, Pirate or Knight", - "requires_expr": [ - "sailor", - "pirate", - "knight" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "Seafaring Setting", - "Outcast Subsetting" - ] - }, - "City Guard": { - "time": 5, - "res": 9, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Soldier", - "Outcast" - ], - "skills": [ - [ - 5, - "Brawling", - "Intimidation", - "Drinking", - "Appropriate Weapons", - "Armor Training" - ] - ], - "traits": [ - 1, - "Drunk" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "Outcast Subsetting" - ] - }, - "Sergeant-at-arms": { - "time": 6, - "res": 11, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Soldier", - "Outcast" - ], - "skills": [ - [ - 6, - "Intimidation", - "Appropriate Weapons", - "Armor Training", - "Field Dressing" - ] - ], - "traits": [ - 1, - "Overworked" - ], - "requires": "Any Guard lifepath, Marine, First Mate, Foot Soldier, Freebooter, Squire, Man-At-Arms, Cavalryman", - "requires_expr": [ - "village guard", - "city guard", - "guard captain", - "marine", - "first mate", - "foot soldier", - "freebooter", - "squire", - "man-at-arms", - "cavalryman" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "Outcast Subsetting" - ] - }, - "Guard Captain": { - "time": 6, - "res": 15, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Soldier", - "Outcast", - "Court" - ], - "skills": [ - [ - 6, - "Etiquette", - "Riding", - "Intimidation", - "Command", - "Appropriate Weapons" - ] - ], - "traits": [ - 1, - "Exasperated" - ], - "requires": "Knight, Captain or any Sergeant", - "requires_expr": [ - "knight", - "captain", - "village sergeant", - "corrupt sergeant", - "sergeant-at-arms", - "sergeant" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "Outcast Subsetting", - "Noble Court Subsetting" - ] - }, - "Apprentice": { - "time": 7, - "res": 8, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Villager", - "Peasant", - "Soldier", - "Seafaring" - ], - "skills": [ - [ - 6, - "Mending", - "Write", - "Read", - "Hauling", - "Driving", - "Ditch Digging" - ] - ], - "traits": [ - 2, - "Broken In", - "Back-breaking Labor" - ], - "key_leads": [ - "Villager Setting", - "Peasant Setting", - "Professional Soldier Subsetting", - "Seafaring Setting" - ] - }, - "Apprentice Artisan": { - "time": 8, - "res": 10, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Villager", - "Soldier" - ], - "skills": [ - [ - 8, - "Artisan-wise", - "Mason", - "Blacksmith", - "Coppersmith", - "Whitesmith", - "Carpentry", - "Write", - "Read", - "Jargon" - ] - ], - "traits": [ - 1 - ], - "key_leads": [ - "Villager Setting", - "Professional Soldier Subsetting" - ] - }, - "Journeyman": { - "time": 6, - "res": 15, - "stat": [ - [ - 1, - "pm" - ] - ], - "leads": [ - "Villager", - "Peasant", - "Soldier", - "Seafaring" - ], - "skills": [ - [ - 7, - "Haggling", - "Appraisal", - "Blacksmith", - "Carpentry", - "Tanner", - "Potter", - "Cooper" - ] - ], - "traits": [ - 1, - "Made Man", - "Geometric" - ], - "requires": "Apprentice", - "requires_expr": [ - "apprentice" - ], - "key_leads": [ - "Villager Setting", - "Peasant Setting", - "Professional Soldier Subsetting", - "Seafaring Setting" - ] - }, - "Engraver": { - "time": 7, - "res": 15, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Soldier", - "Court" - ], - "skills": [ - [ - 4, - "Engraving", - "Etching", - "Jargon" - ] - ], - "traits": [ - 1, - "Gentle But Firm" - ], - "requires": "Journeyman", - "requires_expr": [ - "journeyman" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "Noble Court Subsetting" - ] - }, - "Saddler": { - "time": 8, - "res": 25, - "stat": [ - [ - 1, - "pm" - ] - ], - "leads": [ - "Villager", - "Soldier", - "Court" - ], - "skills": [ - [ - 6, - "Saddlery", - "Tanner", - "Sewing", - "Embroidery", - "Mending", - "Mount-wise" - ] - ], - "traits": [ - 1 - ], - "requires": "Journeyman", - "requires_expr": [ - "journeyman" - ], - "key_leads": [ - "Villager Setting", - "Professional Soldier Subsetting", - "Noble Court Subsetting" - ] - }, - "Armorer": { - "time": 10, - "res": 25, - "leads": [ - "Soldier", - "Court", - "Outcast" - ], - "skills": [ - [ - 7, - "Swordsman-wise", - "Blacksmith", - "Tanner", - "Armorer", - "Weaponsmith" - ] - ], - "traits": [ - 1, - "Diligent" - ], - "requires": "Journeyman", - "requires_expr": [ - "journeyman" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "Noble Court Subsetting", - "Outcast Subsetting" - ] - }, - "Plumber": { - "time": 7, - "res": 20, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Court", - "Outcast" - ], - "skills": [ - [ - 5, - "Plumbing", - "Engineering", - "Coppersmith", - "Waterworks-wise" - ] - ], - "traits": [ - 1, - "A Touch Of Madness" - ], - "requires": "Journeyman", - "requires_expr": [ - "journeyman" - ], - "key_leads": [ - "Noble Court Subsetting", - "Outcast Subsetting" - ] - }, - "Locksmith": { - "time": 8, - "res": 13, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Peasant", - "Villager" - ], - "skills": [ - [ - 4, - "Locksmith", - "Haggling", - "Lock-wise" - ] - ], - "traits": [ - 1, - "Steady Hands" - ], - "requires": "Journeyman", - "requires_expr": [ - "journeyman" - ], - "key_leads": [ - "Peasant Setting", - "Villager Setting" - ] - }, - "Jeweler": { - "time": 9, - "res": 20, - "leads": [ - "Villager", - "Peasant" - ], - "skills": [ - [ - 5, - "Jeweler", - "Lapidary", - "Appraisal", - "Haggling", - "Falsehood" - ] - ], - "traits": [ - 1, - "Guarded" - ], - "requires": "Journeyman", - "requires_expr": [ - "journeyman" - ], - "key_leads": [ - "Villager Setting", - "Peasant Setting" - ] - }, - "Gaol Warden": { - "time": 4, - "res": 15, - "leads": [ - "Outcast", - "Court", - "Soldier", - "Villager" - ], - "skills": [ - [ - 4, - "Administration", - "Etiquette", - "Gaol-wise", - "Everybody's Innocent-wise" - ] - ], - "traits": [ - 1 - ], - "requires": "Born Noble, Merchant, Sergeant, Man-At-Arms or Judge", - "requires_expr": [ - "born noble", - "merchant", - "sergeant", - "man-at-arms", - "judge" - ], - "key_leads": [ - "Outcast Subsetting", - "Noble Court Subsetting", - "Professional Soldier Subsetting", - "Villager Setting" - ] - }, - "Advocate": { - "time": 6, - "res": 25, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Outcast", - "Court", - "Villager" - ], - "skills": [ - [ - 6, - "Rule Of Law", - "Bureaucracy", - "Persuasion", - "History", - "Rhetoric" - ] - ], - "traits": [ - 1, - "Shrewd" - ], - "requires": "Student or Young Lady", - "requires_expr": [ - "student", - "young lady" - ], - "key_leads": [ - "Outcast Subsetting", - "Noble Court Subsetting", - "Villager Setting" - ] - }, - "Doctor": { - "time": 7, - "res": 20, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Outcast", - "Court", - "Villager" - ], - "skills": [ - [ - 6, - "Anatomy", - "Apothecary", - "Bloodletting", - "Surgery", - "Soothing Platitudes" - ] - ], - "traits": [ - 2, - "Frustrated" - ], - "requires": "Student or Young Lady", - "requires_expr": [ - "student", - "young lady" - ], - "key_leads": [ - "Outcast Subsetting", - "Noble Court Subsetting", - "Villager Setting" - ] - }, - "Physician": { - "time": 5, - "res": 15, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Court", - "Soldier" - ], - "skills": [ - [ - 6, - "Herbalism", - "Apothecary", - "Anatomy", - "Research", - "Herbalist-wise" - ] - ], - "traits": [ - 1 - ], - "requires": "Midwife, Young Lady or Student", - "requires_expr": [ - "midwife", - "young lady", - "student" - ], - "key_leads": [ - "Noble Court Subsetting", - "Professional Soldier Subsetting" - ] - }, - "Hospital Warden": { - "time": 4, - "res": 15, - "leads": [ - "Outcast", - "Servitude", - "Religious" - ], - "skills": [ - [ - 5, - "Administration", - "Beggar-wise", - "Vagrant-wise", - "Leper-wise" - ] - ], - "traits": [ - 2, - "Overworked", - "Generous", - "Venal", - "Hypochondriac" - ], - "requires": "Any Noble, Noble Court or Religious lifepath", - "requires_expr": [ - "noble setting:born noble", - "noble setting:bastard", - "noble setting:page", - "noble setting:student", - "noble setting:squire", - "noble setting:arcane devotee", - "junior student", - "noble setting:religious acolyte", - "noble setting:young lady", - "noble setting:knight", - "noble setting:lady", - "noble setting:lord", - "noble setting:dame", - "noble setting:baron", - "noble setting:viscount", - "noble setting:count", - "noble setting:duke", - "noble setting:noble prince", - "noble setting:prince of the blood", - "noble court subsetting:minstrel", - "noble court subsetting:court jester", - "noble court subsetting:court artist", - "noble court subsetting:servant", - "noble court subsetting:nurse", - "noble court subsetting:groom", - "noble court subsetting:gardener", - "noble court subsetting:torturer", - "noble court subsetting:forester", - "noble court subsetting:student", - "noble court subsetting:page", - "noble court subsetting:man-at-arms", - "noble court subsetting:falconer", - "noble court subsetting:huntsman", - "noble court subsetting:herald", - "noble court subsetting:court chef", - "noble court subsetting:squire", - "noble court subsetting:young lady", - "noble court subsetting:knight", - "noble court subsetting:courtier", - "noble court subsetting:governess", - "noble court subsetting:chaplain", - "noble court subsetting:court sorcerer", - "noble court subsetting:court lawyer", - "noble court subsetting:court doctor", - "noble court subsetting:chronicler", - "noble court subsetting:armorer", - "noble court subsetting:atilliator", - "noble court subsetting:court priest", - "noble court subsetting:steward", - "noble court subsetting:master of horses", - "noble court subsetting:master of hounds", - "noble court subsetting:hostage", - "noble court subsetting:bailiff", - "noble court subsetting:justicar", - "noble court subsetting:coroner", - "noble court subsetting:constable", - "noble court subsetting:treasurer", - "noble court subsetting:chamberlain", - "noble court subsetting:advisor to the court", - "religious subsetting:castrati", - "religious subsetting:pardoner", - "religious subsetting:zealous convert", - "religious subsetting:military order", - "religious subsetting:grave digger", - "religious subsetting:porter", - "religious subsetting:notary", - "religious subsetting:custodian", - "religious subsetting:interpreter", - "religious subsetting:archivist", - "religious subsetting:itinerant monk", - "religious subsetting:cloistered monk/nun", - "religious subsetting:temple acolyte", - "religious subsetting:priest", - "religious subsetting:exorcist", - "religious subsetting:inquisitor", - "religious subsetting:theologian", - "religious subsetting:archpriest", - "religious subsetting:canon", - "religious subsetting:abbot/abbess", - "religious subsetting:bishop" - ], - "key_leads": [ - "Outcast Subsetting", - "Servitude And Captive Setting", - "Religious Subsetting" - ] - }, - "Banker": { - "time": 10, - "res": 60, - "leads": [ - "Court", - "Noble" - ], - "skills": [ - [ - 4, - "Accounting", - "Administration", - "Currency-wise" - ], - [ + "requires": "Midwife, Country Wife or must be female and character has no more than three lifepaths total.", + "requires_expr": [ + "+or", + [ + "midwife", + "country wife" + ], + [ + "+and", + [ + "+sex", + "female" + ], + [ + "+has_n_lifepaths_or_less", + 2 + ] + ] + ], + "key_leads": [ + "Servitude And Captive Setting", + "Outcast Subsetting" + ] + }, + "Itinerant Priest": { + "time": 6, + "res": 8, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Villager", + "Outcast", + "City", + "Religious" + ], + "skills": [ + [ + 7, + "Oratory", + "Suasion", + "Chandler", + "Riding", + "Write", + "Read", + "Doctrine" + ] + ], + "traits": [ 2, - "General" - ] - ], - "traits": [ - 1, - "Intense" - ], - "requires": "Merchant, Moneylender, Steward, Accountant or Chamberlain", - "requires_expr": [ - "merchant", - "moneylender", - "steward", - "accountant", - "chamberlain" - ], - "key_leads": [ - "Noble Court Subsetting", - "Noble Setting" - ] - }, - "Merchant": { - "time": 6, - "res": 30, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Villager", - "Peasant", - "Court" - ], - "skills": [ - [ - 6, - "Accounting", - "Haggling", - "Supplier-wise", - "Lord-wise", - "Peasant-wise" - ] - ], - "requires": "Master Craftsman, Master of Horses, Master of Hounds, Moneylender, Steward, Jeweler, Saddler, Armorer, Cobbler, Courtier or Chamberlain", - "requires_expr": [ - "master craftsman", - "master of horses", - "master of hounds", - "moneylender", - "steward", - "jeweler", - "saddler", - "armorer", - "cobbler", - "courtier", - "chamberlain" - ], - "key_leads": [ - "Villager Setting", - "Peasant Setting", - "Noble Court Subsetting" - ] - }, - "Sorcerer": { - "time": 6, - "res": 32, - "stat": [ - [ - 1, - "p" + "Dusty", + "Faithful" ], - [ - 1, - "m" - ] - ], - "leads": [ - "Villager", - "Outcast", - "Court" - ], - "skills": [ - [ - 6, - "Sorcery", - "Enchanting", - "Calligraphy" - ] - ], - "traits": [ - 1 - ], - "requires": "Neophyte Sorcerer, Arcane Devotee or Weather Witch", - "requires_expr": [ - "neophyte sorcerer", - "arcane devotee", - "weather witch" - ], - "key_leads": [ - "Villager Setting", - "Outcast Subsetting", - "Noble Court Subsetting" - ] - }, - "Temple Priest": { - "time": 5, - "res": 20, - "leads": [ - "Peasant", - "Villager", - "City", - "Court", - "Servitude", - "Outcast", - "Soldier", - "Seafaring", - "Religious" - ], - "skills": [ - [ - 8, - "Church Politics-wise", - "Doctrine", - "Oratory", - "Suasion", - "Symbology" - ] - ], - "traits": [ - 2, - "Vested", - "Aloof", - "Imperious", - "Strong-willed" - ], - "requires": "Religious Acolyte, Temple Acolyte or Military Order", - "requires_expr": [ - "religious acolyte", - "temple acolyte", - "military order" - ], - "key_leads": [ - "Peasant Setting", - "Villager Setting", - "City Dweller Setting", - "Noble Court Subsetting", - "Servitude And Captive Setting", - "Outcast Subsetting", - "Professional Soldier Subsetting", - "Seafaring Setting", - "Religious Subsetting" - ] - }, - "Judge": { - "time": 10, - "res": 30, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Court", - "Villager" - ], - "skills": [ - [ - 5, - "Rule Of Law", - "Amercement", - "Criminal-wise", - "Interrogation" - ] - ], - "traits": [ - 2, - "Ornery", - "Quick-witted" - ], - "requires": "Town Official, Tax Collector, Bailiff or Justicar", - "requires_expr": [ - "town official", - "tax collector", - "bailiff", - "justicar" - ], - "key_leads": [ - "Noble Court Subsetting", - "Villager Setting" - ] - }, - "Municipal Minister": { - "time": 9, - "res": 30, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Villager", - "Court", - "Outcast" - ], - "skills": [ - [ - 6, - "Persuasion", - "Rule Of Law", - "Administration", - "Oratory", - "Law-wise", - "Minister-wise" - ] - ], - "requires": "Town Official, Scholar, Priest, Bishop, Captain, Sea Captain, Artisan, Master Craftsman, Knight, Courtier or Master of Horses", - "requires_expr": [ - "town official", - "scholar", - "priest", - "bishop", - "captain", - "ship's captain", - "artisan", - "master craftsman", - "knight", - "courtier", - "master of horses" - ], - "key_leads": [ - "Villager Setting", - "Noble Court Subsetting", - "Outcast Subsetting" - ] - }, - "Artisan": { - "time": 10, - "res": 45, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Soldier", - "Court" - ], - "skills": [ - [ - 9, - "Jargon", - "Mason", - "Engineering", - "Architect" - ] - ], - "traits": [ - 1, - "Self-confident" - ], - "requires": "Apprentice Artisan, Engineer or Master Craftsman", - "requires_expr": [ - "apprentice artisan", - "engineer", - "master craftsman" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "Noble Court Subsetting" - ] - }, - "Master Craftsman": { - "time": 10, - "res": 45, - "stat": [ - [ - 1, - "p" + "requires": "Any Acolyte lifepath from any setting.", + "requires_expr": [ + "acolyte", + "failed acolyte", + "temple acolyte", + "religious acolyte" ], - [ - 1, - "m" - ] - ], - "leads": [ - "Villager", - "Court", - "Soldier" - ], - "skills": [ - [ - 6, - "Craftsman-wise", - "Artisan-wise", - "Materials-wise", - "Tools-wise" - ], - [ - 3, - "General" - ] - ], - "traits": [ - 2, - "Ambitious", - "Charismatic" - ], - "requires": "Journeyman and one of the following: Locksmith, Plumber, Engraver, Saddler, Blacksmith, Armorer, Atilliator, Cobbler, Bowyer or Taskmaster", - "requires_expr": [ - "+and", - [ - "journeyman" + "key_leads": [ + "Villager Setting", + "Outcast Subsetting", + "City Dweller Setting", + "Religious Subsetting" + ] + }, + "Recluse Wizard": { + "time": 15, + "res": 28, + "stat": [ + [ + 1, + "m" + ] ], - [ - "locksmith", - "plumber", - "engraver", - "saddler", - "blacksmith", - "armorer", - "atilliator", - "cobbler", - "bowyer", - "taskmaster" - ] - ], - "key_leads": [ - "Villager Setting", - "Noble Court Subsetting", - "Professional Soldier Subsetting" - ] - }, - "Bishop": { - "time": 12, - "res": 60, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Court", - "Religious" - ], - "skills": [ - [ - 5, - "Etiquette", - "Bureaucracy", - "Ritual", - "Church-wise", - "City-wise" - ] - ], - "traits": [ - 1, - "Holier" - ], - "requires": "Archpriest, Canon, Steward, Chamberlain or the Your Grace trait", - "requires_expr": [ - "+or", - [ - "archpriest", - "canon", - "steward", - "chamberlain" + "leads": [ + "Outcast", + "Villager", + "City", + "Court" ], - [ - "+trait", - "your grace" - ] - ], - "key_leads": [ - "Noble Court Subsetting", - "Religious Subsetting" - ] - }, - "Magnate": { - "time": 12, - "res": 75, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Peasant", - "Villager", - "City", - "Noble", - "Court", - "Servitude", - "Outcast", - "Soldier", - "Seafaring", - "Religious" - ], - "skills": [ - [ - 6, - "Administration", - "Merchant-wise", - "Court-wise", - "Commodities-wise", - "Pirates-wise", - "Bandit-wise" - ], - [ - 1, - "General" - ] - ], - "traits": [ - 2, - "Self-satisfied", - "Greedy", - "Affinity For Business" - ], - "requires": "Merchant or Master of Horses", - "requires_expr": [ - "merchant", - "master of horses" - ], - "key_leads": [ - "Peasant Setting", - "Villager Setting", - "City Dweller Setting", - "Noble Setting", - "Noble Court Subsetting", - "Servitude And Captive Setting", - "Outcast Subsetting", - "Professional Soldier Subsetting", - "Seafaring Setting", - "Religious Subsetting" - ] - }, - "City Wife": { - "time": 6, - "res": 5, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Religious" - ], - "skills": [ - [ + "skills": [ + [ + 7, + "Astrology", + "Alchemy", + "Enchanting", + "Illuminations", + "Ancient History", + "Obscure History" + ] + ], + "traits": [ 2, - "Child Rearing", - "Husband-wise" - ] - ], - "traits": [ - 1 - ], - "note": "A player who takes the City Wife lifepath may also choose her husband's lifepath from the City Dweller setting and may choose from his skills: she gets half of his skill points rounded down. She also receives a quarter of her husband's resource points.", - "restrict": "Character must be female.", - "requires_expr": [ - "+sex", - "female" - ], - "key_leads": [ - "Religious Subsetting" - ] - } - }, - "Noble Setting": { - "Born Noble": { - "time": 8, - "res": 15, - "leads": [ - "Peasant", - "Villager", - "City", - "Noble", - "Court", - "Servitude", - "Outcast", - "Soldier", - "Seafaring", - "Religious" - ], - "skills": [ - [ - 5, - "General" - ] - ], - "traits": [ - 1, - "Mark Of Privilege", - "Your Lordship", - "Your Grace", - "Your Eminence" - ], - "key_leads": [ - "Peasant Setting", - "Villager Setting", - "City Dweller Setting", - "Noble Setting", - "Noble Court Subsetting", - "Servitude And Captive Setting", - "Outcast Subsetting", - "Professional Soldier Subsetting", - "Seafaring Setting", - "Religious Subsetting" - ] - }, - "Bastard": { - "time": 6, - "res": 15, - "stat": [ - [ - 1, - "pm" - ] - ], - "leads": [ - "Outcast", - "Soldier", - "City", - "Religious" - ], - "skills": [ - [ - 4, - "Family Secret-wise", - "Etiquette", - "Extortion" - ] - ], - "traits": [ - 2, - "Bastard", - "Bitter", - "Cynical", - "Happy-go-lucky" - ], - "restrict": "This must be the character's second lifepath, and may only be taken once", - "requires_expr": [ - "+and", - [ - "+has_n_lifepaths_or_more", - 1 + "Batshit", + "Gifted" ], - [ - "+has_n_lifepaths_or_less", - 1 - ] - ], - "key_leads": [ - "Outcast Subsetting", - "Professional Soldier Subsetting", - "City Dweller Setting", - "Religious Subsetting" - ] - }, - "Page": { - "time": 6, - "res": 15, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Soldier", - "City", - "Servitude" - ], - "skills": [ - [ - 7, - "Riding", - "Brawling", - "Write", - "Read", - "Sword", - "Etiquette" - ] - ], - "traits": [ - 1 - ], - "restrict": "This must be the character's second lifepath, and may only be taken once", - "requires_expr": [ - "+and", - [ - "+has_n_lifepaths_or_more", - 1 + "requires": "A previous lifepath that contains the sorcery skill.", + "requires_expr": [ + "augur", + "sorcerer", + "court sorcerer", + "rogue wizard", + "wizard of war" + ], + "key_leads": [ + "Outcast Subsetting", + "Villager Setting", + "City Dweller Setting", + "Noble Court Subsetting" + ] + }, + "Country Wife": { + "time": 10, + "res": 5, + "stat": [ + [ + 1, + "p" + ], + [ + 1, + "m" + ] + ], + "leads": [ + "Religious" ], - [ - "+has_n_lifepaths_or_less", + "skills": [ + [ + 2, + "Child Rearing", + "Cooking" + ] + ], + "traits": [ 1 - ] - ], - "key_leads": [ - "Professional Soldier Subsetting", - "City Dweller Setting", - "Servitude And Captive Setting" - ] - }, - "Student": { - "time": 4, - "res": 10, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "City", - "Court" - ], - "skills": [ - [ - 8, - "Write", - "Read", - "Rule Of Law", - "Oratory", - "Doctrine", - "Etiquette" - ] - ], - "traits": [ - 1 - ], - "key_leads": [ - "City Dweller Setting", - "Noble Court Subsetting" - ] - }, - "Squire": { - "time": 6, - "res": 15, - "stat": [ - [ - 1, - "p" ], - [ - 1, - "m" - ] - ], - "leads": [ - "Soldier", - "City", - "Servitude", - "Outcast" - ], - "skills": [ - [ - 9, - "Sword", - "Mounted Combat Training", - "Shield Training", - "Armor Training", - "Lance", - "Knives", - "Crossbow" - ] - ], - "traits": [ - 1 - ], - "requires": "Page or any Professional Soldier lifepath", - "requires_expr": [ - "page", - "professional soldier subsetting:runner", - "professional soldier subsetting:apprentice", - "professional soldier subsetting:musician", - "professional soldier subsetting:foot soldier", - "professional soldier subsetting:archer", - "professional soldier subsetting:crossbowman", - "professional soldier subsetting:sailor", - "professional soldier subsetting:herald", - "professional soldier subsetting:bannerman", - "professional soldier subsetting:scout", - "professional soldier subsetting:sergeant", - "professional soldier subsetting:veteran", - "professional soldier subsetting:cavalryman", - "professional soldier subsetting:journeyman", - "professional soldier subsetting:armorer", - "professional soldier subsetting:atilliator", - "professional soldier subsetting:chaplain", - "professional soldier subsetting:engineer", - "professional soldier subsetting:wizard of war", - "professional soldier subsetting:quartermaster", - "professional soldier subsetting:captain" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "City Dweller Setting", - "Servitude And Captive Setting", - "Outcast Subsetting" - ] - }, - "Arcane Devotee": { - "time": 6, - "res": 10, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "City", - "Court", - "Outcast" - ], - "skills": [ - [ - 6, - "Calligraphy", - "Write", - "Read", - "Research", - "Symbology" - ] - ], - "traits": [ - 2, - "Base Humility", - "Gifted" - ], - "key_leads": [ - "City Dweller Setting", - "Noble Court Subsetting", - "Outcast Subsetting" - ] - }, - "Religious Acolyte": { - "time": 5, - "res": 10, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "City", - "Religious", - "Court" - ], - "skills": [ - [ - 6, - "Doctrine", - "Bureaucracy", - "Write", - "Read", - "Etiquette" - ] - ], - "traits": [ - 2, - "Tonsured", - "Faithful" - ], - "key_leads": [ - "City Dweller Setting", - "Religious Subsetting", - "Noble Court Subsetting" - ] - }, - "Young Lady": { - "time": 10, - "res": 20, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "City", - "Religious", - "Court" - ], - "skills": [ - [ - 11, - "Write", - "Read", - "Etiquette", - "Astrology", - "Musical Instrument", - "Composition", - "Field Dressing", - "Apothecary", - "Doctrine" - ] - ], - "traits": [ - 2 - ], - "restrict": "This must be the character's second or third lifepath, and may only be taken once. Character must be female.", - "requires_expr": [ - "+and", - [ + "note": "A player who takes the Country Wife lifepath may also choose her husband's lifepath from the Peasant setting and may choose from his skills: she gets half of his skill points rounded down. She also receives half of her husband's resource points.", + "restrict": "Character must be female.", + "requires_expr": [ "+sex", "female" ], - [ - "+has_n_lifepaths_or_more", - 1 + "key_leads": [ + "Religious Subsetting" + ] + } + }, + "Villager Setting": { + "Village Born": { + "time": 10, + "res": 4, + "leads": [ + "Peasant", + "Servitude", + "Seafaring", + "Religious" + ], + "skills": [ + [ + 3, + "General" + ] ], - [ - "+has_n_lifepaths_or_less", + "traits": [ 2 - ] - ], - "key_leads": [ - "City Dweller Setting", - "Religious Subsetting", - "Noble Court Subsetting" - ] - }, - "Knight": { - "time": 5, - "res": 20, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Soldier", - "City", - "Outcast", - "Religious" - ], - "skills": [ - [ - 10, - "Mounted Combat Training", - "Shield Training", - "Armor Training", - "Appropriate Weapons", - "Intimidation", - "Hunting", - "Conspicuous" - ] - ], - "traits": [ - 2, - "Sworn Homage" - ], - "requires": "Squire or Cavalryman", - "requires_expr": [ - "squire", - "cavalryman" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "City Dweller Setting", - "Outcast Subsetting", - "Religious Subsetting" - ] - }, - "Lady": { - "time": 5, - "res": 25, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "City", - "Outcast", - "Religious", - "Court" - ], - "skills": [ - [ - 11, - "Etiquette", - "Estate Management", - "Persuasion", - "Seduction", - "Inconspicuous", - "Doctrine", - "Husband-wise", - "Estate-wise", - "Staff-wise", - "Court-wise" - ] - ], - "traits": [ - 1 - ], - "requires": "Young Lady, Courtier, Knight or City Wife with Magnate or Bishop chosen as the husband's lifepath", - "requires_expr": [ - "young lady", - "courtier", - "knight", - "city wife" - ], - "key_leads": [ - "City Dweller Setting", - "Outcast Subsetting", - "Religious Subsetting", - "Noble Court Subsetting" - ] - }, - "Lord": { - "time": 7, - "res": 50, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Soldier", - "City", - "Court" - ], - "skills": [ - [ - 6, - "Hunting", - "Dance", - "Sing", - "Falconry", - "Estate Management" - ], - [ - 1, - "General" - ] - ], - "traits": [ - 1 - ], - "requires": "Knight or the Your Lordship trait", - "requires_expr": [ - "+or", - [ - "knight" ], - [ - "+trait", - "your lordship" - ] - ], - "key_leads": [ - "Professional Soldier Subsetting", - "City Dweller Setting", - "Noble Court Subsetting" - ] - }, - "Dame": { - "time": 7, - "res": 40, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "City", - "Court", - "Outcast", - "Religious" - ], - "skills": [ - [ - 3, - "Estate Management", - "Noble-wise" + "key_leads": [ + "Peasant Setting", + "Servitude And Captive Setting", + "Seafaring Setting", + "Religious Subsetting" + ] + }, + "Kid": { + "time": 4, + "res": 3, + "stat": [ + [ + 1, + "p" + ] ], - [ - 2, - "General" - ] - ], - "traits": [ - 1 - ], - "requires": "Lady, City Wife with Magnate or Bishop as the husband's lifepath or the Your Lordship trait", - "requires_expr": [ - "+or", - [ - "lady", - "city wife" + "leads": [ + "Peasant", + "Villager", + "City", + "Servitude", + "Outcast", + "Soldier", + "Seafaring", + "Religious" ], - [ - "+trait", - "your lordship" - ] - ], - "key_leads": [ - "City Dweller Setting", - "Noble Court Subsetting", - "Outcast Subsetting", - "Religious Subsetting" - ] - }, - "Baron": { - "time": 8, - "res": 60, - "stat": [ - [ - 1, - "m" + "skills": [ + [ + 3, + "Trouble-wise", + "Throwing", + "Inconspicuous" + ] ], - [ - 1, - "p" - ] - ], - "leads": [ - "Court", - "Soldier" - ], - "skills": [ - [ + "traits": [ 1, - "General" - ] - ], - "traits": [ - 1, - "Noblesse Oblige", - "Regal Bearing", - "Pompous", - "Sharp Dresser", - "Callous" - ], - "requires": "Knight and the Your Lordship trait; or Magnate, Master of Horses, Steward, Lord, Constable or Justicar", - "requires_expr": [ - "+or", - [ + "Bad Egg", + "Good For Nothing", + "Fleet Of Foot" + ], + "restrict": "If chosen this must be the second lifepath and may only be taken once.", + "requires_expr": [ "+and", [ - "knight" + "+has_n_lifepaths_or_more", + 1 ], [ - "+trait", - "your lordship" + "+has_n_lifepaths_or_less", + 1 ] ], - [ - "magnate", - "master of horses", - "steward", - "lord", - "constable", - "justicar" - ] - ], - "key_leads": [ - "Noble Court Subsetting", - "Professional Soldier Subsetting" - ] - }, - "Viscount": { - "time": 9, - "res": 65, - "stat": [ - [ - 1, - "pm" - ] - ], - "leads": [ - "Court", - "Soldier" - ], - "skills": [ - [ - 2, - "General" - ] - ], - "traits": [ - 1, - "Noblesse Oblige", - "Regal Bearing", - "Pompous", - "Sharp Dresser", - "Callous" - ], - "requires": "Knight and the Your Eminence trait; or Magnate, Baron, Constable or Justicar", - "requires_expr": [ - "+or", - [ - "+and", - [ - "knight" - ], + "key_leads": [ + "Peasant Setting", + "Villager Setting", + "City Dweller Setting", + "Servitude And Captive Setting", + "Outcast Subsetting", + "Professional Soldier Subsetting", + "Seafaring Setting", + "Religious Subsetting" + ] + }, + "Idiot": { + "time": 10, + "res": 4, + "leads": [ + "Outcast", + "Peasant" + ], + "skills": [ [ - "+trait", - "your eminence" + 4, + "Inconspicuous", + "Conspicuous", + "Ugly Truth", + "Village Secrets-wise" ] ], - [ - "magnate", - "baron", - "constable", - "justicar" - ] - ], - "key_leads": [ - "Noble Court Subsetting", - "Professional Soldier Subsetting" - ] - }, - "Count": { - "time": 10, - "res": 70, - "stat": [ - [ + "traits": [ 1, - "pm" - ] - ], - "leads": [ - "Court", - "Soldier" - ], - "skills": [ - [ - 3, - "General" - ] - ], - "traits": [ - 1, - "Noblesse Oblige", - "Regal Bearing", - "Pompous", - "Sharp Dresser", - "Callous" - ], - "requires": "Knight and the Your Eminence trait; or Magnate, Constable or Justicar", - "requires_expr": [ - "+or", - [ - "+and", + "Problems", + "Alcoholic", + "Abused", + "Handicapped" + ], + "key_leads": [ + "Outcast Subsetting", + "Peasant Setting" + ] + }, + "Pilgrim": { + "time": 2, + "res": 4, + "leads": [ + "Religious", + "Servitude", + "City" + ], + "skills": [ [ - "knight" - ], + 5, + "Religious Rumor-wise", + "Road-wise", + "Shrine-wise", + "Alms-wise", + "Relic-wise", + "Doctrine" + ] + ], + "traits": [ + 2, + "Collector" + ], + "key_leads": [ + "Religious Subsetting", + "Servitude And Captive Setting", + "City Dweller Setting" + ] + }, + "Conscript": { + "time": 1, + "res": 5, + "leads": [ + "Servitude", + "Soldier", + "Outcast" + ], + "skills": [ [ - "+trait", - "your eminence" + 2, + "Foraging", + "Baggage Train-wise" ] ], - [ - "magnate", - "constable", - "justicar" - ] - ], - "key_leads": [ - "Noble Court Subsetting", - "Professional Soldier Subsetting" - ] - }, - "Duke": { - "time": 10, - "res": 90, - "stat": [ - [ + "traits": [ 1, - "pm" - ] - ], - "leads": [ - "Court", - "Soldier" - ], - "skills": [ - [ - 3, - "General" - ] - ], - "traits": [ - 1, - "Noblesse Oblige", - "Regal Bearing", - "Pompous", - "Sharp Dresser", - "Callous" - ], - "requires": "Count or Knight and the Your Grace trait", - "requires_expr": [ - "+or", - [ - "+and", + "Hide Before Battle" + ], + "key_leads": [ + "Servitude And Captive Setting", + "Professional Soldier Subsetting", + "Outcast Subsetting" + ] + }, + "Groom": { + "time": 4, + "res": 7, + "leads": [ + "Peasant", + "City", + "Soldier" + ], + "skills": [ [ - "knight" - ], + 4, + "Animal Husbandry", + "Riding", + "Mending", + "Horse-wise", + "Road-wise" + ] + ], + "traits": [ + 1 + ], + "key_leads": [ + "Peasant Setting", + "City Dweller Setting", + "Professional Soldier Subsetting" + ] + }, + "Runner": { + "time": 4, + "res": 6, + "stat": [ [ - "+trait", - "your grace" + 1, + "p" ] ], - [ - "count" - ] - ], - "key_leads": [ - "Noble Court Subsetting", - "Professional Soldier Subsetting" - ] - }, - "Noble Prince": { - "time": 10, - "res": 100, - "stat": [ - [ + "leads": [ + "City", + "Peasant", + "Soldier" + ], + "skills": [ + [ + 3, + "Streetwise", + "Inconspicuous", + "Shortcut-wise" + ] + ], + "traits": [ 1, - "pm" - ] - ], - "leads": [ - "Court", - "Soldier" - ], - "skills": [ - [ - 4, - "General" - ] - ], - "traits": [ - 1, - "Noblesse Oblige", - "Regal Bearing", - "Pompous", - "Sharp Dresser", - "Callous" - ], - "requires": "Duke or Knight and the Your Grace trait", - "requires_expr": [ - "+or", - [ - "+and", + "Skinny", + "Fleet Of Foot" + ], + "key_leads": [ + "City Dweller Setting", + "Peasant Setting", + "Professional Soldier Subsetting" + ] + }, + "Village Peddler": { + "time": 5, + "res": 10, + "stat": [ [ - "knight" - ], + 1, + "m" + ] + ], + "leads": [ + "Peasant", + "Servitude", + "City", + "Outcast" + ], + "skills": [ [ - "+trait", - "your grace" + 7, + "Mending", + "Sing", + "Haggling", + "Chandler", + "Persuasion", + "Inconspicuous", + "Falsehood" ] ], - [ - "duke" - ] - ], - "key_leads": [ - "Noble Court Subsetting", - "Professional Soldier Subsetting" - ] - }, - "Prince Of The Blood": { - "time": "*", - "time_expr": [ - "+range", - 2, - 20 - ], - "res": 60, - "leads": [ - "Court", - "Soldier", - "Religious" - ], - "skills": [ - [ + "traits": [ 2, - "General" - ] - ], - "traits": [ - 2, - "Born To Be King", - "Noblesse Oblige", - "Regal Bearing", - "Pompous", - "Sharp Dresser", - "Callous" - ], - "requires": "The Your Grace trait and express permission from the GM and all players in the current game", - "requires_expr": [ - "+trait", - "your grace" - ], - "note": "Players may take the Prince of the Blood lifepath for any appropriate length of time, between 2 and 20 years.", - "key_leads": [ - "Noble Court Subsetting", - "Professional Soldier Subsetting", - "Religious Subsetting" - ] - } - }, - "Noble Court Subsetting": { - "Minstrel": { - "time": 4, - "res": 10, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "City", - "Outcast", - "Villager" - ], - "skills": [ - [ - 5, - "Poetry", - "Sing", - "Musical Instrument" - ] - ], - "traits": [ - 1, - "Recondite" - ], - "key_leads": [ - "City Dweller Setting", - "Outcast Subsetting", - "Villager Setting" - ] - }, - "Court Jester": { - "time": 5, - "res": 10, - "leads": [ - "Outcast", - "Servitude" - ], - "skills": [ - [ - 7, - "Sing", - "Sleight Of Hand", - "Climbing", - "Conspicuous", - "Throwing", - "Ugly Truth" - ] - ], - "traits": [ - 3, - "Scapegoat", - "Aura Of Innocence" - ], - "key_leads": [ - "Outcast Subsetting", - "Servitude And Captive Setting" - ] - }, - "Court Artist": { - "time": 6, - "res": 15, - "leads": [ - "City", - "Outcast" - ], - "skills": [ - [ - 5, - "Sculpture", - "Painting", - "Engraving", - "Seduction", - "Genius-wise" - ] - ], - "traits": [ - 1, - "Romantic" - ], - "requires": "Court Jester, Painter, Thinker, Scholar or Sculptor", - "requires_expr": [ - "court jester", - "painter", - "thinker", - "scholar", - "sculptor" - ], - "key_leads": [ - "City Dweller Setting", - "Outcast Subsetting" - ] - }, - "Servant": { - "time": 6, - "res": 7, - "leads": [ - "Outcast", - "Servitude" - ], - "skills": [ - [ - 4, - "Inconspicuous", - "Etiquette", - "Court Gossip-wise" - ] - ], - "traits": [ - 2, - "Veneer Of Obedience", - "Lifting Heavy Things", - "Bored" - ], - "key_leads": [ - "Outcast Subsetting", - "Servitude And Captive Setting" - ] - }, - "Nurse": { - "time": 6, - "res": 7, - "leads": [ - "Outcast", - "Servitude", - "Villager" - ], - "skills": [ - [ - 5, - "Child Rearing", - "Etiquette", - "Court Gossip-wise", - "Field Dressing", - "Child-wise" - ] - ], - "traits": [ - 2, - "Maternal" - ], - "restrict": "Character must be female.", - "requires_expr": [ - "+sex", - "female" - ], - "key_leads": [ - "Outcast Subsetting", - "Servitude And Captive Setting", - "Villager Setting" - ] - }, - "Groom": { - "time": 4, - "res": 5, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "City", - "Villager", - "Soldier" - ], - "skills": [ - [ - 5, - "Animal Husbandry", - "Riding", - "Mending", - "Border-wise", - "Road-wise" - ] - ], - "traits": [ - 1 - ], - "key_leads": [ - "City Dweller Setting", - "Villager Setting", - "Professional Soldier Subsetting" - ] - }, - "Gardener": { - "time": 10, - "res": 10, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "City", - "Servitude" - ], - "skills": [ - [ - 7, - "Plant-wise", - "Flower-wise", - "Tree-wise", - "Pest-wise", - "Herbalism", - "Farming", - "Almanac" - ] - ], - "traits": [ - 2, - "Earthy Smell", - "Salt Of The Earth", - "Down To Earth", - "Affinity For Plants" - ], - "key_leads": [ - "City Dweller Setting", - "Servitude And Captive Setting" - ] - }, - "Torturer": { - "time": 5, - "res": 10, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Outcast", - "Servitude", - "Soldier" - ], - "skills": [ - [ - 5, - "Interrogation", - "Torture", - "Anatomy", - "Torture Devices-wise" - ] - ], - "traits": [ - 1, - "Unsavory Madman" - ], - "key_leads": [ - "Outcast Subsetting", - "Servitude And Captive Setting", - "Professional Soldier Subsetting" - ] - }, - "Forester": { - "time": 7, - "res": 9, - "stat": [ - [ - 1, - "pm" - ] - ], - "leads": [ - "Peasant", - "Soldier", - "Villager", - "Outcast" - ], - "skills": [ - [ - 8, - "Observation", - "Orienteering", - "Foraging", - "Survival", - "Tracking", - "Trapper", - "Cudgel", - "Staff", - "Bow", - "Poacher-wise", - "Park-wise" - ] - ], - "traits": [ - 1 - ], - "key_leads": [ - "Peasant Setting", - "Professional Soldier Subsetting", - "Villager Setting", - "Outcast Subsetting" - ] - }, - "Student": { - "time": 4, - "res": 10, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "City", - "Noble", - "Religious" - ], - "skills": [ - [ - 9, - "Write", - "Read", - "Rule Of Law", - "Oratory", - "Doctrine", - "Etiquette" - ] - ], - "traits": [ - 1, - "Dangerous", - "Geometric" - ], - "key_leads": [ - "City Dweller Setting", - "Noble Setting", - "Religious Subsetting" - ] - }, - "Page": { - "time": 6, - "res": 15, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Soldier", - "City", - "Servitude", - "Noble" - ], - "skills": [ - [ - 6, - "Riding", - "Brawling", - "Write", - "Read", - "Sword" - ] - ], - "traits": [ - 1 - ], - "restrict": "This must be the character's second lifepath, and may only be taken once.", - "requires_expr": [ - "+and", - [ - "+has_n_lifepaths_or_more", - 1 + "Odd" + ], + "key_leads": [ + "Peasant Setting", + "Servitude And Captive Setting", + "City Dweller Setting", + "Outcast Subsetting" + ] + }, + "Shopkeeper": { + "time": 6, + "res": 15, + "leads": [ + "City", + "Peasant" + ], + "skills": [ + [ + 5, + "Haggling", + "Accounting", + "Observation", + "Merchant-wise" + ] ], - [ - "+has_n_lifepaths_or_less", + "traits": [ 1 - ] - ], - "key_leads": [ - "Professional Soldier Subsetting", - "City Dweller Setting", - "Servitude And Captive Setting", - "Noble Setting" - ] - }, - "Man-at-arms": { - "time": 6, - "res": 12, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Soldier", - "City", - "Outcast" - ], - "skills": [ - [ - 8, - "Mounted Combat Training", - "Shield Training", - "Armor Training", - "Brawling", - "Intimidation", - "Etiquette", - "Appropriate Weapons" - ] - ], - "traits": [ - 1 - ], - "requires": "Page, Squire or any Professional Soldier lifepath", - "requires_expr": [ - "page", - "squire", - "professional soldier subsetting:runner", - "professional soldier subsetting:apprentice", - "professional soldier subsetting:musician", - "professional soldier subsetting:foot soldier", - "professional soldier subsetting:archer", - "professional soldier subsetting:crossbowman", - "professional soldier subsetting:sailor", - "professional soldier subsetting:herald", - "professional soldier subsetting:bannerman", - "professional soldier subsetting:scout", - "professional soldier subsetting:sergeant", - "professional soldier subsetting:veteran", - "professional soldier subsetting:cavalryman", - "professional soldier subsetting:journeyman", - "professional soldier subsetting:armorer", - "professional soldier subsetting:atilliator", - "professional soldier subsetting:chaplain", - "professional soldier subsetting:engineer", - "professional soldier subsetting:wizard of war", - "professional soldier subsetting:quartermaster", - "professional soldier subsetting:captain" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "City Dweller Setting", - "Outcast Subsetting" - ] - }, - "Falconer": { - "time": 5, - "res": 10, - "stat": [ - [ - 1, - "pm" - ] - ], - "leads": [ - "Peasant", - "Soldier", - "City" - ], - "skills": [ - [ - 4, - "Falconry", - "Animal Husbandry", - "Hunting" - ] - ], - "traits": [ - 2, - "Boaster", - "Wierd", - "Birdie Talk" - ], - "key_leads": [ - "Peasant Setting", - "Professional Soldier Subsetting", - "City Dweller Setting" - ] - }, - "Huntsman": { - "time": 5, - "res": 12, - "stat": [ - [ - 1, - "pm" - ] - ], - "leads": [ - "Peasant", - "Soldier" - ], - "skills": [ - [ - 8, - "Hunting", - "Animal Husbandry", - "Forest-wise", - "Stealthy", - "Cooking", - "Tracking", - "Orienteering", - "Crossbow" - ] - ], - "traits": [ - 1 - ], - "key_leads": [ - "Peasant Setting", - "Professional Soldier Subsetting" - ] - }, - "Herald": { - "time": 4, - "res": 10, - "leads": [ - "Soldier", - "Servitude", - "City" - ], - "skills": [ - [ - 4, - "Heraldry", - "Noble-wise" - ] - ], - "traits": [ - 1, - "Formalist", - "Rainman", - "Eidetic Memory" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "Servitude And Captive Setting", - "City Dweller Setting" - ] - }, - "Court Chef": { - "time": 5, - "res": 14, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Outcast", - "City" - ], - "skills": [ - [ - 5, - "Cooking", - "Sing", - "Herbalism", - "Falsehood" - ] - ], - "traits": [ - 1 - ], - "key_leads": [ - "Outcast Subsetting", - "City Dweller Setting" - ] - }, - "Squire": { - "time": 5, - "res": 14, - "stat": [ - [ + ], + "key_leads": [ + "City Dweller Setting", + "Peasant Setting" + ] + }, + "Clerk": { + "time": 4, + "res": 9, + "leads": [ + "City", + "Outcast", + "Soldier" + ], + "skills": [ + [ + 4, + "Bureaucracy", + "Write", + "Read", + "Contract-wise" + ] + ], + "traits": [ 1, - "p" + "Cramped Hands", + "Mind For Small Details" + ], + "key_leads": [ + "City Dweller Setting", + "Outcast Subsetting", + "Professional Soldier Subsetting" + ] + }, + "Sailor": { + "time": 5, + "res": 5, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Soldier", + "City", + "Peasant", + "Servitude", + "Seafaring" + ], + "skills": [ + [ + 6, + "Rigging", + "Knots", + "Brawling", + "Mending", + "Sing", + "Fishing" + ] ], - [ + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Soldier", - "City", - "Servitude", - "Outcast", - "Noble" - ], - "skills": [ - [ - 9, - "Sword", - "Armor Training", - "Shield Training", - "Lance", - "Brawling", - "Mounted Combat Training", - "Etiquette" - ] - ], - "traits": [ - 1, - "Pragmatic", - "Tough", - "Determined" - ], - "requires": "Corrupt Sergeant, Village Sergeant, Sergeant, Veteran, Page or Man-At-Arms", - "requires_expr": [ - "corrupt sergeant", - "village sergeant", - "sergeant", - "veteran", - "page", - "man-at-arms" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "City Dweller Setting", - "Servitude And Captive Setting", - "Outcast Subsetting", - "Noble Setting" - ] - }, - "Young Lady": { - "time": 9, - "res": 25, - "stat": [ - [ + "Superstitious", + "Sea Legs" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "City Dweller Setting", + "Peasant Setting", + "Servitude And Captive Setting", + "Seafaring Setting" + ] + }, + "Laborer": { + "time": 4, + "res": 4, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Soldier", + "Outcast", + "Servitude", + "Peasant" + ], + "skills": [ + [ + 2, + "Ditch Digging", + "Latrine-wise" + ] + ], + "traits": [ + 2, + "Calloused", + "Starved", + "Broken", + "Hardened", + "Numb" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "Outcast Subsetting", + "Servitude And Captive Setting", + "Peasant Setting" + ] + }, + "Miner": { + "time": 3, + "res": 7, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Soldier", + "Outcast", + "Servitude", + "Peasant" + ], + "skills": [ + [ + 2, + "Mining", + "Cave-in-wise" + ] + ], + "traits": [ + 3, + "Black Lung", + "Drunk", + "Superstitious" + ], + "requires": "Laborer, Conscript, Farmer or Foot Soldier.", + "requires_expr": [ + "laborer", + "conscript", + "farmer", + "foot soldier" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "Outcast Subsetting", + "Servitude And Captive Setting", + "Peasant Setting" + ] + }, + "Taskmaster": { + "time": 6, + "res": 15, + "leads": [ + "City", + "Outcast", + "Soldier" + ], + "skills": [ + [ + 5, + "Intimidation", + "Brawling", + "Sing", + "Conspicuous", + "Lazy Bastard-wise" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "City", - "Noble", - "Religious" - ], - "skills": [ - [ - 10, - "Write", - "Read", - "Etiquette", - "Poetry", - "Astrology", - "Musical Instrument", - "Composition", - "Field Dressing", - "Apothecary", - "Court Gossip-wise" - ] - ], - "traits": [ - 1 - ], - "restrict": "This must be the character's second or third lifepath, and may only be taken once. Character must be female.", - "requires_expr": [ - "+and", - [ + "Hard-hearted", + "Mean", + "Barker", + "Booming Voice" + ], + "requires": "Village Sergeant or any Soldier lifepath.", + "requires_expr": [ + "village sergeant", + "professional soldier subsetting:runner", + "professional soldier subsetting:apprentice", + "professional soldier subsetting:musician", + "professional soldier subsetting:foot soldier", + "professional soldier subsetting:archer", + "professional soldier subsetting:crossbowman", + "professional soldier subsetting:sailor", + "professional soldier subsetting:herald", + "professional soldier subsetting:bannerman", + "professional soldier subsetting:scout", + "professional soldier subsetting:sergeant", + "professional soldier subsetting:veteran", + "professional soldier subsetting:cavalryman", + "professional soldier subsetting:journeyman", + "professional soldier subsetting:armorer", + "professional soldier subsetting:atilliator", + "professional soldier subsetting:chaplain", + "professional soldier subsetting:engineer", + "professional soldier subsetting:wizard of war", + "professional soldier subsetting:quartermaster", + "professional soldier subsetting:captain" + ], + "key_leads": [ + "City Dweller Setting", + "Outcast Subsetting", + "Professional Soldier Subsetting" + ] + }, + "Serving Wench (Bitter)": { + "display_name": "Serving Wench", + "time": 3, + "res": 5, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Peasant", + "Villager", + "City", + "Court", + "Servitude", + "Outcast", + "Soldier", + "Seafaring", + "Religious" + ], + "skills": [ + [ + 4, + "Soothing Platitudes", + "Ugly Truth", + "Customer-wise", + "Sleight Of Hand" + ] + ], + "traits": [ + 2, + "Extremely Bitter", + "Ugly", + "Drop Dead Gorgeous", + "Buxom" + ], + "restrict": "Character must be female.", + "requires_expr": [ "+sex", "female" ], - [ - "+has_n_lifepaths_or_more", - 1 + "key_leads": [ + "Peasant Setting", + "Villager Setting", + "City Dweller Setting", + "Noble Court Subsetting", + "Servitude And Captive Setting", + "Outcast Subsetting", + "Professional Soldier Subsetting", + "Seafaring Setting", + "Religious Subsetting" + ] + }, + "Serving Wench (Ugly)": { + "display_name": "Serving Wench", + "time": 3, + "res": 5, + "stat": [ + [ + 1, + "m" + ] ], - [ - "+has_n_lifepaths_or_less", - 2 - ] - ], - "key_leads": [ - "City Dweller Setting", - "Noble Setting", - "Religious Subsetting" - ] - }, - "Knight": { - "time": 6, - "res": 20, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Soldier", - "Noble", - "Outcast" - ], - "skills": [ - [ - 11, - "Conspicuous", - "Intimidation", - "Falconry", - "Mounted Combat Training", - "Shield Training", - "Armor Training", - "Appropriate Weapons" - ] - ], - "traits": [ - 1, - "Sworn Homage", - "Sense Of Entitlement" - ], - "requires": "Squire or Cavalryman", - "requires_expr": [ - "squire", - "cavalryman" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "Noble Setting", - "Outcast Subsetting" - ] - }, - "Courtier": { - "time": 5, - "res": 15, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "City", - "Outcast", - "Noble" - ], - "skills": [ - [ - 8, - "Etiquette", - "Observation", - "Persuasion", - "Seduction", - "Inconspicuous", - "Court Gossip-wise", - "Noble-wise" - ] - ], - "traits": [ - 2, - "Rapier Wit" - ], - "key_leads": [ - "City Dweller Setting", - "Outcast Subsetting", - "Noble Setting" - ] - }, - "Governess": { - "time": 8, - "res": 12, - "leads": [ - "Outcast", - "Servitude", - "Villager" - ], - "skills": [ - [ - 7, - "Family-wise", - "Administration", - "Intimidation", - "Etiquette", - "Persuasion", - "Ugly Truth" - ] - ], - "traits": [ - 1, - "Dismissive", - "You Should Know Better Than That!", - "Bitter" - ], - "requires": "Nurse, Midwife, Lady or any Wife lifepath", - "requires_expr": [ - "nurse", - "midwife", - "lady", - "country wife", - "village wife", - "city wife" - ], - "key_leads": [ - "Outcast Subsetting", - "Servitude And Captive Setting", - "Villager Setting" - ] - }, - "Chaplain": { - "time": 5, - "res": 18, - "stat": [ - [ - 1, - "pm" - ] - ], - "leads": [ - "Soldier", - "City", - "Religious", - "Servitude" - ], - "skills": [ - [ - 8, - "Oratory", - "Doctrine", - "Riding", - "Armor Training", - "Mounted Combat Training", - "Shield Training", - "Appropriate Weapons" - ] - ], - "traits": [ - 1 - ], - "requires": "Any Priest lifepath or Military Order", - "requires_expr": [ - "itinerant priest", - "village priest", - "venal priest", - "temple priest", - "court priest", - "heretic priest", - "priest", - "archpriest", - "military order" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "City Dweller Setting", - "Religious Subsetting", - "Servitude And Captive Setting" - ] - }, - "Court Sorcerer": { - "time": 8, - "res": 32, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Outcast", - "City" - ], - "skills": [ - [ - 7, - "Etiquette", - "Falsehood", - "Astrology", - "Alchemy", - "Sorcery" - ] - ], - "traits": [ - 1, - "Inscrutable", - "Gifted", - "Second Sight" - ], - "requires": "Arcane Devotee, Rogue Wizard or Sorcerer", - "requires_expr": [ - "arcane devotee", - "rogue wizard", - "sorcerer" - ], - "key_leads": [ - "Outcast Subsetting", - "City Dweller Setting" - ] - }, - "Court Lawyer": { - "time": 8, - "res": 25, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "City", - "Outcast", - "Religious" - ], - "skills": [ - [ - 6, - "Etiquette", - "Oratory", - "Persuasion", - "Rule Of Law", - "History" - ] - ], - "traits": [ - 1, - "Rhetorical", - "Evasive" - ], - "requires": "Student or Advocate", - "requires_expr": [ - "student", - "advocate" - ], - "key_leads": [ - "City Dweller Setting", - "Outcast Subsetting", - "Religious Subsetting" - ] - }, - "Court Doctor": { - "time": 8, - "res": 20, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "City", - "Outcast" - ], - "skills": [ - [ - 7, - "Etiquette", - "Apothecary", - "Bloodletting", - "Surgery", - "Anatomy", - "Astrology", - "Falsehood" - ] - ], - "traits": [ - 1, - "Incomprehensible Diagnosis" - ], - "requires": "Student, Itinerant Monk, Cloistered Monk/Nun or Priest", - "requires_expr": [ - "student", - "itinerant monk", - "cloistered monk/nun", - "priest" - ], - "key_leads": [ - "City Dweller Setting", - "Outcast Subsetting" - ] - }, - "Chronicler": { - "time": 10, - "res": 15, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "City", - "Outcast", - "Villager" - ], - "skills": [ - [ - 6, - "Composition", - "History", - "Etiquette", - "Illuminations", - "Obscure History" - ] - ], - "traits": [ - 2, - "Prone To Exaggeration", - "Flatterer", - "Denouncer", - "Cynical", - "Righteous" - ], - "requires": "Student, Custodian, Interpreter, Archivist or Young Lady", - "requires_expr": [ - "student", - "custodian", - "interpreter", - "archivist", - "young lady" - ], - "key_leads": [ - "City Dweller Setting", - "Outcast Subsetting", - "Villager Setting" - ] - }, - "Armorer": { - "time": 7, - "res": 25, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "City", - "Soldier" - ], - "skills": [ - [ - 9, - "Etching", - "Armorer", - "Blacksmith", - "Tanner", - "Sewing", - "Weaponsmith" - ] - ], - "traits": [ - 1, - "Proud" - ], - "requires": "Journeyman", - "requires_expr": [ - "journeyman" - ], - "key_leads": [ - "City Dweller Setting", - "Professional Soldier Subsetting" - ] - }, - "Atilliator": { - "time": 10, - "res": 30, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Soldier", - "City" - ], - "skills": [ - [ - 6, - "Atilliator", - "Carpentry", - "Carving" - ] - ], - "traits": [ - 1, - "Professionally Diligent" - ], - "requires": "Journeyman", - "requires_expr": [ - "journeyman" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "City Dweller Setting" - ] - }, - "Court Priest": { - "time": 6, - "res": 20, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Outcast", - "City", - "Religious" - ], - "skills": [ - [ - 5, - "Etiquette", - "History", - "Symbology", - "Doctrine", - "Persuasion" - ] - ], - "traits": [ - 2, - "Royal Favorite", - "Faithful" - ], - "requires": "Chaplain, Priest or Religious Acolyte", - "requires_expr": [ - "chaplain", - "priest", - "religious acolyte" - ], - "key_leads": [ - "Outcast Subsetting", - "City Dweller Setting", - "Religious Subsetting" - ] - }, - "Steward": { - "time": 7, - "res": 15, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "City", - "Noble", - "Outcast", - "Religious" - ], - "skills": [ - [ - 5, - "Estate Management", - "Accounting", - "Observation", - "Manor-wise" - ] - ], - "traits": [ - 1 - ], - "requires": "Town Official, Municipal Minister, Judge, Court Lawyer, Court Doctor, Governess, Young Lady, Magnate or Lord", - "requires_expr": [ - "town official", - "municipal minister", - "judge", - "court lawyer", - "court doctor", - "governess", - "young lady", - "magnate", - "lord" - ], - "key_leads": [ - "City Dweller Setting", - "Noble Setting", - "Outcast Subsetting", - "Religious Subsetting" - ] - }, - "Master Of Horses": { - "time": 8, - "res": 40, - "leads": [ - "City", - "Soldier" - ], - "skills": [ - [ - 4, - "Horse Husbandry", - "Appraisal", - "Horse-wise" - ] - ], - "traits": [ - 1, - "Love Of The Horse", - "Low Speech", - "Affinity For Horses" - ], - "requires": "Captain, Baron, Saddler, Merchant or Magnate", - "requires_expr": [ - "captain", - "baron", - "saddler", - "merchant", - "magnate" - ], - "key_leads": [ - "City Dweller Setting", - "Professional Soldier Subsetting" - ] - }, - "Master Of Hounds": { - "time": 7, - "res": 20, - "leads": [ - "City", - "Soldier" - ], - "skills": [ - [ - 7, - "Dog Husbandry", - "Dog-wise", - "Hunting", - "Instruction", - "Mimicry" - ] - ], - "traits": [ - 1, - "Dog Lover", - "Pigpen", - "Emotional", - "Iron Stomach" - ], - "requires": "Captain, Baron, Saddler, Merchant or Magnate", - "requires_expr": [ - "captain", - "baron", - "saddler", - "merchant", - "magnate" - ], - "key_leads": [ - "City Dweller Setting", - "Professional Soldier Subsetting" - ] - }, - "Hostage": { - "time": 6, - "res": "*", - "res_expr": [ - "+mult_prev", - 0.5 - ], - "leads": [ - "City", - "Noble", - "Soldier", - "Religious" - ], - "skills": [ - [ - 4, - "Etiquette", - "Court-wise", - "Foreign Languages", - "Foreign History" - ] - ], - "traits": [ - 1, - "Homesick", - "Bored", - "Darling Of The Court" - ], - "requires": "Any lifepath from the Noble setting", - "requires_expr": [ - "noble setting:born noble", - "noble setting:bastard", - "noble setting:page", - "noble setting:student", - "noble setting:squire", - "noble setting:arcane devotee", - "junior student", - "noble setting:religious acolyte", - "noble setting:young lady", - "noble setting:knight", - "noble setting:lady", - "noble setting:lord", - "noble setting:dame", - "noble setting:baron", - "noble setting:viscount", - "noble setting:count", - "noble setting:duke", - "noble setting:noble prince", - "noble setting:prince of the blood" - ], - "note": "Hostage gives resource points equal to half of the character's previous lifepath.", - "key_leads": [ - "City Dweller Setting", - "Noble Setting", - "Professional Soldier Subsetting", - "Religious Subsetting" - ] - }, - "Bailiff": { - "time": 4, - "res": 15, - "stat": [ - [ - 1, - "pm" - ] - ], - "leads": [ - "City", - "Soldier", - "Outcast" - ], - "skills": [ - [ - 7, - "Intimidation", - "Interrogation", - "Rule Of Law", - "Outlaw-wise", - "Village-wise", - "City-wise", - "Tax-wise" - ] - ], - "traits": [ - 1, - "Nose For Trouble" - ], - "requires": "Knight or the Your Lordship trait", - "requires_expr": [ - "+or", - [ - "knight" + "leads": [ + "Peasant", + "Villager", + "City", + "Court", + "Servitude", + "Outcast", + "Soldier", + "Seafaring", + "Religious" ], - [ - "+trait", - "your lordship" - ] - ], - "key_leads": [ - "City Dweller Setting", - "Professional Soldier Subsetting", - "Outcast Subsetting" - ] - }, - "Justicar": { - "time": 5, - "res": 15, - "stat": [ - [ - 1, - "pm" - ] - ], - "leads": [ - "City", - "Soldier", - "Religious", - "Outcast" - ], - "skills": [ - [ - 6, - "Rule Of Law", - "Amercement", - "Interrogation", - "Criminal-wise", - "Circuit-wise" - ] - ], - "traits": [ - 1, - "Stern Demeanor", - "Amenable To Other Options" - ], - "requires": "Judge, Captain, Bailiff or Lord", - "requires_expr": [ - "judge", - "captain", - "bailiff", - "lord" - ], - "key_leads": [ - "City Dweller Setting", - "Professional Soldier Subsetting", - "Religious Subsetting", - "Outcast Subsetting" - ] - }, - "Coroner": { - "time": 6, - "res": 15, - "leads": [ - "City", - "Soldier" - ], - "skills": [ - [ - 5, - "Rule Of Law", - "Anatomy", - "Writ-wise", - "Observation" - ] - ], - "traits": [ - 1, - "Hard-hearted", - "Seen It All" - ], - "requires": "Steward, Town Official, Municipal Minister, Judge, Court Lawyer, Court Doctor, Magnate or Lord", - "requires_expr": [ - "steward", - "town official", - "municipal minister", - "judge", - "court lawyer", - "court doctor", - "magnate", - "lord" - ], - "key_leads": [ - "City Dweller Setting", - "Professional Soldier Subsetting" - ] - }, - "Constable": { - "time": 6, - "res": 50, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "City", - "Soldier", - "Outcast" - ], - "skills": [ - [ - 5, - "Command", - "Heraldry", - "Logistics", - "Kingdom-wise", - "Obligation-wise", - "Soldier-wise", - "Cavalry-wise" - ] - ], - "traits": [ - 1, - "Weight Of The World" - ], - "requires": "Captain, Baron, Viscount, Count, Duke or Prince", - "requires_expr": [ - "captain", - "baron", - "viscount", - "count", - "duke", - "noble prince", - "prince of the blood" - ], - "key_leads": [ - "City Dweller Setting", - "Professional Soldier Subsetting", - "Outcast Subsetting" - ] - }, - "Treasurer": { - "time": 7, - "res": 45, - "leads": [ - "City", - "Soldier", - "Religious" - ], - "skills": [ - [ - 5, - "Accounting", - "Estate Management", - "Tax-wise", - "Debt-wise" - ] - ], - "traits": [ - 1, - "Pecunious", - "Lavish Taste" - ], - "requires": "Steward, Town Official, Municipal Minister, Judge, Court Lawyer, Court Doctor, Magnate, Baron, Bishop, Viscount, Count or Duke", - "requires_expr": [ - "steward", - "town official", - "municipal minister", - "judge", - "court lawyer", - "court doctor", - "magnate", - "baron", - "bishop", - "viscount", - "count", - "duke" - ], - "key_leads": [ - "City Dweller Setting", - "Professional Soldier Subsetting", - "Religious Subsetting" - ] - }, - "Chamberlain": { - "time": 7, - "res": 30, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "City", - "Soldier", - "Religious" - ], - "skills": [ - [ - 5, - "Soothing Platitudes", - "Persuasion", - "Ugly Truth" - ], - [ - 1, - "General" - ] - ], - "traits": [ - 1 - ], - "Requires": "Scholar, Steward, Town Official, Municipal Minister, Judge, Court Lawyer, Court Doctor, Magnate, Baron, Bishop, Viscount, Count or Duke", - "requires_expr": [ - "scholar", - "steward", - "town official", - "municipal minister", - "judge", - "court lawyer", - "court doctor", - "magnate", - "baron", - "bishop", - "viscount", - "count", - "duke" - ], - "key_leads": [ - "City Dweller Setting", - "Professional Soldier Subsetting", - "Religious Subsetting" - ] - }, - "Advisor To The Court": { - "time": "*", - "time_expr": [ - "+range", - 1, - 3 - ], - "res": "*", - "res_expr": [ - "+mult_time", - 10 - ], - "stat": [ - [ - 1, - "pm" - ] - ], - "leads": [ - "Peasant", - "Villager", - "City", - "Noble", - "Court", - "Servitude", - "Outcast", - "Soldier", - "Seafaring", - "Religious" - ], - "skills": [ - [ - "*", - "General" - ] - ], - "skills_expr": [ - "+mult_time", - 1 - ], - "traits": [ - 1 - ], - "requires": "Thinker, Captain, Sea Captain, Magnate, Master Craftsman, Artisan, Bishop, Rogue Wizard, Mad Summoner, Heretic Priest, Dame, Baron, Viscount, Count, Duke or Prince", - "requires_expr": [ - "thinker", - "captain", - "ship's captain", - "magnate", - "master craftsman", - "artisan", - "bishop", - "rogue wizard", - "mad summoner", - "heretic priest", - "dame", - "baron", - "viscount", - "count", - "duke", - "noble prince", - "prince of the blood" - ], - "note": "This lifepath can be one to three years long, player chooses tenure. Character earns 1 general skill point and 10 resource points per year. The stat and trait points are earned once.", - "key_leads": [ - "Peasant Setting", - "Villager Setting", - "City Dweller Setting", - "Noble Setting", - "Noble Court Subsetting", - "Servitude And Captive Setting", - "Outcast Subsetting", - "Professional Soldier Subsetting", - "Seafaring Setting", - "Religious Subsetting" - ] - } - }, - "Servitude And Captive Setting": { - "Born Slave": { - "time": 12, - "res": 5, - "stat": [ - [ - -1, - "pm" - ] - ], - "leads": [ - "Soldier", - "Outcast" - ], - "skills": [ - [ - 1, - "Slavery-wise" + "skills": [ + [ + 4, + "Soothing Platitudes", + "Ugly Truth", + "Customer-wise", + "Sleight Of Hand" + ] ], - [ + "traits": [ 2, - "General" - ] - ], - "traits": [ - 3, - "Broken", - "Scarred", - "Maimed", - "Lame" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "Outcast Subsetting" - ] - }, - "Ditch Digging": { - "time": 4, - "res": 4, - "leads": [ - "Soldier", - "Outcast" - ], - "skills": [ - [ - 3, - "Ditch Digging", - "Sing", - "Boss-wise" - ] - ], - "traits": [ - 2, - "Blisters", - "Back-breaking Labor" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "Outcast Subsetting" - ] - }, - "Servant": { - "time": 5, - "res": 6, - "leads": [ - "Outcast", - "Soldier", - "City", - "Court" - ], - "skills": [ - [ + "Ugly", + "Extremely Bitter", + "Drop Dead Gorgeous", + "Buxom" + ], + "restrict": "Character must be female.", + "requires_expr": [ + "+sex", + "female" + ], + "key_leads": [ + "Peasant Setting", + "Villager Setting", + "City Dweller Setting", + "Noble Court Subsetting", + "Servitude And Captive Setting", + "Outcast Subsetting", + "Professional Soldier Subsetting", + "Seafaring Setting", + "Religious Subsetting" + ] + }, + "Serving Wench (Gorgeous)": { + "display_name": "Serving Wench", + "time": 3, + "res": 5, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Peasant", + "Villager", + "City", + "Court", + "Servitude", + "Outcast", + "Soldier", + "Seafaring", + "Religious" + ], + "skills": [ + [ + 4, + "Soothing Platitudes", + "Ugly Truth", + "Customer-wise", + "Sleight Of Hand" + ] + ], + "traits": [ 2, - "Soothing Platitudes", - "Gossip-wise" - ] - ], - "traits": [ - 2, - "Mind-numbing Work", - "Obsequious" - ], - "key_leads": [ - "Outcast Subsetting", - "Professional Soldier Subsetting", - "City Dweller Setting", - "Noble Court Subsetting" - ] - }, - "Field Laborer": { - "time": 6, - "res": 5, - "leads": [ - "Outcast", - "Soldier" - ], - "skills": [ - [ - 7, - "Farming", - "Mending", - "Sing", - "Hauling", - "Driving", - "Fall Grass-wise" - ] - ], - "traits": [ - 3, - "Hope" - ], - "key_leads": [ - "Outcast Subsetting", - "Professional Soldier Subsetting" - ] - }, - "Captive Of War": { - "time": 4, - "res": 4, - "leads": [ - "Outcast", - "Soldier", - "City" - ], - "skills": [ - [ + "Drop Dead Gorgeous", + "Ugly", + "Extremely Bitter", + "Buxom" + ], + "restrict": "Character must be female.", + "requires_expr": [ + "+sex", + "female" + ], + "key_leads": [ + "Peasant Setting", + "Villager Setting", + "City Dweller Setting", + "Noble Court Subsetting", + "Servitude And Captive Setting", + "Outcast Subsetting", + "Professional Soldier Subsetting", + "Seafaring Setting", + "Religious Subsetting" + ] + }, + "Serving Wench (Buxom)": { + "display_name": "Serving Wench", + "time": 3, + "res": 5, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Peasant", + "Villager", + "City", + "Court", + "Servitude", + "Outcast", + "Soldier", + "Seafaring", + "Religious" + ], + "skills": [ + [ + 4, + "Soothing Platitudes", + "Ugly Truth", + "Customer-wise", + "Sleight Of Hand" + ] + ], + "traits": [ 2, - "Cell-wise", - "Chain-wise" - ] - ], - "traits": [ - 2, - "Claustrophobic", - "Resigned To Fate" - ], - "key_leads": [ - "Outcast Subsetting", - "Professional Soldier Subsetting", - "City Dweller Setting" - ] - }, - "Gaol": { - "time": 3, - "res": 3, - "leads": [ - "Outcast", - "Soldier", - "City" - ], - "skills": [ - [ - 3, - "Gaol-wise", - "Ratiquette" - ] - ], - "traits": [ - 2, - "Involuntary Shudders" - ], - "key_leads": [ - "Outcast Subsetting", - "Professional Soldier Subsetting", - "City Dweller Setting" - ] - }, - "Harem Slave": { - "time": 5, - "res": 4, - "leads": [ - "Outcast" - ], - "skills": [ - [ - 3, - "Falsehood", - "Seduction" - ] - ], - "traits": [ - 2, - "Numb", - "Worldly" - ], - "key_leads": [ - "Outcast Subsetting" - ] - }, - "Bondsman": { - "time": 7, - "res": 7, - "leads": [ - "Peasant", - "Soldier", - "Outcast" - ], - "skills": [ - [ - 0 - ] - ], - "traits": [ - 2, - "Lucky" - ], - "note": "The player may choose his Bondsman's owner's lifepath from the Noble, City Dweller, Soldier or Villager setting. The Bondsman may purchase from owner's skills with one quarter of that path's skill points (minimum of 1).", - "key_leads": [ - "Peasant Setting", - "Professional Soldier Subsetting", - "Outcast Subsetting" - ] - } - }, - "Outcast Subsetting": { - "Urchin": { - "time": 4, - "res": 3, - "leads": [ - "Peasant", - "Soldier", - "Servitude" - ], - "skills": [ - [ - 4, - "Inconspicuous", - "Streetwise", - "Sleight Of Hand" - ] - ], - "traits": [ - 2, - "Addicted", - "The Story" - ], - "restrict": "Must be the second lifepath chosen and may only be taken once.", - "requires_expr": [ - "+and", - [ + "Buxom", + "Drop Dead Gorgeous", + "Ugly", + "Extremely Bitter" + ], + "restrict": "Character must be female.", + "requires_expr": [ + "+sex", + "female" + ], + "key_leads": [ + "Peasant Setting", + "Villager Setting", + "City Dweller Setting", + "Noble Court Subsetting", + "Servitude And Captive Setting", + "Outcast Subsetting", + "Professional Soldier Subsetting", + "Seafaring Setting", + "Religious Subsetting" + ] + }, + "Hosteller": { + "time": 6, + "res": 15, + "leads": [ + "City", + "Peasant" + ], + "skills": [ + [ + 5, + "Cooking", + "Mending", + "Accounting", + "Soothing Platitudes", + "Guest-wise" + ] + ], + "traits": [ + 1, + "Fixed Smile", + "Gossip" + ], + "restrict": "May not be the character's second lifepath.", + "requires_expr": [ "+has_n_lifepaths_or_more", - 1 + 2 ], - [ - "+has_n_lifepaths_or_less", - 1 - ] - ], - "key_leads": [ - "Peasant Setting", - "Professional Soldier Subsetting", - "Servitude And Captive Setting" - ] - }, - "Apostate": { - "time": 3, - "res": 6, - "leads": [ - "City", - "Soldier", - "Religious" - ], - "skills": [ - [ - 4, - "Doctrine", - "Heretical Doctrine", - "Foreign Doctrine" - ] - ], - "traits": [ - 1, - "Apostate" - ], - "key_leads": [ - "City Dweller Setting", - "Professional Soldier Subsetting", - "Religious Subsetting" - ] - }, - "Blackmailer": { - "time": 3, - "res": 10, - "stat": [ - [ + "key_leads": [ + "City Dweller Setting", + "Peasant Setting" + ] + }, + "Village Guard": { + "time": 3, + "res": 7, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Soldier", + "City", + "Peasant", + "Servitude" + ], + "skills": [ + [ + 4, + "Appropriate Weapons", + "Intimidation", + "Brawling", + "Graft-wise", + "Village-wise", + "Guard-wise" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "City", - "Soldier", - "Villager", - "Seafaring" - ], - "skills": [ - [ - 4, - "Extortion", - "Forgery", - "Ugly Truth", - "Falsehood", - "Bribe-wise" - ] - ], - "traits": [ - 2, - "Cold Hearted" - ], - "key_leads": [ - "City Dweller Setting", - "Professional Soldier Subsetting", - "Villager Setting", - "Seafaring Setting" - ] - }, - "Kidnapper": { - "time": 3, - "res": 10, - "stat": [ - [ + "Thug" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "City Dweller Setting", + "Peasant Setting", + "Servitude And Captive Setting" + ] + }, + "Village Sergeant": { + "time": 5, + "res": 9, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Soldier", + "Servitude", + "Court" + ], + "skills": [ + [ + 6, + "Command", + "Intimidation", + "Field Dressing", + "Appropriate Weapons", + "Shield Training", + "Armor Training", + "Bribe-wise", + "Wealthy-wise" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "City", - "Soldier", - "Villager", - "Seafaring" - ], - "skills": [ - [ - 5, - "Interrogation", - "Torture", - "Intimidation", - "Ransom-wise" - ] - ], - "traits": [ - 2, - "Hard-hearted" - ], - "key_leads": [ - "City Dweller Setting", - "Professional Soldier Subsetting", - "Villager Setting", - "Seafaring Setting" - ] - }, - "Pillager": { - "time": 4, - "res": 7, - "leads": [ - "Soldier", - "City", - "Servitude", - "Seafaring" - ], - "skills": [ - [ - 4, - "Scavenging", - "Foraging", - "Army-wise", - "Battle-wise", - "Haggling" - ] - ], - "traits": [ - 1 - ], - "key_leads": [ - "Professional Soldier Subsetting", - "City Dweller Setting", - "Servitude And Captive Setting", - "Seafaring Setting" - ] - }, - "Vagrant": { - "time": 3, - "res": 5, - "leads": [ - "City", - "Soldier", - "Servitude" - ], - "skills": [ - [ - 4, - "Road-wise", - "Hostel-wise", - "Hospital-wise", - "Inconspicuous" - ] - ], - "traits": [ - 2 - ], - "key_leads": [ - "City Dweller Setting", - "Professional Soldier Subsetting", - "Servitude And Captive Setting" - ] - }, - "Cripple (Lame)": { - "display_name": "Cripple", - "time": 6, - "res": 3, - "leads": [ - "Servitude", - "City" - ], - "skills": [ - [ - 6, - "Begging", - "Inconspicuous", - "Conspicuous" - ] - ], - "traits": [ - 2, - "Lame", - "Missing Limb" - ], - "key_leads": [ - "Servitude And Captive Setting", - "City Dweller Setting" - ] - }, - "Cripple (Missing Limb)": { - "display_name": "Cripple", - "time": 6, - "res": 3, - "leads": [ - "Servitude", - "City" - ], - "skills": [ - [ - 6, - "Begging", - "Inconspicuous", - "Conspicuous" - ] - ], - "traits": [ - 2, - "Missing Limb", - "Lame" - ], - "key_leads": [ - "Servitude And Captive Setting", - "City Dweller Setting" - ] - }, - "Poacher": { - "time": 5, - "res": 5, - "stat": [ - [ + "Overworked", + "Underpaid" + ], + "requires": "Village Guard, Squire, Freebooter, Sergeant-At-Arms or Man-At-Arms.", + "requires_expr": [ + "village guard", + "squire", + "freebooter", + "sergeant-at-arms", + "man-at-arms" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "Servitude And Captive Setting", + "Noble Court Subsetting" + ] + }, + "Corrupt Sergeant": { + "time": 5, + "res": 12, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Soldier", + "Servitude", + "Court" + ], + "skills": [ + [ + 6, + "Intimidation", + "Appropriate Weapons", + "Shield Training", + "Armor Training", + "Bribe-wise", + "Wealthy-wise", + "Criminal-wise" + ] + ], + "traits": [ 1, - "pm" - ] - ], - "leads": [ - "Servitude", - "Soldier", - "Villager" - ], - "skills": [ - [ - 6, - "Royal Parks-wise", - "Hunting", - "Stealthy", - "Tracking", - "Orienteering" - ] - ], - "traits": [ - 1 - ], - "key_leads": [ - "Servitude And Captive Setting", - "Professional Soldier Subsetting", - "Villager Setting" - ] - }, - "Deranged": { - "time": 6, - "res": 3, - "leads": [ - "Servitude" - ], - "skills": [ - [ - 3, - "Inconspicuous", - "Quack-wise" - ] - ], - "traits": [ - 2, - "Sick", - "Phobia", - "Lunatic", - "Linguist", - "Possessed" - ], - "key_leads": [ - "Servitude And Captive Setting" - ] - }, - "Outlaw": { - "time": 4, - "res": 5, - "stat": [ - [ + "Predatory" + ], + "requires": "Village Guard, Squire, Freebooter, Sergeant-At-Arms or Man-At-Arms.", + "requires_expr": [ + "village guard", + "squire", + "freebooter", + "sergeant-at-arms", + "man-at-arms" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "Servitude And Captive Setting", + "Noble Court Subsetting" + ] + }, + "Tailor": { + "time": 5, + "res": 12, + "leads": [ + "City", + "Peasant" + ], + "skills": [ + [ + 5, + "Sewing", + "Embroidery", + "Clothing-wise" + ] + ], + "traits": [ 1, - "pm" - ] - ], - "leads": [ - "Soldier", - "City", - "Villager", - "Peasant", - "Seafaring" - ], - "skills": [ - [ - 5, - "Authority-wise", - "Inconspicuous", - "Conspicuous" - ] - ], - "traits": [ - 1, - "Outlaw" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "City Dweller Setting", - "Villager Setting", - "Peasant Setting", - "Seafaring Setting" - ] - }, - "Fence": { - "time": 6, - "res": 15, - "stat": [ - [ + "Frippery" + ], + "key_leads": [ + "City Dweller Setting", + "Peasant Setting" + ] + }, + "Tax Collector": { + "time": 5, + "res": 15, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "City", + "Peasant", + "Outcast" + ], + "skills": [ + [ + 4, + "Intimidation", + "Accounting", + "Haggling", + "Persuasion" + ] + ], + "traits": [ 1, - "pm" - ] - ], - "leads": [ - "Servitude", - "City", - "Soldier" - ], - "skills": [ - [ - 6, - "Appraisal", - "Haggling", - "Inconspicuous", - "Streetwise", - "Guard-wise" - ] - ], - "traits": [ - 2, - "Shrewd" - ], - "requires": "Shopkeeper, Barkeep, Moneylender or an additional prior Outcast lifepath or criminal-type Lifepath from City Dweller", - "requires_expr": [ - "shopkeeper", - "barkeep", - "outcast subsetting:urchin", - "outcast subsetting:apostate", - "outcast subsetting:blackmailer", - "outcast subsetting:kidnapper", - "outcast subsetting:pillager", - "outcast subsetting:vagrant", - "outcast subsetting:cripple", - "outcast subsetting:poacher", - "outcast subsetting:deranged", - "outcast subsetting:outlaw", - "outcast subsetting:fence", - "outcast subsetting:gravedigger", - "outcast subsetting:ratcatcher", - "outcast subsetting:beggar", - "outcast subsetting:leper", - "outcast subsetting:prostitute", - "outcast subsetting:whoremonger", - "outcast subsetting:itinerant performer", - "outcast subsetting:insurrectionist", - "outcast subsetting:cultist", - "outcast subsetting:poisoner", - "outcast subsetting:thug", - "outcast subsetting:desperate killer", - "outcast subsetting:bandit", - "outcast subsetting:pirate", - "outcast subsetting:smuggler", - "outcast subsetting:freebooter", - "outcast subsetting:strider", - "outcast subsetting:mad summoner", - "outcast subsetting:rogue wizard", - "outcast subsetting:crazy witch", - "outcast subsetting:heretic priest", - "outcast subsetting:thinker", - "moneylender", - "city dweller setting:coin clipper", - "city dweller setting:pickpocket", - "city dweller setting:criminal", - "city dweller setting:street thug", - "city dweller setting:confidence man" - ], - "key_leads": [ - "Servitude And Captive Setting", - "City Dweller Setting", - "Professional Soldier Subsetting" - ] - }, - "Gravedigger": { - "time": 5, - "res": 4, - "leads": [ - "Soldier", - "Servitude" - ], - "skills": [ - [ - 6, - "Ditch Digging", - "Philosophy", - "Grave-wise", - "Cemetery-wise", - "Bone-wise" - ] - ], - "traits": [ - 3, - "Bitter" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "Servitude And Captive Setting" - ] - }, - "Ratcatcher": { - "time": 5, - "res": 4, - "leads": [ - "Rats" - ], - "skills": [ - [ - 4, - "Trapper", - "Poisons", - "Ratiquette" - ] - ], - "traits": [ - 2, - "Diseased", - "Rat-speak" - ], - "key_leads": [ - "Rats" - ] - }, - "Beggar": { - "time": 3, - "res": 5, - "leads": [ - "Peasant", - "Soldier", - "Villager" - ], - "skills": [ - [ - 5, - "Inconspicuous", - "Conspicuous", - "Streetwise", - "Falsehood" - ] - ], - "traits": [ - 2, - "The Story" - ], - "key_leads": [ - "Peasant Setting", - "Professional Soldier Subsetting", - "Villager Setting" - ] - }, - "Leper": { - "time": 4, - "res": 3, - "stat": [ - [ - -1, - "p" - ] - ], - "leads": [ - "Servitude", - "Peasant" - ], - "skills": [ - [ - 5, - "Inconspicuous", - "Hospital-wise", - "Priest-wise", - "Pilgrim-wise" - ] - ], - "traits": [ - 3, - "Leprosy", - "Unbeliever", - "White-gold Wielder" - ], - "key_leads": [ - "Servitude And Captive Setting", - "Peasant Setting" - ] - }, - "Prostitute": { - "time": 5, - "res": 6, - "leads": [ - "Peasant", - "Villager", - "City", - "Servitude" - ], - "skills": [ - [ - 3, - "Conspicuous", - "Inconspicuous", - "Persuasion", - "Falsehood", - "Haggling", - "Soothing Platitudes" - ] - ], - "traits": [ - 2, - "Tolerant" - ], - "key_leads": [ - "Peasant Setting", - "Villager Setting", - "City Dweller Setting", - "Servitude And Captive Setting" - ] - }, - "Whoremonger": { - "time": 6, - "res": 12, - "leads": [ - "Villager", - "City", - "Soldier" - ], - "skills": [ - [ - 5, - "Intimidation", - "Haggling", - "Prostitute-wise", - "City-wise", - "Guard-wise" - ] - ], - "traits": [ - 1 - ], - "requires": "Corrupt Sergeant, Venal Priest, Shopkeeper, Barkeep, Moneylender or an additional prior Outcast lifepath or criminal-type lifepath from City Dweller", - "requires_expr": [ - "corrupt sergeant", - "venal priest", - "shopkeeper", - "barkeep", - "outcast subsetting:urchin", - "outcast subsetting:apostate", - "outcast subsetting:blackmailer", - "outcast subsetting:kidnapper", - "outcast subsetting:pillager", - "outcast subsetting:vagrant", - "outcast subsetting:cripple", - "outcast subsetting:poacher", - "outcast subsetting:deranged", - "outcast subsetting:outlaw", - "outcast subsetting:fence", - "outcast subsetting:gravedigger", - "outcast subsetting:ratcatcher", - "outcast subsetting:beggar", - "outcast subsetting:leper", - "outcast subsetting:prostitute", - "outcast subsetting:whoremonger", - "outcast subsetting:itinerant performer", - "outcast subsetting:insurrectionist", - "outcast subsetting:cultist", - "outcast subsetting:poisoner", - "outcast subsetting:thug", - "outcast subsetting:desperate killer", - "outcast subsetting:bandit", - "outcast subsetting:pirate", - "outcast subsetting:smuggler", - "outcast subsetting:freebooter", - "outcast subsetting:strider", - "outcast subsetting:mad summoner", - "outcast subsetting:rogue wizard", - "outcast subsetting:crazy witch", - "outcast subsetting:heretic priest", - "outcast subsetting:thinker", - "moneylender", - "city dweller setting:coin clipper", - "city dweller setting:pickpocket", - "city dweller setting:criminal", - "city dweller setting:street thug", - "city dweller setting:confidence man" - ], - "key_leads": [ - "Villager Setting", - "City Dweller Setting", - "Professional Soldier Subsetting" - ] - }, - "Itinerant Performer": { - "time": 4, - "res": 5, - "leads": [ - "Peasant", - "Villager", - "City", - "Soldier" - ], - "skills": [ - [ - 8, - "Cooking", - "Sewing", - "Acting", - "Sleight Of Hand", - "Haggling", - "Mending", - "Disguise" - ] - ], - "traits": [ - 2, - "Odd" - ], - "key_leads": [ - "Peasant Setting", - "Villager Setting", - "City Dweller Setting", - "Professional Soldier Subsetting" - ] - }, - "Insurrectionist": { - "time": 3, - "res": 5, - "leads": [ - "City", - "Soldier" - ], - "skills": [ - [ - 4, - "Philosophy", - "Rule Of Law", - "Doctrine", - "Oratory", - "Arson" - ] - ], - "traits": [ - 2, - "Zealot" - ], - "key_leads": [ - "City Dweller Setting", - "Professional Soldier Subsetting" - ] - }, - "Cultist": { - "time": 4, - "res": 8, - "leads": [ - "Peasant", - "Servitude", - "Soldier" - ], - "skills": [ - [ - 5, - "Cult Doctrine", - "Inconspicuous", - "Conspicuous", - "Falsehood", - "Persuasion" - ] - ], - "traits": [ - 2, - "Zealot", - "Rabble-rouser", - "Speaker Of The Secret Language" - ], - "key_leads": [ - "Peasant Setting", - "Servitude And Captive Setting", - "Professional Soldier Subsetting" - ] - }, - "Poisoner": { - "time": 5, - "res": 8, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "City", - "Villager", - "Court" - ], - "skills": [ - [ - 5, - "Poisons", - "Cooking", - "Inconspicuous", - "Disguise" - ] - ], - "traits": [ - 2, - "Off-kilter" - ], - "key_leads": [ - "City Dweller Setting", - "Villager Setting", - "Noble Court Subsetting" - ] - }, - "Thug": { - "time": 4, - "res": 7, - "leads": [ - "Soldier", - "City" - ], - "skills": [ - [ - 4, - "Streetwise", - "Murder-wise", - "Guard-wise", - "Brawling" - ] - ], - "traits": [ - 2, - "Cold-blooded", - "Jaded" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "City Dweller Setting" - ] - }, - "Desperate Killer": { - "time": 3, - "res": 5, - "leads": [ - "Soldier", - "City", - "Servitude" - ], - "skills": [ - [ - 5, - "Appropriate Weapons", - "Inconspicuous", - "Assassination-wise" - ] - ], - "traits": [ - 2, - "Desperate", - "Murderous", - "Cold Hearted", - "Hard-hearted" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "City Dweller Setting", - "Servitude And Captive Setting" - ] - }, - "Bandit": { - "time": 3, - "res": 7, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Soldier", - "Peasant" - ], - "skills": [ - [ - 4, - "Appropriate Weapons", - "Intimidation", - "Stealthy", - "Caravan-wise" - ] - ], - "traits": [ - 1 - ], - "key_leads": [ - "Professional Soldier Subsetting", - "Peasant Setting" - ] - }, - "Pirate": { - "time": 4, - "res": 5, - "leads": [ - "Seafaring", - "City", - "Villager" - ], - "skills": [ - [ - 6, - "Pirate Cove-wise", - "Rigging", - "Knots", - "Knives", - "Sea-wise", - "Map-wise" - ] - ], - "traits": [ - 2, - "Problem With Authority", - "Scurvy", - "Maimed", - "Crippled", - "Lame" - ], - "key_leads": [ - "Seafaring Setting", - "City Dweller Setting", - "Villager Setting" - ] - }, - "Smuggler": { - "time": 4, - "res": 15, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Soldier", - "City", - "Villager" - ], - "skills": [ - [ - 6, - "Persuasion", - "Falsehood", - "Appraisal", - "Law-wise", - "Forgery", - "Stealthy", - "Inconspicuous" - ] - ], - "traits": [ - 2, - "Paranoid" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "City Dweller Setting", - "Villager Setting" - ] - }, - "Freebooter": { - "time": 4, - "res": 10, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Soldier", - "Peasant", - "Servitude" - ], - "skills": [ - [ - 8, - "Intimidation", - "Appropriate Weapons", - "Countryside-wise", - "Fortress-wise", - "Mercenary Company-wise", - "Foreign Languages", - "War-wise", - "Loot-wise", - "Extortion-wise" - ] - ], - "traits": [ - 2, - "Cold-blooded", - "Merciless" - ], - "requires": "Bandit, Smuggler, Squire, Knight, City Guard, Village Guard, Marine or any Professional Soldier lifepath", - "requires_expr": [ - "bandit", - "smuggler", - "squire", - "knight", - "city guard", - "village guard", - "marine", - "professional soldier subsetting:runner", - "professional soldier subsetting:apprentice", - "professional soldier subsetting:musician", - "professional soldier subsetting:foot soldier", - "professional soldier subsetting:archer", - "professional soldier subsetting:crossbowman", - "professional soldier subsetting:sailor", - "professional soldier subsetting:herald", - "professional soldier subsetting:bannerman", - "professional soldier subsetting:scout", - "professional soldier subsetting:sergeant", - "professional soldier subsetting:veteran", - "professional soldier subsetting:cavalryman", - "professional soldier subsetting:journeyman", - "professional soldier subsetting:armorer", - "professional soldier subsetting:atilliator", - "professional soldier subsetting:chaplain", - "professional soldier subsetting:engineer", - "professional soldier subsetting:wizard of war", - "professional soldier subsetting:quartermaster", - "professional soldier subsetting:captain" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "Peasant Setting", - "Servitude And Captive Setting" - ] - }, - "Strider": { - "time": 5, - "res": 6, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Soldier", - "Peasant", - "Servitude" - ], - "skills": [ - [ - 9, - "Forest-wise", - "Orienteering", - "Foraging", - "Tracking", - "Firebuilding", - "Riding", - "Stealthy", - "Appropriate Weapons" - ] - ], - "traits": [ - 2, - "Loner" - ], - "requires": "Born Noble, Hunter, Trapper, Huntsman or Scout", - "requires_expr": [ - "born noble", - "hunter", - "trapper", - "huntsman", - "scout" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "Peasant Setting", - "Servitude And Captive Setting" - ] - }, - "Mad Summoner": { - "time": 8, - "res": 20, - "stat": [ - [ - 1, - "pm" - ] - ], - "leads": [ - "Peasant", - "City", - "Seafaring" - ], - "skills": [ - [ - 6, - "Summoning", - "Enchanting", - "Demonology", - "Empyrealia" - ] - ], - "traits": [ - 2, - "Mad", - "Fear Of Cheese", - "Fear Of Wet Noises", - "Alarming" - ], - "requires": "Cultist, Augur, Neophyte Sorcerer or Arcane Devotee", - "requires_expr": [ - "cultist", - "augur", - "neophyte sorcerer", - "arcane devotee" - ], - "key_leads": [ - "Peasant Setting", - "City Dweller Setting", - "Seafaring Setting" - ] - }, - "Rogue Wizard": { - "time": 6, - "res": 24, - "stat": [ - [ - 1, - "p" + "Hard-hearted", + "Manhunter" ], - [ - 1, - "m" - ] - ], - "leads": [ - "Servitude", - "Seafaring", - "Religious" - ], - "skills": [ - [ - 8, - "Sorcery", - "Inconspicuous", - "Graveyard-wise", - "Astrology", - "Bloodletting", - "Ugly Truth", - "Apocalypse-wise", - "Enchanting", - "Alchemy" - ] - ], - "traits": [ - 3, - "Spooky", - "Aura Of Fear", - "Obscure Aura" - ], - "requires": "Cultist, Augur, Neophyte Sorcerer or Arcane Devotee", - "requires_expr": [ - "cultist", - "augur", - "neophyte sorcerer", - "arcane devotee" - ], - "key_leads": [ - "Servitude And Captive Setting", - "Seafaring Setting", - "Religious Subsetting" - ] - }, - "Crazy Witch": { - "time": 6, - "res": 6, - "stat": [ - [ - 1, - "pm" - ] - ], - "leads": [ - "Peasant", - "Servitude", - "Villager" - ], - "skills": [ - [ - 5, - "Folklore", - "Herbalism", - "Poisons", - "Summoning", - "Profanity-wise" - ] - ], - "traits": [ - 2, - "A Little Crazy", - "Gifted", - "Mark Of The Beast" - ], - "requires": "Weather Witch, Young Lady, Augur or Midwife", - "requires_expr": [ - "weather witch", - "young lady", - "augur", - "midwife" - ], - "key_leads": [ - "Peasant Setting", - "Servitude And Captive Setting", - "Villager Setting" - ] - }, - "Heretic Priest": { - "time": 7, - "res": 6, - "leads": [ - "Peasant", - "Servitude" - ], - "skills": [ - [ - 7, - "Heretical Doctrine", - "Oratory", - "Apostate-wise", - "Demonology", - "Summoner-wise", - "Cultist-wise" - ] - ], - "traits": [ - 2, - "Lunatic", - "Overbearing Loony", - "Faith In Dead Gods" - ], - "requires": "Acolyte, Cultist, Apostate, Theologian, Venal Priest, Interpreter or Archivist", - "requires_expr": [ - "acolyte", - "cultist", - "apostate", - "theologian", - "venal priest", - "interpreter", - "archivist" - ], - "key_leads": [ - "Peasant Setting", - "Servitude And Captive Setting" - ] - }, - "Thinker": { - "time": 15, - "res": 5, - "stat": [ - [ + "restrict": "May not be the character's second lifepath.", + "requires_expr": [ + "+has_n_lifepaths_or_more", + 2 + ], + "key_leads": [ + "City Dweller Setting", + "Peasant Setting", + "Outcast Subsetting" + ] + }, + "Cobbler": { + "time": 8, + "res": 20, + "leads": [ + "City", + "Peasant", + "Soldier" + ], + "skills": [ + [ + 4, + "Cobbler", + "Shoe-wise", + "Feet-wise", + "Leather-wise", + "Nail-wise" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Peasant", - "Villager", - "City", - "Noble", - "Court", - "Servitude", - "Outcast", - "Soldier", - "Seafaring", - "Religious" - ], - "skills": [ - [ - 6, - "Philosophy", - "Strategy", - "Strategy Games", - "Calligraphy", - "History", - "Painting" - ], - [ + "Comfortable Shoes" + ], + "requires": "Apprentice", + "requires_expr": [ + "apprentice" + ], + "key_leads": [ + "City Dweller Setting", + "Peasant Setting", + "Professional Soldier Subsetting" + ] + }, + "Farrier": { + "time": 5, + "res": 12, + "leads": [ + "City", + "Peasant", + "Soldier" + ], + "skills": [ + [ + 4, + "Blacksmith", + "Animal Husbandry", + "Horse-wise", + "Haggling" + ] + ], + "traits": [ 1, - "General" - ] - ], - "traits": [ - 2 - ], - "restrict": "Thinker can only be taken if the character's starting age will be 36 years or older.", - "requires_expr": [ - "+age_greater_than", - 21 - ], - "key_leads": [ - "Peasant Setting", - "Villager Setting", - "City Dweller Setting", - "Noble Setting", - "Noble Court Subsetting", - "Servitude And Captive Setting", - "Outcast Subsetting", - "Professional Soldier Subsetting", - "Seafaring Setting", - "Religious Subsetting" - ] - } - }, - "Professional Soldier Subsetting": { - "Runner": { - "time": 3, - "res": 5, - "stat": [ - [ + "A Bit Deaf" + ], + "requires": "Apprentice", + "requires_expr": [ + "apprentice" + ], + "key_leads": [ + "City Dweller Setting", + "Peasant Setting", + "Professional Soldier Subsetting" + ] + }, + "Butcher": { + "time": 6, + "res": 15, + "leads": [ + "City", + "Peasant", + "Outcast" + ], + "skills": [ + [ + 4, + "Butchery", + "Cooking", + "Guts-wise", + "Anatomy" + ] + ], + "traits": [ + 2, + "Prominent Scar", + "Thick Skin", + "Stinky", + "Muttering" + ], + "key_leads": [ + "City Dweller Setting", + "Peasant Setting", + "Outcast Subsetting" + ] + }, + "Barber": { + "time": 7, + "res": 16, + "leads": [ + "City", + "Peasant", + "Outcast" + ], + "skills": [ + [ + 5, + "Bloodletting", + "Anatomy", + "Apothecary", + "Villager-wise", + "Gossip-wise" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Villager", - "Peasant", - "Servitude", - "Outcast" - ], - "skills": [ - [ - 4, - "Inconspicuous", - "Stealthy", - "Sing" - ] - ], - "traits": [ - 2, - "Skinny", - "Fleet Of Foot", - "Sprinter" - ], - "key_leads": [ - "Villager Setting", - "Peasant Setting", - "Servitude And Captive Setting", - "Outcast Subsetting" - ] - }, - "Apprentice": { - "time": 4, - "res": 6, - "stat": [ - [ + "Agreeable", + "Seemingly Concerned" + ], + "key_leads": [ + "City Dweller Setting", + "Peasant Setting", + "Outcast Subsetting" + ] + }, + "Brewer": { + "time": 8, + "res": 15, + "leads": [ + "City", + "Peasant", + "Court" + ], + "skills": [ + [ + 4, + "Brewer", + "Miller", + "Grain-wise", + "Brew-wise" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "City", - "Villager", - "Peasant" - ], - "skills": [ - [ - 6, - "Mending", - "Write", - "Read", - "Hauling", - "Driving", - "Ditch Digging" - ] - ], - "traits": [ - 2, - "Exhausted", - "Back-breaking Labor" - ], - "key_leads": [ - "City Dweller Setting", - "Villager Setting", - "Peasant Setting" - ] - }, - "Musician": { - "time": 3, - "res": 5, - "stat": [ - [ + "Reeks Of Alcohol", + "Ruddy Complexion" + ], + "key_leads": [ + "City Dweller Setting", + "Peasant Setting", + "Noble Court Subsetting" + ] + }, + "Acolyte": { + "time": 7, + "res": 10, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Peasant", + "Servitude", + "City", + "Religious" + ], + "skills": [ + [ + 6, + "Doctrine", + "Bureaucracy", + "Write", + "Read", + "Ritual", + "Religious History", + "Temple-wise" + ] + ], + "traits": [ + 2, + "Tonsured", + "Early Riser", + "Broken", + "Perfect Pitch" + ], + "key_leads": [ + "Peasant Setting", + "Servitude And Captive Setting", + "City Dweller Setting", + "Religious Subsetting" + ] + }, + "Failed Acolyte": { + "time": 6, + "res": 8, + "leads": [ + "Soldier", + "Peasant", + "Outcast" + ], + "skills": [ + [ + 4, + "Temple-wise", + "Dirty Secrets-wise", + "Doctrine", + "Religious History" + ] + ], + "traits": [ + 2, + "Bitter" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "Peasant Setting", + "Outcast Subsetting" + ] + }, + "Village Priest": { + "time": 8, + "res": 15, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Peasant", + "Villager", + "City", + "Servitude", + "Outcast", + "Soldier", + "Seafaring", + "Religious" + ], + "skills": [ + [ + 5, + "Oratory", + "Suasion", + "Symbology" + ] + ], + "traits": [ + 2, + "Vested", + "Devout", + "Faithful" + ], + "requires": "Acolyte", + "requires_expr": [ + "acolyte" + ], + "key_leads": [ + "Peasant Setting", + "Villager Setting", + "City Dweller Setting", + "Servitude And Captive Setting", + "Outcast Subsetting", + "Professional Soldier Subsetting", + "Seafaring Setting", + "Religious Subsetting" + ] + }, + "Venal Priest": { + "time": 9, + "res": 20, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Peasant", + "Villager", + "City", + "Servitude", + "Outcast", + "Soldier", + "Seafaring", + "Religious" + ], + "skills": [ + [ + 6, + "Persuasion", + "Soothing Platitudes", + "Falsehood" + ] + ], + "traits": [ + 2, + "Venal", + "Vested" + ], + "requires": "Acolyte, Clerk, Student or any Religious setting lifepath.", + "requires_expr": [ + "acolyte", + "clerk", + "student", + "religious subsetting:castrati", + "religious subsetting:pardoner", + "religious subsetting:zealous convert", + "religious subsetting:military order", + "religious subsetting:grave digger", + "religious subsetting:porter", + "religious subsetting:notary", + "religious subsetting:custodian", + "religious subsetting:interpreter", + "religious subsetting:archivist", + "religious subsetting:itinerant monk", + "religious subsetting:cloistered monk/nun", + "religious subsetting:temple acolyte", + "religious subsetting:priest", + "religious subsetting:exorcist", + "religious subsetting:inquisitor", + "religious subsetting:theologian", + "religious subsetting:archpriest", + "religious subsetting:canon", + "religious subsetting:abbot/abbess", + "religious subsetting:bishop" + ], + "key_leads": [ + "Peasant Setting", + "Villager Setting", + "City Dweller Setting", + "Servitude And Captive Setting", + "Outcast Subsetting", + "Professional Soldier Subsetting", + "Seafaring Setting", + "Religious Subsetting" + ] + }, + "Apprentice": { + "time": 7, + "res": 7, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "City", + "Peasant", + "Soldier", + "Seafaring" + ], + "skills": [ + [ + 6, + "Mending", + "Blacksmith", + "Carpentry", + "Tanner", + "Potter", + "Cooper" + ] + ], + "traits": [ + 2, + "Broken In", + "Back-breaking Labor" + ], + "key_leads": [ + "City Dweller Setting", + "Peasant Setting", + "Professional Soldier Subsetting", + "Seafaring Setting" + ] + }, + "Journeyman": { + "time": 6, + "res": 15, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "City", + "Peasant", + "Soldier", + "Seafaring" + ], + "skills": [ + [ + 5, + "Haggling", + "Appraisal", + "Write", + "Read" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Villager", - "Peasant", - "Servitude" - ], - "skills": [ - [ - 4, - "Musical Instrument", - "Conspicuous", - "Riding" - ] - ], - "traits": [ - 1 - ], - "key_leads": [ - "Villager Setting", - "Peasant Setting", - "Servitude And Captive Setting" - ] - }, - "Foot Soldier": { - "time": 3, - "res": 6, - "stat": [ - [ + "Made Man", + "Geometric" + ], + "requires": "Apprentice", + "requires_expr": [ + "apprentice" + ], + "key_leads": [ + "City Dweller Setting", + "Peasant Setting", + "Professional Soldier Subsetting", + "Seafaring Setting" + ] + }, + "Cloth Dyer": { + "time": 5, + "res": 20, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "City", + "Peasant" + ], + "skills": [ + [ + 6, + "Cloth Dyeing", + "Dye Manufacture", + "Accounting", + "Haggling", + "Fabric-wise", + "Mineral-wise" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Villager", - "Servitude", - "Outcast" - ], - "skills": [ - [ - 6, - "Soldiering", - "Appropriate Weapons", - "Shield Training", - "Brawling", - "Foraging", - "Firebuilding" - ] - ], - "traits": [ - 1 - ], - "key_leads": [ - "Villager Setting", - "Servitude And Captive Setting", - "Outcast Subsetting" - ] - }, - "Archer": { - "time": 3, - "res": 5, - "stat": [ - [ + "Many-colored Hands" + ], + "requires": "Apprentice", + "requires_expr": [ + "apprentice" + ], + "key_leads": [ + "City Dweller Setting", + "Peasant Setting" + ] + }, + "Bowyer": { + "time": 6, + "res": 15, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "City", + "Peasant", + "Outcast" + ], + "skills": [ + [ + 4, + "Bowyer", + "Fletcher", + "Mending", + "Bow", + "Bow-wise" + ] + ], + "traits": [ + 1 + ], + "requires": "Apprentice, Huntsman, Forester or Archer", + "requires_expr": [ + "apprentice", + "huntsman", + "forester", + "archer" + ], + "key_leads": [ + "City Dweller Setting", + "Peasant Setting", + "Outcast Subsetting" + ] + }, + "Master Craftsman": { + "time": 10, + "res": 30, + "stat": [ + [ + 1, + "p" + ], + [ + 1, + "m" + ] + ], + "leads": [ + "City", + "Soldier" + ], + "skills": [ + [ + 6, + "Craftsman-wise", + "Artisan-wise", + "Materials-wise", + "Tools-wise" + ], + [ + 3, + "General" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Villager", - "Servitude", - "Outcast" - ], - "skills": [ - [ - 5, - "Bow", - "Fletcher", - "Brawling", - "Foraging", - "Firebuilding" - ] - ], - "traits": [ - 1 - ], - "key_leads": [ - "Villager Setting", - "Servitude And Captive Setting", - "Outcast Subsetting" - ] - }, - "Crossbowman": { - "time": 3, - "res": 7, - "stat": [ - [ + "Perfectionist", + "Early Riser", + "Stubborn", + "Healthy" + ], + "requires": "Journeyman", + "requires_expr": [ + "journeyman" + ], + "key_leads": [ + "City Dweller Setting", + "Professional Soldier Subsetting" + ] + }, + "Vintner": { + "time": 10, + "res": 40, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Court", + "Peasant", + "City" + ], + "skills": [ + [ + 4, + "Vintner", + "Wine Tasting", + "Estate Management", + "Grape-wise" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Villager", - "Servitude", - "Outcast" - ], - "skills": [ - [ - 5, - "Crossbow", - "Fletcher", - "Brawling", - "Foraging", - "Firebuilding" - ] - ], - "traits": [ - 1 - ], - "key_leads": [ - "Villager Setting", - "Servitude And Captive Setting", - "Outcast Subsetting" - ] - }, - "Sailor": { - "time": 5, - "res": 5, - "stat": [ - [ + "Patient", + "Lugubrious" + ], + "restrict": "May not be the character's second lifepath.", + "requires_expr": [ + "+has_n_lifepaths_or_more", + 2 + ], + "key_leads": [ + "Noble Court Subsetting", + "Peasant Setting", + "City Dweller Setting" + ] + }, + "Apiarist": { + "time": 8, + "res": 20, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "City", + "Court", + "Peasant" + ], + "skills": [ + [ + 4, + "Insect Husbandry", + "Carpentry", + "Firebuilding", + "Honey-wise" + ] + ], + "traits": [ + 2, + "Stung Once (Once)", + "Beespeaker" + ], + "key_leads": [ + "City Dweller Setting", + "Noble Court Subsetting", + "Peasant Setting" + ] + }, + "Mining Engineer": { + "time": 8, + "res": 15, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "City", + "Court", + "Soldier" + ], + "skills": [ + [ + 5, + "Prospecting", + "Engineering", + "Ore-wise", + "Rock-wise", + "Command" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Seafaring", - "Outcast", - "Villager", - "Servitude" - ], - "skills": [ - [ - 6, - "Seamanship", - "Rigging", - "Knots", - "Mending", - "Navigation", - "Knives", - "Sword" - ] - ], - "traits": [ - 1, - "Iron Stomach", - "Sea Legs", - "Affinity For Rope" - ], - "key_leads": [ - "Seafaring Setting", - "Outcast Subsetting", - "Villager Setting", - "Servitude And Captive Setting" - ] - }, - "Herald": { - "time": 3, - "res": 7, - "stat": [ - [ + "Grim", + "Agoraphobic", + "Deep Sense" + ], + "requires": "Apprentice, Miner, Student or Journeyman", + "requires_expr": [ + "apprentice", + "miner", + "student", + "journeyman" + ], + "key_leads": [ + "City Dweller Setting", + "Noble Court Subsetting", + "Professional Soldier Subsetting" + ] + }, + "Town Official": { + "time": 5, + "res": 25, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "City", + "Outcast", + "Soldier" + ], + "skills": [ + [ + 8, + "Rule Of Law", + "Persuasion", + "Etiquette", + "Interrogation", + "Falsehood", + "Town-wise" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Villager", - "Servitude", - "Court" - ], - "skills": [ - [ - 4, - "Oratory", - "Conspicuous", - "Riding", - "Heraldry", - "Bannerman-wise" - ] - ], - "traits": [ - 1 - ], - "key_leads": [ - "Villager Setting", - "Servitude And Captive Setting", - "Noble Court Subsetting" - ] - }, - "Bannerman": { - "time": 3, - "res": 7, - "stat": [ - [ + "Pragmatic" + ], + "requires": "Clerk, Priest or Student", + "requires_expr": [ + "clerk", + "priest", + "student" + ], + "key_leads": [ + "City Dweller Setting", + "Outcast Subsetting", + "Professional Soldier Subsetting" + ] + }, + "Merchant": { + "time": 7, + "res": 30, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "City", + "Outcast", + "Seafaring" + ], + "skills": [ + [ + 6, + "Accounting", + "Persuasion", + "Falsehood", + "Haggling", + "Wholesale-wise", + "Landlord-wise" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Villager", - "Servitude", - "Court" - ], - "skills": [ - [ - 5, - "Conspicuous", - "Riding", - "Appropriate Weapons", - "Armor Training" - ] - ], - "traits": [ - 2, - "Honored", - "Brutal", - "Aggressive" - ], - "key_leads": [ - "Villager Setting", - "Servitude And Captive Setting", - "Noble Court Subsetting" - ] - }, - "Scout": { - "time": 3, - "res": 4, - "stat": [ - [ + "Distracted" + ], + "requires": "Accountant, Sea Captain, Shopkeeper, Smuggler, Fence, Vintner or Chamberlain", + "requires_expr": [ + "accountant", + "ship's captain", + "shopkeeper", + "smuggler", + "fence", + "vintner", + "chamberlain" + ], + "key_leads": [ + "City Dweller Setting", + "Outcast Subsetting", + "Seafaring Setting" + ] + }, + "Village Wife": { + "time": 8, + "res": 5, + "stat": [ + [ + 1, + "p" + ], + [ + 1, + "m" + ] + ], + "leads": [ + "Religious", + "City", + "Servitude" + ], + "skills": [ + [ + 2, + "Child Rearing", + "Cooking" + ] + ], + "traits": [ + 1 + ], + "note": "A player who takes the Village Wife lifepath may also choose her husband's lifepath from the Villager setting and may choose from his skills: she gets half of his skill points rounded down. She also receives half of her husband's resource points.", + "restrict": "Character must be female.", + "requires_expr": [ + "+sex", + "female" + ], + "key_leads": [ + "Religious Subsetting", + "City Dweller Setting", + "Servitude And Captive Setting" + ] + } + }, + "City Dweller Setting": { + "City Born": { + "time": 12, + "res": 10, + "leads": [ + "Servitude", + "Court", + "Noble", + "Outcast" + ], + "skills": [ + [ + 4, + "General" + ] + ], + "traits": [ + 1 + ], + "key_leads": [ + "Servitude And Captive Setting", + "Noble Court Subsetting", + "Noble Setting", + "Outcast Subsetting" + ] + }, + "Runner": { + "time": 3, + "res": 7, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Villager", + "Soldier" + ], + "skills": [ + [ + 3, + "Streetwise", + "Inconspicuous" + ] + ], + "traits": [ + 1 + ], + "key_leads": [ + "Villager Setting", + "Professional Soldier Subsetting" + ] + }, + "Urchin": { + "time": 2, + "res": 4, + "leads": [ + "Outcast", + "Servitude", + "Villager" + ], + "skills": [ + [ + 5, + "Inconspicuous", + "Falsehood", + "Streetwise", + "Stealthy" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Peasant", - "Servitude", - "Outcast" - ], - "skills": [ - [ - 5, - "Stealthy", - "Foraging", - "Orienteering", - "Appropriate Weapons", - "Observation" - ] - ], - "traits": [ - 1 - ], - "key_leads": [ - "Peasant Setting", - "Servitude And Captive Setting", - "Outcast Subsetting" - ] - }, - "Sergeant": { - "time": 5, - "res": 8, - "stat": [ - [ + "Sickly", + "Fleet Of Foot", + "Unheeded" + ], + "restrict": "If taken, must be the character's second or third lifepath.", + "requires_expr": [ + "+and", + [ + "+has_n_lifepaths_or_more", + 1 + ], + [ + "+has_n_lifepaths_or_less", + 2 + ] + ], + "key_leads": [ + "Outcast Subsetting", + "Servitude And Captive Setting", + "Villager Setting" + ] + }, + "Beggar": { + "time": 5, + "res": 4, + "leads": [ + "Outcast", + "Servitude", + "Villager" + ], + "skills": [ + [ + 6, + "City-wise", + "City Guard-wise", + "Wealth-wise", + "Inconspicuous", + "Persuasion", + "Falsehood" + ] + ], + "traits": [ 1, - "pm" - ] - ], - "leads": [ - "Villager", - "Servitude", - "Court" - ], - "skills": [ - [ - 6, - "Intimidation", - "Command", - "Field Dressing", - "Appropriate Weapons" - ] - ], - "traits": [ - 1 - ], - "requires": "Squire, Village Guard, City Guard or Foot Soldier", - "requires_expr": [ - "squire", - "village guard", - "city guard", - "foot soldier" - ], - "key_leads": [ - "Villager Setting", - "Servitude And Captive Setting", - "Noble Court Subsetting" - ] - }, - "Veteran": { - "time": 8, - "res": 20, - "leads": [ - "Outcast", - "Court" - ], - "skills": [ - [ - 5, - "Soldier-wise", - "Soldiering", - "Campaign History", - "Tactics" - ] - ], - "traits": [ - 2, - "Stubborn", - "Maimed" - ], - "requires": "Sergeant, Sergeant-At-Arms, Knight, Military Order or Freebooter", - "requires_expr": [ - "sergeant", - "sergeant-at-arms", - "knight", - "military order", - "freebooter" - ], - "key_leads": [ - "Outcast Subsetting", - "Noble Court Subsetting" - ] - }, - "Cavalryman": { - "time": 4, - "res": 9, - "stat": [ - [ + "Lame", + "Downtrodden", + "Hurt", + "Broken" + ], + "key_leads": [ + "Outcast Subsetting", + "Servitude And Captive Setting", + "Villager Setting" + ] + }, + "Courier": { + "time": 4, + "res": 8, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Villager", + "Soldier" + ], + "skills": [ + [ + 4, + "Riding", + "Streetwise", + "Countryside-wise" + ] + ], + "traits": [ + 1 + ], + "key_leads": [ + "Villager Setting", + "Professional Soldier Subsetting" + ] + }, + "Laborer": { + "time": 4, + "res": 4, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Soldier", + "Outcast", + "Servitude", + "Peasant" + ], + "skills": [ + [ + 2, + "Ditch Digging", + "Hauling" + ] + ], + "traits": [ + 2, + "Drunk", + "Mind-numbing Work" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "Outcast Subsetting", + "Servitude And Captive Setting", + "Peasant Setting" + ] + }, + "Pilgrim": { + "time": 2, + "res": 3, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Religious", + "Servitude", + "Villager" + ], + "skills": [ + [ + 4, + "Religious Diatribe", + "City-wise", + "Shrine-wise", + "Doctrine" + ] + ], + "traits": [ + 2, + "Tall Tale Teller", + "Stinky" + ], + "key_leads": [ + "Religious Subsetting", + "Servitude And Captive Setting", + "Villager Setting" + ] + }, + "Groom": { + "time": 4, + "res": 5, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Villager", + "Peasant", + "Soldier" + ], + "skills": [ + [ + 6, + "Road-wise", + "Driving", + "Riding", + "Animal Husbandry", + "Mending", + "City-wise", + "Traveler-wise" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Villager", - "Servitude", - "Court" - ], - "skills": [ - [ - 10, - "Riding", - "Mounted Combat Training", - "Armor Training", - "Shield Training", - "Appropriate Weapons", - "Horse-wise", - "Haggling" - ] - ], - "traits": [ - 1 - ], - "requires": "A prior lifepath having to do with horses - Knight, Squire, Groom, Master of Horses, etc.", - "requires_expr": [ - "knight", - "squire", - "groom", - "master of horses", - "farrier", - "military order" - ], - "key_leads": [ - "Villager Setting", - "Servitude And Captive Setting", - "Noble Court Subsetting" - ] - }, - "Journeyman": { - "time": 5, - "res": 15, - "stat": [ - [ + "Peripatetic" + ], + "key_leads": [ + "Villager Setting", + "Peasant Setting", + "Professional Soldier Subsetting" + ] + }, + "Duelist": { + "time": 4, + "res": 8, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Soldier", + "Outcast", + "Servitude" + ], + "skills": [ + [ + 7, + "Sword", + "Brawling", + "Two-fisted Fighting Training", + "Streetwise", + "Haggling", + "Conspicuous", + "Trial By Combat-wise" + ] + ], + "traits": [ 1, - "pm" - ] - ], - "leads": [ - "Villager", - "Peasant", - "Outcast" - ], - "skills": [ - [ - 5, - "Blacksmith", - "Appraisal", - "Haggling", - "Ridiculous Request-wise" - ] - ], - "traits": [ - 1 - ], - "requires": "Apprentice", - "requires_expr": [ - "apprentice" - ], - "key_leads": [ - "Villager Setting", - "Peasant Setting", - "Outcast Subsetting" - ] - }, - "Armorer": { - "time": 8, - "res": 20, - "stat": [ - [ + "Mercenary", + "Cold-blooded", + "Fearless" + ], + "requires": "Squire or any outcast or soldier lifepath or any guard lifepath.", + "requires_expr": [ + "squire", + "outcast subsetting:urchin", + "outcast subsetting:apostate", + "outcast subsetting:blackmailer", + "outcast subsetting:kidnapper", + "outcast subsetting:pillager", + "outcast subsetting:vagrant", + "outcast subsetting:cripple", + "outcast subsetting:poacher", + "outcast subsetting:deranged", + "outcast subsetting:outlaw", + "outcast subsetting:fence", + "outcast subsetting:gravedigger", + "outcast subsetting:ratcatcher", + "outcast subsetting:beggar", + "outcast subsetting:leper", + "outcast subsetting:prostitute", + "outcast subsetting:whoremonger", + "outcast subsetting:itinerant performer", + "outcast subsetting:insurrectionist", + "outcast subsetting:cultist", + "outcast subsetting:poisoner", + "outcast subsetting:thug", + "outcast subsetting:desperate killer", + "outcast subsetting:bandit", + "outcast subsetting:pirate", + "outcast subsetting:smuggler", + "outcast subsetting:freebooter", + "outcast subsetting:strider", + "outcast subsetting:mad summoner", + "outcast subsetting:rogue wizard", + "outcast subsetting:crazy witch", + "outcast subsetting:heretic priest", + "outcast subsetting:thinker", + "professional soldier subsetting:runner", + "professional soldier subsetting:apprentice", + "professional soldier subsetting:musician", + "professional soldier subsetting:foot soldier", + "professional soldier subsetting:archer", + "professional soldier subsetting:crossbowman", + "professional soldier subsetting:sailor", + "professional soldier subsetting:herald", + "professional soldier subsetting:bannerman", + "professional soldier subsetting:scout", + "professional soldier subsetting:sergeant", + "professional soldier subsetting:veteran", + "professional soldier subsetting:cavalryman", + "professional soldier subsetting:journeyman", + "professional soldier subsetting:armorer", + "professional soldier subsetting:atilliator", + "professional soldier subsetting:chaplain", + "professional soldier subsetting:engineer", + "professional soldier subsetting:wizard of war", + "professional soldier subsetting:quartermaster", + "professional soldier subsetting:captain", + "village guard", + "city guard", + "guard captain" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "Outcast Subsetting", + "Servitude And Captive Setting" + ] + }, + "Coin Clipper": { + "time": 6, + "res": 15, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Outcast", + "Court" + ], + "skills": [ + [ + 5, + "Streetwise", + "Forgery", + "Falsehood", + "Intimidation", + "Counterfeiting", + "Coin-wise" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "City", - "Villager", - "Outcast" - ], - "skills": [ - [ - 9, - "Mending", - "Blacksmith", - "Armorer", - "Weaponsmith", - "Etching", - "Tanner" - ] - ], - "traits": [ - 1 - ], - "requires": "Journeyman", - "requires_expr": [ - "journeyman" - ], - "key_leads": [ - "City Dweller Setting", - "Villager Setting", - "Outcast Subsetting" - ] - }, - "Atilliator": { - "time": 10, - "res": 22, - "stat": [ - [ + "Light Sleeper" + ], + "key_leads": [ + "Outcast Subsetting", + "Noble Court Subsetting" + ] + }, + "Pickpocket": { + "time": 4, + "res": 8, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Outcast", + "Villager", + "Servitude" + ], + "skills": [ + [ + 5, + "Inconspicuous", + "Streetwise", + "Sleight Of Hand", + "Crowd-wise" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Court", - "City", - "Outcast" - ], - "skills": [ - [ - 6, - "Atilliator", - "Carpentry", - "Carving", - "Blacksmith", - "Tanner" - ] - ], - "traits": [ - 1 - ], - "requires": "Journeyman", - "requires_expr": [ - "journeyman" - ], - "key_leads": [ - "Noble Court Subsetting", - "City Dweller Setting", - "Outcast Subsetting" - ] - }, - "Chaplain": { - "time": 5, - "res": 15, - "stat": [ - [ + "Plain Faced" + ], + "key_leads": [ + "Outcast Subsetting", + "Villager Setting", + "Servitude And Captive Setting" + ] + }, + "Street Thug": { + "time": 3, + "res": 5, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Soldier", + "Outcast", + "Servitude" + ], + "skills": [ + [ + 5, + "Brawling", + "Intimidation", + "Streetwise", + "Darkened Streets-wise" + ] + ], + "traits": [ 1, - "pm" - ] - ], - "leads": [ - "Court", - "City", - "Outcast", - "Seafaring", - "Religious" - ], - "skills": [ - [ - 6, - "Oratory", - "Riding", - "Armor Training", - "Mounted Combat Training", - "Appropriate Weapons" - ] - ], - "traits": [ - 1, - "Idealogue", - "Psychotic" - ], - "requires": "Any Priest lifepath or Military Order", - "requires_expr": [ - "itinerant priest", - "village priest", - "venal priest", - "temple priest", - "court priest", - "heretic priest", - "priest", - "archpriest", - "military order" - ], - "key_leads": [ - "Noble Court Subsetting", - "City Dweller Setting", - "Outcast Subsetting", - "Seafaring Setting", - "Religious Subsetting" - ] - }, - "Engineer": { - "time": 5, - "res": 18, - "stat": [ - [ + "Cruel", + "Street Smart" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "Outcast Subsetting", + "Servitude And Captive Setting" + ] + }, + "Criminal": { + "time": 5, + "res": 10, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Soldier", + "Outcast", + "Servitude" + ], + "skills": [ + [ + 6, + "Inconspicuous", + "Streetwise", + "Intimidation", + "Knives", + "Climbing" + ] + ], + "traits": [ + 2, + "Cynical", + "Poker Face", + "Rainman", + "Alert" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "Outcast Subsetting", + "Servitude And Captive Setting" + ] + }, + "Confidence Man": { + "time": 4, + "res": 12, + "leads": [ + "Soldier", + "Outcast", + "Villager" + ], + "skills": [ + [ + 5, + "Falsehood", + "Inconspicuous", + "Disguise", + "Persuasion", + "Grift-wise" + ] + ], + "traits": [ + 1 + ], + "key_leads": [ + "Professional Soldier Subsetting", + "Outcast Subsetting", + "Villager Setting" + ] + }, + "City Peddler": { + "time": 5, + "res": 10, + "leads": [ + "Villager", + "City", + "Servitude", + "Outcast" + ], + "skills": [ + [ + 7, + "Mending", + "Sing", + "Haggling", + "Chandler", + "Persuasion", + "Inconspicuous", + "Falsehood" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Court", - "City", - "Outcast" - ], - "skills": [ - [ - 6, - "Artillerist", - "Engineering", - "Fortifications" - ] - ], - "traits": [ - 1, - "Smart", - "Sense Of Distance" - ], - "requires": "Student, Engineer, Mining Engineer or Artillerist's Mate", - "requires_expr": [ - "student", - "engineer", - "mining engineer", - "artillerist's mate" - ], - "key_leads": [ - "Noble Court Subsetting", - "City Dweller Setting", - "Outcast Subsetting" - ] - }, - "Wizard Of War": { - "time": 4, - "res": 20, - "stat": [ - [ + "The Story" + ], + "key_leads": [ + "Villager Setting", + "City Dweller Setting", + "Servitude And Captive Setting", + "Outcast Subsetting" + ] + }, + "Sailor": { + "time": 5, + "res": 5, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Soldier", + "Peasant", + "Servitude", + "Seafaring" + ], + "skills": [ + [ + 5, + "Rigging", + "Knots", + "Brawling", + "Mending", + "Sing", + "Gambling" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Court", - "City", - "Outcast" - ], - "skills": [ - [ - 7, - "Sorcery", - "Strategy Games", - "Soldier-wise", - "War-wise", - "Haggling", - "Cartography" - ] - ], - "traits": [ - 1, - "Arrogant" - ], - "requires": "Neophyte Sorcerer, Arcane Devotee, Weather Witch, Rogue Wizard or Mad Summoner", - "requires_expr": [ - "neophyte sorcerer", - "arcane devotee", - "weather witch", - "rogue wizard", - "mad summoner" - ], - "key_leads": [ - "Noble Court Subsetting", - "City Dweller Setting", - "Outcast Subsetting" - ] - }, - "Quartermaster": { - "time": 5, - "res": 17, - "stat": [ - [ + "Superstitious", + "Sea Legs" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "Peasant Setting", + "Servitude And Captive Setting", + "Seafaring Setting" + ] + }, + "Student": { + "time": 4, + "res": 5, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Peasant", + "Villager", + "City", + "Court", + "Servitude", + "Outcast", + "Soldier", + "Seafaring", + "Religious" + ], + "skills": [ + [ + 11, + "Write", + "Read", + "Philosophy", + "Rule Of Law", + "History", + "Symbology", + "Anatomy", + "Astrology", + "Inconspicuous", + "Streetwise", + "City-wise" + ] + ], + "traits": [ + 3, + "Rabble-rouser", + "Drunk", + "Geometric" + ], + "key_leads": [ + "Peasant Setting", + "Villager Setting", + "City Dweller Setting", + "Noble Court Subsetting", + "Servitude And Captive Setting", + "Outcast Subsetting", + "Professional Soldier Subsetting", + "Seafaring Setting", + "Religious Subsetting" + ] + }, + "Ganymede": { + "time": 5, + "res": 15, + "leads": [ + "Outcast", + "Servitude", + "Court" + ], + "skills": [ + [ + 5, + "Fashion-wise", + "Inconspicuous", + "Conspicuous", + "Soothing Platitudes" + ] + ], + "traits": [ + 2, + "Catamite", + "Flamboyant", + "Comely", + "Sharp Dresser" + ], + "key_leads": [ + "Outcast Subsetting", + "Servitude And Captive Setting", + "Noble Court Subsetting" + ] + }, + "Dilettante": { + "time": 3, + "res": 8, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Villager", + "Court", + "Outcast" + ], + "skills": [ + [ + 4, + "Sorcery-wise", + "Obscure History", + "Falsehood" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Villager", - "City", - "Court" - ], - "skills": [ - [ - 6, - "Administration", - "Accounting", - "Haggling", - "Logistics" - ] - ], - "traits": [ - 1, - "Light Sleeper" - ], - "requires": "Sergeant, Veteran, Steward, Ship's Captain, Guard Captain, Merchant, Man-At-Arms, Smuggler, Constable or Lord", - "requires_expr": [ - "sergeant", - "veteran", - "steward", - "ship's captain", - "guard captain", - "merchant", - "man-at-arms", - "smuggler", - "constable", - "lord" - ], - "key_leads": [ - "Villager Setting", - "City Dweller Setting", - "Noble Court Subsetting" - ] - }, - "Captain": { - "time": 6, - "res": 35, - "stat": [ - [ + "Superstitious", + "Entropic", + "Cipher" + ], + "key_leads": [ + "Villager Setting", + "Noble Court Subsetting", + "Outcast Subsetting" + ] + }, + "Neophyte Sorcerer": { + "time": 6, + "res": 12, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Villager", + "Peasant", + "Outcast", + "Servitude" + ], + "skills": [ + [ + 6, + "Write", + "Read", + "Research", + "Symbology", + "Great Masters-wise" + ] + ], + "traits": [ + 1, + "Extremely Respectful Of One's Betters", + "Bitter", + "Gifted" + ], + "key_leads": [ + "Villager Setting", + "Peasant Setting", + "Outcast Subsetting", + "Servitude And Captive Setting" + ] + }, + "Temple Acolyte": { + "time": 5, + "res": 10, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Peasant", + "Outcast", + "Servitude", + "Religious" + ], + "skills": [ + [ + 5, + "Doctrine", + "Bureaucracy", + "Write", + "Read", + "Temple-wise" + ] + ], + "traits": [ + 1, + "Believer", + "Tonsured", + "Faithful" + ], + "key_leads": [ + "Peasant Setting", + "Outcast Subsetting", + "Servitude And Captive Setting", + "Religious Subsetting" + ] + }, + "Sculptor": { + "time": 5, + "res": 8, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Outcast", + "Peasant", + "Court" + ], + "skills": [ + [ + 6, + "Sculpture", + "Mason", + "Blacksmith", + "Carpentry", + "Stone-wise" + ] + ], + "traits": [ + 2, + "Passionate" + ], + "key_leads": [ + "Outcast Subsetting", + "Peasant Setting", + "Noble Court Subsetting" + ] + }, + "Painter": { + "time": 5, + "res": 5, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Outcast", + "Peasant", + "Court" + ], + "skills": [ + [ + 5, + "Painting", + "Illuminations", + "Anatomy", + "Paint-wise" + ] + ], + "traits": [ + 2, + "Odd", + "Perspective", + "Greater Muse" + ], + "key_leads": [ + "Outcast Subsetting", + "Peasant Setting", + "Noble Court Subsetting" + ] + }, + "Composer": { + "time": 4, + "res": 5, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Outcast", + "Peasant", + "Court" + ], + "skills": [ + [ + 5, + "Music Composition", + "Poetry", + "Sing", + "Musical Instrument" + ] + ], + "traits": [ + 2, + "Isoteric", + "Remote" + ], + "key_leads": [ + "Outcast Subsetting", + "Peasant Setting", + "Noble Court Subsetting" + ] + }, + "Dramaturge": { + "time": 4, + "res": 5, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Outcast", + "Peasant", + "Court" + ], + "skills": [ + [ + 5, + "Playwright", + "Composition", + "Write", + "Drama-wise" + ] + ], + "traits": [ + 1, + "Other Life" + ], + "key_leads": [ + "Outcast Subsetting", + "Peasant Setting", + "Noble Court Subsetting" + ] + }, + "Performer": { + "time": 3, + "res": 5, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Villager", + "Outcast", + "Soldier" + ], + "skills": [ + [ + 6, + "Acting", + "Persuasion", + "Sing", + "Falsehood", + "Conspicuous", + "Sleight Of Hand", + "Musical Instrument" + ] + ], + "traits": [ + 2, + "Colorful" + ], + "key_leads": [ + "Villager Setting", + "Outcast Subsetting", + "Professional Soldier Subsetting" + ] + }, + "Tinkerer": { + "time": 7, + "res": 8, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Villager", + "Peasant", + "Outcast" + ], + "skills": [ + [ + 5, + "Mending", + "Scavenging", + "Junk-wise" + ] + ], + "traits": [ + 2 + ], + "key_leads": [ + "Villager Setting", + "Peasant Setting", + "Outcast Subsetting" + ] + }, + "Coal Man": { + "time": 4, + "res": 5, + "leads": [ + "Servitude", + "Peasant", + "Outcast", + "Soldier" + ], + "skills": [ + [ + 4, + "Firebuilding", + "Streetwise", + "Charcoal-wise", + "Haggling" + ] + ], + "traits": [ + 2, + "Hacking Cough" + ], + "key_leads": [ + "Servitude And Captive Setting", + "Peasant Setting", + "Outcast Subsetting", + "Professional Soldier Subsetting" + ] + }, + "Seamstress": { + "time": 5, + "res": 10, + "leads": [ + "Villager", + "Peasant" + ], + "skills": [ + [ + 4, + "Sewing", + "Embroidery", + "Clothing-wise", + "Fashion-wise" + ] + ], + "traits": [ + 1, + "Fretful", + "Sharp Dresser" + ], + "key_leads": [ + "Villager Setting", + "Peasant Setting" + ] + }, + "Barkeep": { + "time": 5, + "res": 15, + "leads": [ + "Villager", + "Peasant" + ], + "skills": [ + [ + 4, + "Drink-wise", + "Drunk-wise", + "Persuasion" + ] + ], + "traits": [ + 1, + "Good Listener" + ], + "key_leads": [ + "Villager Setting", + "Peasant Setting" + ] + }, + "Shopkeeper": { + "time": 6, + "res": 16, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Villager", + "Peasant" + ], + "skills": [ + [ + 4, + "Merchant-wise", + "Haggling", + "Accounting", + "Observation" + ] + ], + "key_leads": [ + "Villager Setting", + "Peasant Setting" + ] + }, + "Baker": { + "time": 6, + "res": 10, + "leads": [ + "Villager", + "Peasant" + ], + "skills": [ + [ + 5, + "Baking", + "Cooking", + "Daily Bread-wise", + "Sweet Tooth-wise" + ] + ], + "traits": [ + 1, + "Floury" + ], + "key_leads": [ + "Villager Setting", + "Peasant Setting" + ] + }, + "Alewife": { + "time": 6, + "res": 12, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Court", + "Peasant", + "Villager" + ], + "skills": [ + [ + 5, + "Brewer", + "Mending", + "Drinking", + "Administration", + "Drunk Husband-wise" + ] + ], + "traits": [ + 1, + "Domineering Presence" + ], + "restrict": "Character must be female", + "requires_expr": [ + "+sex", + "female" + ], + "key_leads": [ + "Noble Court Subsetting", + "Peasant Setting", + "Villager Setting" + ] + }, + "Conner": { + "time": 6, + "res": 12, + "leads": [ + "Court", + "Peasant", + "Villager" + ], + "skills": [ + [ + 5, + "Brewer", + "Mending", + "Drinking", + "Cooper", + "Beer-wise" + ] + ], + "traits": [ 1, - "p" + "Red Cheeks", + "Drunk" + ], + "key_leads": [ + "Noble Court Subsetting", + "Peasant Setting", + "Villager Setting" + ] + }, + "Clerk": { + "time": 4, + "res": 9, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Villager", + "Outcast", + "Soldier" + ], + "skills": [ + [ + 4, + "Bureaucracy", + "Write", + "Read", + "Accounting", + "Bribe-wise", + "Paperwork-wise" + ] + ], + "traits": [ + 1 + ], + "key_leads": [ + "Villager Setting", + "Outcast Subsetting", + "Professional Soldier Subsetting" + ] + }, + "Scribe": { + "time": 7, + "res": 10, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Villager", + "Peasant" + ], + "skills": [ + [ + 5, + "Write", + "Illuminations", + "Read", + "Handwriting-wise" + ] + ], + "traits": [ + 1, + "Near-sighted", + "Cramped Hands" + ], + "requires": "Student, Acolyte or Clerk", + "requires_expr": [ + "student", + "acolyte", + "clerk" + ], + "key_leads": [ + "Villager Setting", + "Peasant Setting" + ] + }, + "Accountant": { + "time": 10, + "res": 15, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Villager", + "Peasant" + ], + "skills": [ + [ + 4, + "Accounting", + "Bureaucracy", + "Write", + "Read", + "Ledger-wise" + ] + ], + "traits": [ + 1, + "Bored" + ], + "requires": "Clerk, Young Lady or Student", + "requires_expr": [ + "clerk", + "young lady", + "student" + ], + "key_leads": [ + "Villager Setting", + "Peasant Setting" + ] + }, + "Scholar": { + "time": 10, + "res": 15, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Villager", + "Outcast", + "Court" + ], + "skills": [ + [ + 11, + "Read", + "Research", + "History", + "Philosophy", + "Symbology", + "Instruction", + "Illuminations", + "Foreign Languages", + "Ancient Languages" + ] + ], + "traits": [ + 1, + "Know It All", + "Bookworm" + ], + "requires": "Scribe, Thinker, Archivist, Interpreter, Custodian, Bishop or any sorcerous lifepath", + "requires_expr": [ + "scribe", + "thinker", + "archivist", + "interpreter", + "custodian", + "bishop", + "augur", + "sorcerer", + "court sorcerer", + "rogue wizard", + "wizard of war", + "neophyte sorcerer" + ], + "key_leads": [ + "Villager Setting", + "Outcast Subsetting", + "Noble Court Subsetting" + ] + }, + "Moneylender": { + "time": 8, + "res": 20, + "leads": [ + "Villager", + "Peasant", + "Outcast" + ], + "skills": [ + [ + 4, + "Currency-wise", + "Haggling", + "Accounting" + ] + ], + "traits": [ + 1, + "Penny-wise" + ], + "key_leads": [ + "Villager Setting", + "Peasant Setting", + "Outcast Subsetting" + ] + }, + "Tax Collector": { + "time": 5, + "res": 18, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Villager", + "Peasant", + "Outcast" + ], + "skills": [ + [ + 4, + "Intimidation", + "Accounting", + "Haggling", + "Interrogation" + ] + ], + "traits": [ + 1, + "Hard-hearted" + ], + "restrict": "May not be the character's second lifepath.", + "requires_expr": [ + "+has_n_lifepaths_or_more", + 2 + ], + "key_leads": [ + "Villager Setting", + "Peasant Setting", + "Outcast Subsetting" + ] + }, + "Taskmaster": { + "time": 6, + "res": 15, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Villager", + "Outcast", + "Soldier" + ], + "skills": [ + [ + 5, + "Intimidation", + "Brawling", + "Sing", + "Conspicuous", + "Laborer-wise" + ] + ], + "traits": [ + 1, + "Intimidating", + "Dreadful" + ], + "restrict": "May not be the character's second lifepath", + "requires_expr": [ + "+has_n_lifepaths_or_more", + 2 + ], + "key_leads": [ + "Villager Setting", + "Outcast Subsetting", + "Professional Soldier Subsetting" + ] + }, + "Mercenary Captain": { + "time": 5, + "res": 15, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Soldier", + "Seafaring", + "Outcast" + ], + "skills": [ + [ + 6, + "Pilot", + "Fat Merchant-wise", + "Sword", + "Climbing", + "Intimidation" + ] + ], + "traits": [ + 2, + "Predatory" + ], + "requires": "Sailor, Pirate or Knight", + "requires_expr": [ + "sailor", + "pirate", + "knight" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "Seafaring Setting", + "Outcast Subsetting" + ] + }, + "City Guard": { + "time": 5, + "res": 9, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Soldier", + "Outcast" + ], + "skills": [ + [ + 5, + "Brawling", + "Intimidation", + "Drinking", + "Appropriate Weapons", + "Armor Training" + ] + ], + "traits": [ + 1, + "Drunk" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "Outcast Subsetting" + ] + }, + "Sergeant-at-arms": { + "time": 6, + "res": 11, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Soldier", + "Outcast" + ], + "skills": [ + [ + 6, + "Intimidation", + "Appropriate Weapons", + "Armor Training", + "Field Dressing" + ] + ], + "traits": [ + 1, + "Overworked" + ], + "requires": "Any Guard lifepath, Marine, First Mate, Foot Soldier, Freebooter, Squire, Man-At-Arms, Cavalryman", + "requires_expr": [ + "village guard", + "city guard", + "guard captain", + "marine", + "first mate", + "foot soldier", + "freebooter", + "squire", + "man-at-arms", + "cavalryman" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "Outcast Subsetting" + ] + }, + "Guard Captain": { + "time": 6, + "res": 15, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Soldier", + "Outcast", + "Court" + ], + "skills": [ + [ + 6, + "Etiquette", + "Riding", + "Intimidation", + "Command", + "Appropriate Weapons" + ] + ], + "traits": [ + 1, + "Exasperated" + ], + "requires": "Knight, Captain or any Sergeant", + "requires_expr": [ + "knight", + "captain", + "village sergeant", + "corrupt sergeant", + "sergeant-at-arms", + "sergeant" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "Outcast Subsetting", + "Noble Court Subsetting" + ] + }, + "Apprentice": { + "time": 7, + "res": 8, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Villager", + "Peasant", + "Soldier", + "Seafaring" + ], + "skills": [ + [ + 6, + "Mending", + "Write", + "Read", + "Hauling", + "Driving", + "Ditch Digging" + ] + ], + "traits": [ + 2, + "Broken In", + "Back-breaking Labor" + ], + "key_leads": [ + "Villager Setting", + "Peasant Setting", + "Professional Soldier Subsetting", + "Seafaring Setting" + ] + }, + "Apprentice Artisan": { + "time": 8, + "res": 10, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Villager", + "Soldier" + ], + "skills": [ + [ + 8, + "Artisan-wise", + "Mason", + "Blacksmith", + "Coppersmith", + "Whitesmith", + "Carpentry", + "Write", + "Read", + "Jargon" + ] + ], + "traits": [ + 1 + ], + "key_leads": [ + "Villager Setting", + "Professional Soldier Subsetting" + ] + }, + "Journeyman": { + "time": 6, + "res": 15, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Villager", + "Peasant", + "Soldier", + "Seafaring" + ], + "skills": [ + [ + 7, + "Haggling", + "Appraisal", + "Blacksmith", + "Carpentry", + "Tanner", + "Potter", + "Cooper" + ] + ], + "traits": [ + 1, + "Made Man", + "Geometric" + ], + "requires": "Apprentice", + "requires_expr": [ + "apprentice" + ], + "key_leads": [ + "Villager Setting", + "Peasant Setting", + "Professional Soldier Subsetting", + "Seafaring Setting" + ] + }, + "Engraver": { + "time": 7, + "res": 15, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Soldier", + "Court" + ], + "skills": [ + [ + 4, + "Engraving", + "Etching", + "Jargon" + ] + ], + "traits": [ + 1, + "Gentle But Firm" + ], + "requires": "Journeyman", + "requires_expr": [ + "journeyman" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "Noble Court Subsetting" + ] + }, + "Saddler": { + "time": 8, + "res": 25, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Villager", + "Soldier", + "Court" + ], + "skills": [ + [ + 6, + "Saddlery", + "Tanner", + "Sewing", + "Embroidery", + "Mending", + "Mount-wise" + ] + ], + "traits": [ + 1 + ], + "requires": "Journeyman", + "requires_expr": [ + "journeyman" + ], + "key_leads": [ + "Villager Setting", + "Professional Soldier Subsetting", + "Noble Court Subsetting" + ] + }, + "Armorer": { + "time": 10, + "res": 25, + "leads": [ + "Soldier", + "Court", + "Outcast" + ], + "skills": [ + [ + 7, + "Swordsman-wise", + "Blacksmith", + "Tanner", + "Armorer", + "Weaponsmith" + ] + ], + "traits": [ + 1, + "Diligent" + ], + "requires": "Journeyman", + "requires_expr": [ + "journeyman" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "Noble Court Subsetting", + "Outcast Subsetting" + ] + }, + "Plumber": { + "time": 7, + "res": 20, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Court", + "Outcast" + ], + "skills": [ + [ + 5, + "Plumbing", + "Engineering", + "Coppersmith", + "Waterworks-wise" + ] + ], + "traits": [ + 1, + "A Touch Of Madness" + ], + "requires": "Journeyman", + "requires_expr": [ + "journeyman" + ], + "key_leads": [ + "Noble Court Subsetting", + "Outcast Subsetting" + ] + }, + "Locksmith": { + "time": 8, + "res": 13, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Peasant", + "Villager" + ], + "skills": [ + [ + 4, + "Locksmith", + "Haggling", + "Lock-wise" + ] + ], + "traits": [ + 1, + "Steady Hands" + ], + "requires": "Journeyman", + "requires_expr": [ + "journeyman" + ], + "key_leads": [ + "Peasant Setting", + "Villager Setting" + ] + }, + "Jeweler": { + "time": 9, + "res": 20, + "leads": [ + "Villager", + "Peasant" + ], + "skills": [ + [ + 5, + "Jeweler", + "Lapidary", + "Appraisal", + "Haggling", + "Falsehood" + ] + ], + "traits": [ + 1, + "Guarded" + ], + "requires": "Journeyman", + "requires_expr": [ + "journeyman" + ], + "key_leads": [ + "Villager Setting", + "Peasant Setting" + ] + }, + "Gaol Warden": { + "time": 4, + "res": 15, + "leads": [ + "Outcast", + "Court", + "Soldier", + "Villager" + ], + "skills": [ + [ + 4, + "Administration", + "Etiquette", + "Gaol-wise", + "Everybody's Innocent-wise" + ] + ], + "traits": [ + 1 + ], + "requires": "Born Noble, Merchant, Sergeant, Man-At-Arms or Judge", + "requires_expr": [ + "born noble", + "merchant", + "sergeant", + "man-at-arms", + "judge" + ], + "key_leads": [ + "Outcast Subsetting", + "Noble Court Subsetting", + "Professional Soldier Subsetting", + "Villager Setting" + ] + }, + "Advocate": { + "time": 6, + "res": 25, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Outcast", + "Court", + "Villager" + ], + "skills": [ + [ + 6, + "Rule Of Law", + "Bureaucracy", + "Persuasion", + "History", + "Rhetoric" + ] + ], + "traits": [ + 1, + "Shrewd" + ], + "requires": "Student or Young Lady", + "requires_expr": [ + "student", + "young lady" + ], + "key_leads": [ + "Outcast Subsetting", + "Noble Court Subsetting", + "Villager Setting" + ] + }, + "Doctor": { + "time": 7, + "res": 20, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Outcast", + "Court", + "Villager" + ], + "skills": [ + [ + 6, + "Anatomy", + "Apothecary", + "Bloodletting", + "Surgery", + "Soothing Platitudes" + ] + ], + "traits": [ + 2, + "Frustrated" + ], + "requires": "Student or Young Lady", + "requires_expr": [ + "student", + "young lady" + ], + "key_leads": [ + "Outcast Subsetting", + "Noble Court Subsetting", + "Villager Setting" + ] + }, + "Physician": { + "time": 5, + "res": 15, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Court", + "Soldier" + ], + "skills": [ + [ + 6, + "Herbalism", + "Apothecary", + "Anatomy", + "Research", + "Herbalist-wise" + ] + ], + "traits": [ + 1 + ], + "requires": "Midwife, Young Lady or Student", + "requires_expr": [ + "midwife", + "young lady", + "student" + ], + "key_leads": [ + "Noble Court Subsetting", + "Professional Soldier Subsetting" + ] + }, + "Hospital Warden": { + "time": 4, + "res": 15, + "leads": [ + "Outcast", + "Servitude", + "Religious" + ], + "skills": [ + [ + 5, + "Administration", + "Beggar-wise", + "Vagrant-wise", + "Leper-wise" + ] + ], + "traits": [ + 2, + "Overworked", + "Generous", + "Venal", + "Hypochondriac" + ], + "requires": "Any Noble, Noble Court or Religious lifepath", + "requires_expr": [ + "noble setting:born noble", + "noble setting:bastard", + "noble setting:page", + "noble setting:student", + "noble setting:squire", + "noble setting:arcane devotee", + "junior student", + "noble setting:religious acolyte", + "noble setting:young lady", + "noble setting:knight", + "noble setting:lady", + "noble setting:lord", + "noble setting:dame", + "noble setting:baron", + "noble setting:viscount", + "noble setting:count", + "noble setting:duke", + "noble setting:noble prince", + "noble setting:prince of the blood", + "noble court subsetting:minstrel", + "noble court subsetting:court jester", + "noble court subsetting:court artist", + "noble court subsetting:servant", + "noble court subsetting:nurse", + "noble court subsetting:groom", + "noble court subsetting:gardener", + "noble court subsetting:torturer", + "noble court subsetting:forester", + "noble court subsetting:student", + "noble court subsetting:page", + "noble court subsetting:man-at-arms", + "noble court subsetting:falconer", + "noble court subsetting:huntsman", + "noble court subsetting:herald", + "noble court subsetting:court chef", + "noble court subsetting:squire", + "noble court subsetting:young lady", + "noble court subsetting:knight", + "noble court subsetting:courtier", + "noble court subsetting:governess", + "noble court subsetting:chaplain", + "noble court subsetting:court sorcerer", + "noble court subsetting:court lawyer", + "noble court subsetting:court doctor", + "noble court subsetting:chronicler", + "noble court subsetting:armorer", + "noble court subsetting:atilliator", + "noble court subsetting:court priest", + "noble court subsetting:steward", + "noble court subsetting:master of horses", + "noble court subsetting:master of hounds", + "noble court subsetting:hostage", + "noble court subsetting:bailiff", + "noble court subsetting:justicar", + "noble court subsetting:coroner", + "noble court subsetting:constable", + "noble court subsetting:treasurer", + "noble court subsetting:chamberlain", + "noble court subsetting:advisor to the court", + "religious subsetting:castrati", + "religious subsetting:pardoner", + "religious subsetting:zealous convert", + "religious subsetting:military order", + "religious subsetting:grave digger", + "religious subsetting:porter", + "religious subsetting:notary", + "religious subsetting:custodian", + "religious subsetting:interpreter", + "religious subsetting:archivist", + "religious subsetting:itinerant monk", + "religious subsetting:cloistered monk/nun", + "religious subsetting:temple acolyte", + "religious subsetting:priest", + "religious subsetting:exorcist", + "religious subsetting:inquisitor", + "religious subsetting:theologian", + "religious subsetting:archpriest", + "religious subsetting:canon", + "religious subsetting:abbot/abbess", + "religious subsetting:bishop" + ], + "key_leads": [ + "Outcast Subsetting", + "Servitude And Captive Setting", + "Religious Subsetting" + ] + }, + "Banker": { + "time": 10, + "res": 60, + "leads": [ + "Court", + "Noble" + ], + "skills": [ + [ + 4, + "Accounting", + "Administration", + "Currency-wise" + ], + [ + 2, + "General" + ] + ], + "traits": [ + 1, + "Intense" + ], + "requires": "Merchant, Moneylender, Steward, Accountant or Chamberlain", + "requires_expr": [ + "merchant", + "moneylender", + "steward", + "accountant", + "chamberlain" + ], + "key_leads": [ + "Noble Court Subsetting", + "Noble Setting" + ] + }, + "Merchant": { + "time": 6, + "res": 30, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Villager", + "Peasant", + "Court" + ], + "skills": [ + [ + 6, + "Accounting", + "Haggling", + "Supplier-wise", + "Lord-wise", + "Peasant-wise" + ] + ], + "requires": "Master Craftsman, Master of Horses, Master of Hounds, Moneylender, Steward, Jeweler, Saddler, Armorer, Cobbler, Courtier or Chamberlain", + "requires_expr": [ + "master craftsman", + "master of horses", + "master of hounds", + "moneylender", + "steward", + "jeweler", + "saddler", + "armorer", + "cobbler", + "courtier", + "chamberlain" + ], + "key_leads": [ + "Villager Setting", + "Peasant Setting", + "Noble Court Subsetting" + ] + }, + "Sorcerer": { + "time": 6, + "res": 32, + "stat": [ + [ + 1, + "p" + ], + [ + 1, + "m" + ] + ], + "leads": [ + "Villager", + "Outcast", + "Court" + ], + "skills": [ + [ + 6, + "Sorcery", + "Enchanting", + "Calligraphy" + ] + ], + "traits": [ + 1 + ], + "requires": "Neophyte Sorcerer, Arcane Devotee or Weather Witch", + "requires_expr": [ + "neophyte sorcerer", + "arcane devotee", + "weather witch" + ], + "key_leads": [ + "Villager Setting", + "Outcast Subsetting", + "Noble Court Subsetting" + ] + }, + "Temple Priest": { + "time": 5, + "res": 20, + "leads": [ + "Peasant", + "Villager", + "City", + "Court", + "Servitude", + "Outcast", + "Soldier", + "Seafaring", + "Religious" + ], + "skills": [ + [ + 8, + "Church Politics-wise", + "Doctrine", + "Oratory", + "Suasion", + "Symbology" + ] + ], + "traits": [ + 2, + "Vested", + "Aloof", + "Imperious", + "Strong-willed" + ], + "requires": "Religious Acolyte, Temple Acolyte or Military Order", + "requires_expr": [ + "religious acolyte", + "temple acolyte", + "military order" + ], + "key_leads": [ + "Peasant Setting", + "Villager Setting", + "City Dweller Setting", + "Noble Court Subsetting", + "Servitude And Captive Setting", + "Outcast Subsetting", + "Professional Soldier Subsetting", + "Seafaring Setting", + "Religious Subsetting" + ] + }, + "Judge": { + "time": 10, + "res": 30, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Court", + "Villager" + ], + "skills": [ + [ + 5, + "Rule Of Law", + "Amercement", + "Criminal-wise", + "Interrogation" + ] + ], + "traits": [ + 2, + "Ornery", + "Quick-witted" + ], + "requires": "Town Official, Tax Collector, Bailiff or Justicar", + "requires_expr": [ + "town official", + "tax collector", + "bailiff", + "justicar" + ], + "key_leads": [ + "Noble Court Subsetting", + "Villager Setting" + ] + }, + "Municipal Minister": { + "time": 9, + "res": 30, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Villager", + "Court", + "Outcast" + ], + "skills": [ + [ + 6, + "Persuasion", + "Rule Of Law", + "Administration", + "Oratory", + "Law-wise", + "Minister-wise" + ] + ], + "requires": "Town Official, Scholar, Priest, Bishop, Captain, Sea Captain, Artisan, Master Craftsman, Knight, Courtier or Master of Horses", + "requires_expr": [ + "town official", + "scholar", + "priest", + "bishop", + "captain", + "ship's captain", + "artisan", + "master craftsman", + "knight", + "courtier", + "master of horses" + ], + "key_leads": [ + "Villager Setting", + "Noble Court Subsetting", + "Outcast Subsetting" + ] + }, + "Artisan": { + "time": 10, + "res": 45, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Soldier", + "Court" + ], + "skills": [ + [ + 9, + "Jargon", + "Mason", + "Engineering", + "Architect" + ] + ], + "traits": [ + 1, + "Self-confident" + ], + "requires": "Apprentice Artisan, Engineer or Master Craftsman", + "requires_expr": [ + "apprentice artisan", + "engineer", + "master craftsman" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "Noble Court Subsetting" + ] + }, + "Master Craftsman": { + "time": 10, + "res": 45, + "stat": [ + [ + 1, + "p" + ], + [ + 1, + "m" + ] + ], + "leads": [ + "Villager", + "Court", + "Soldier" + ], + "skills": [ + [ + 6, + "Craftsman-wise", + "Artisan-wise", + "Materials-wise", + "Tools-wise" + ], + [ + 3, + "General" + ] + ], + "traits": [ + 2, + "Ambitious", + "Charismatic" + ], + "requires": "Journeyman and one of the following: Locksmith, Plumber, Engraver, Saddler, Blacksmith, Armorer, Atilliator, Cobbler, Bowyer or Taskmaster", + "requires_expr": [ + "+and", + [ + "journeyman" + ], + [ + "locksmith", + "plumber", + "engraver", + "saddler", + "blacksmith", + "armorer", + "atilliator", + "cobbler", + "bowyer", + "taskmaster" + ] + ], + "key_leads": [ + "Villager Setting", + "Noble Court Subsetting", + "Professional Soldier Subsetting" + ] + }, + "Bishop": { + "time": 12, + "res": 60, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Court", + "Religious" + ], + "skills": [ + [ + 5, + "Etiquette", + "Bureaucracy", + "Ritual", + "Church-wise", + "City-wise" + ] + ], + "traits": [ + 1, + "Holier" + ], + "requires": "Archpriest, Canon, Steward, Chamberlain or the Your Grace trait", + "requires_expr": [ + "+or", + [ + "archpriest", + "canon", + "steward", + "chamberlain" + ], + [ + "+trait", + "your grace" + ] + ], + "key_leads": [ + "Noble Court Subsetting", + "Religious Subsetting" + ] + }, + "Magnate": { + "time": 12, + "res": 75, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Peasant", + "Villager", + "City", + "Noble", + "Court", + "Servitude", + "Outcast", + "Soldier", + "Seafaring", + "Religious" + ], + "skills": [ + [ + 6, + "Administration", + "Merchant-wise", + "Court-wise", + "Commodities-wise", + "Pirates-wise", + "Bandit-wise" + ], + [ + 1, + "General" + ] + ], + "traits": [ + 2, + "Self-satisfied", + "Greedy", + "Affinity For Business" + ], + "requires": "Merchant or Master of Horses", + "requires_expr": [ + "merchant", + "master of horses" + ], + "key_leads": [ + "Peasant Setting", + "Villager Setting", + "City Dweller Setting", + "Noble Setting", + "Noble Court Subsetting", + "Servitude And Captive Setting", + "Outcast Subsetting", + "Professional Soldier Subsetting", + "Seafaring Setting", + "Religious Subsetting" + ] + }, + "City Wife": { + "time": 6, + "res": 5, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Religious" + ], + "skills": [ + [ + 2, + "Child Rearing", + "Husband-wise" + ] + ], + "traits": [ + 1 + ], + "note": "A player who takes the City Wife lifepath may also choose her husband's lifepath from the City Dweller setting and may choose from his skills: she gets half of his skill points rounded down. She also receives a quarter of her husband's resource points.", + "restrict": "Character must be female.", + "requires_expr": [ + "+sex", + "female" + ], + "key_leads": [ + "Religious Subsetting" + ] + } + }, + "Noble Setting": { + "Born Noble": { + "time": 8, + "res": 15, + "leads": [ + "Peasant", + "Villager", + "City", + "Noble", + "Court", + "Servitude", + "Outcast", + "Soldier", + "Seafaring", + "Religious" + ], + "skills": [ + [ + 5, + "General" + ] + ], + "traits": [ + 1, + "Mark Of Privilege", + "Your Lordship", + "Your Grace", + "Your Eminence" + ], + "key_leads": [ + "Peasant Setting", + "Villager Setting", + "City Dweller Setting", + "Noble Setting", + "Noble Court Subsetting", + "Servitude And Captive Setting", + "Outcast Subsetting", + "Professional Soldier Subsetting", + "Seafaring Setting", + "Religious Subsetting" + ] + }, + "Bastard": { + "time": 6, + "res": 15, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Outcast", + "Soldier", + "City", + "Religious" + ], + "skills": [ + [ + 4, + "Family Secret-wise", + "Etiquette", + "Extortion" + ] + ], + "traits": [ + 2, + "Bastard", + "Bitter", + "Cynical", + "Happy-go-lucky" + ], + "restrict": "This must be the character's second lifepath, and may only be taken once", + "requires_expr": [ + "+and", + [ + "+has_n_lifepaths_or_more", + 1 + ], + [ + "+has_n_lifepaths_or_less", + 1 + ] + ], + "key_leads": [ + "Outcast Subsetting", + "Professional Soldier Subsetting", + "City Dweller Setting", + "Religious Subsetting" + ] + }, + "Page": { + "time": 6, + "res": 15, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Soldier", + "City", + "Servitude" + ], + "skills": [ + [ + 7, + "Riding", + "Brawling", + "Write", + "Read", + "Sword", + "Etiquette" + ] + ], + "traits": [ + 1 + ], + "restrict": "This must be the character's second lifepath, and may only be taken once", + "requires_expr": [ + "+and", + [ + "+has_n_lifepaths_or_more", + 1 + ], + [ + "+has_n_lifepaths_or_less", + 1 + ] + ], + "key_leads": [ + "Professional Soldier Subsetting", + "City Dweller Setting", + "Servitude And Captive Setting" + ] + }, + "Student": { + "time": 4, + "res": 10, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "City", + "Court" + ], + "skills": [ + [ + 8, + "Write", + "Read", + "Rule Of Law", + "Oratory", + "Doctrine", + "Etiquette" + ] + ], + "traits": [ + 1 + ], + "key_leads": [ + "City Dweller Setting", + "Noble Court Subsetting" + ] + }, + "Squire": { + "time": 6, + "res": 15, + "stat": [ + [ + 1, + "p" + ], + [ + 1, + "m" + ] + ], + "leads": [ + "Soldier", + "City", + "Servitude", + "Outcast" + ], + "skills": [ + [ + 9, + "Sword", + "Mounted Combat Training", + "Shield Training", + "Armor Training", + "Lance", + "Knives", + "Crossbow" + ] + ], + "traits": [ + 1 + ], + "requires": "Page or any Professional Soldier lifepath", + "requires_expr": [ + "page", + "professional soldier subsetting:runner", + "professional soldier subsetting:apprentice", + "professional soldier subsetting:musician", + "professional soldier subsetting:foot soldier", + "professional soldier subsetting:archer", + "professional soldier subsetting:crossbowman", + "professional soldier subsetting:sailor", + "professional soldier subsetting:herald", + "professional soldier subsetting:bannerman", + "professional soldier subsetting:scout", + "professional soldier subsetting:sergeant", + "professional soldier subsetting:veteran", + "professional soldier subsetting:cavalryman", + "professional soldier subsetting:journeyman", + "professional soldier subsetting:armorer", + "professional soldier subsetting:atilliator", + "professional soldier subsetting:chaplain", + "professional soldier subsetting:engineer", + "professional soldier subsetting:wizard of war", + "professional soldier subsetting:quartermaster", + "professional soldier subsetting:captain" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "City Dweller Setting", + "Servitude And Captive Setting", + "Outcast Subsetting" + ] + }, + "Arcane Devotee": { + "time": 6, + "res": 10, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "City", + "Court", + "Outcast" + ], + "skills": [ + [ + 6, + "Calligraphy", + "Write", + "Read", + "Research", + "Symbology" + ] + ], + "traits": [ + 2, + "Base Humility", + "Gifted" + ], + "key_leads": [ + "City Dweller Setting", + "Noble Court Subsetting", + "Outcast Subsetting" + ] + }, + "Religious Acolyte": { + "time": 5, + "res": 10, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "City", + "Religious", + "Court" + ], + "skills": [ + [ + 6, + "Doctrine", + "Bureaucracy", + "Write", + "Read", + "Etiquette" + ] + ], + "traits": [ + 2, + "Tonsured", + "Faithful" + ], + "key_leads": [ + "City Dweller Setting", + "Religious Subsetting", + "Noble Court Subsetting" + ] + }, + "Young Lady": { + "time": 10, + "res": 20, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "City", + "Religious", + "Court" + ], + "skills": [ + [ + 11, + "Write", + "Read", + "Etiquette", + "Astrology", + "Musical Instrument", + "Composition", + "Field Dressing", + "Apothecary", + "Doctrine" + ] + ], + "traits": [ + 2 + ], + "restrict": "This must be the character's second or third lifepath, and may only be taken once. Character must be female.", + "requires_expr": [ + "+and", + [ + "+sex", + "female" + ], + [ + "+has_n_lifepaths_or_more", + 1 + ], + [ + "+has_n_lifepaths_or_less", + 2 + ] + ], + "key_leads": [ + "City Dweller Setting", + "Religious Subsetting", + "Noble Court Subsetting" + ] + }, + "Knight": { + "time": 5, + "res": 20, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Soldier", + "City", + "Outcast", + "Religious" + ], + "skills": [ + [ + 10, + "Mounted Combat Training", + "Shield Training", + "Armor Training", + "Appropriate Weapons", + "Intimidation", + "Hunting", + "Conspicuous" + ] + ], + "traits": [ + 2, + "Sworn Homage" + ], + "requires": "Squire or Cavalryman", + "requires_expr": [ + "squire", + "cavalryman" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "City Dweller Setting", + "Outcast Subsetting", + "Religious Subsetting" + ] + }, + "Lady": { + "time": 5, + "res": 25, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "City", + "Outcast", + "Religious", + "Court" + ], + "skills": [ + [ + 11, + "Etiquette", + "Estate Management", + "Persuasion", + "Seduction", + "Inconspicuous", + "Doctrine", + "Husband-wise", + "Estate-wise", + "Staff-wise", + "Court-wise" + ] + ], + "traits": [ + 1 + ], + "requires": "Young Lady, Courtier, Knight or City Wife with Magnate or Bishop chosen as the husband's lifepath", + "requires_expr": [ + "young lady", + "courtier", + "knight", + "city wife" + ], + "key_leads": [ + "City Dweller Setting", + "Outcast Subsetting", + "Religious Subsetting", + "Noble Court Subsetting" + ] + }, + "Lord": { + "time": 7, + "res": 50, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Soldier", + "City", + "Court" + ], + "skills": [ + [ + 6, + "Hunting", + "Dance", + "Sing", + "Falconry", + "Estate Management" + ], + [ + 1, + "General" + ] + ], + "traits": [ + 1 + ], + "requires": "Knight or the Your Lordship trait", + "requires_expr": [ + "+or", + [ + "knight" + ], + [ + "+trait", + "your lordship" + ] + ], + "key_leads": [ + "Professional Soldier Subsetting", + "City Dweller Setting", + "Noble Court Subsetting" + ] + }, + "Dame": { + "time": 7, + "res": 40, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "City", + "Court", + "Outcast", + "Religious" + ], + "skills": [ + [ + 3, + "Estate Management", + "Noble-wise" + ], + [ + 2, + "General" + ] + ], + "traits": [ + 1 + ], + "requires": "Lady, City Wife with Magnate or Bishop as the husband's lifepath or the Your Lordship trait", + "requires_expr": [ + "+or", + [ + "lady", + "city wife" + ], + [ + "+trait", + "your lordship" + ] + ], + "key_leads": [ + "City Dweller Setting", + "Noble Court Subsetting", + "Outcast Subsetting", + "Religious Subsetting" + ] + }, + "Baron": { + "time": 8, + "res": 60, + "stat": [ + [ + 1, + "m" + ], + [ + 1, + "p" + ] + ], + "leads": [ + "Court", + "Soldier" + ], + "skills": [ + [ + 1, + "General" + ] + ], + "traits": [ + 1, + "Noblesse Oblige", + "Regal Bearing", + "Pompous", + "Sharp Dresser", + "Callous" + ], + "requires": "Knight and the Your Lordship trait; or Magnate, Master of Horses, Steward, Lord, Constable or Justicar", + "requires_expr": [ + "+or", + [ + "+and", + [ + "knight" + ], + [ + "+trait", + "your lordship" + ] + ], + [ + "magnate", + "master of horses", + "steward", + "lord", + "constable", + "justicar" + ] + ], + "key_leads": [ + "Noble Court Subsetting", + "Professional Soldier Subsetting" + ] + }, + "Viscount": { + "time": 9, + "res": 65, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Court", + "Soldier" + ], + "skills": [ + [ + 2, + "General" + ] + ], + "traits": [ + 1, + "Noblesse Oblige", + "Regal Bearing", + "Pompous", + "Sharp Dresser", + "Callous" + ], + "requires": "Knight and the Your Eminence trait; or Magnate, Baron, Constable or Justicar", + "requires_expr": [ + "+or", + [ + "+and", + [ + "knight" + ], + [ + "+trait", + "your eminence" + ] + ], + [ + "magnate", + "baron", + "constable", + "justicar" + ] + ], + "key_leads": [ + "Noble Court Subsetting", + "Professional Soldier Subsetting" + ] + }, + "Count": { + "time": 10, + "res": 70, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Court", + "Soldier" + ], + "skills": [ + [ + 3, + "General" + ] + ], + "traits": [ + 1, + "Noblesse Oblige", + "Regal Bearing", + "Pompous", + "Sharp Dresser", + "Callous" + ], + "requires": "Knight and the Your Eminence trait; or Magnate, Constable or Justicar", + "requires_expr": [ + "+or", + [ + "+and", + [ + "knight" + ], + [ + "+trait", + "your eminence" + ] + ], + [ + "magnate", + "constable", + "justicar" + ] + ], + "key_leads": [ + "Noble Court Subsetting", + "Professional Soldier Subsetting" + ] + }, + "Duke": { + "time": 10, + "res": 90, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Court", + "Soldier" + ], + "skills": [ + [ + 3, + "General" + ] + ], + "traits": [ + 1, + "Noblesse Oblige", + "Regal Bearing", + "Pompous", + "Sharp Dresser", + "Callous" + ], + "requires": "Count or Knight and the Your Grace trait", + "requires_expr": [ + "+or", + [ + "+and", + [ + "knight" + ], + [ + "+trait", + "your grace" + ] + ], + [ + "count" + ] + ], + "key_leads": [ + "Noble Court Subsetting", + "Professional Soldier Subsetting" + ] + }, + "Noble Prince": { + "time": 10, + "res": 100, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Court", + "Soldier" + ], + "skills": [ + [ + 4, + "General" + ] + ], + "traits": [ + 1, + "Noblesse Oblige", + "Regal Bearing", + "Pompous", + "Sharp Dresser", + "Callous" + ], + "requires": "Duke or Knight and the Your Grace trait", + "requires_expr": [ + "+or", + [ + "+and", + [ + "knight" + ], + [ + "+trait", + "your grace" + ] + ], + [ + "duke" + ] + ], + "key_leads": [ + "Noble Court Subsetting", + "Professional Soldier Subsetting" + ] + }, + "Prince Of The Blood": { + "time": "*", + "time_expr": [ + "+range", + 2, + 20 + ], + "res": 60, + "leads": [ + "Court", + "Soldier", + "Religious" + ], + "skills": [ + [ + 2, + "General" + ] + ], + "traits": [ + 2, + "Born To Be King", + "Noblesse Oblige", + "Regal Bearing", + "Pompous", + "Sharp Dresser", + "Callous" + ], + "requires": "The Your Grace trait and express permission from the GM and all players in the current game", + "requires_expr": [ + "+trait", + "your grace" + ], + "note": "Players may take the Prince of the Blood lifepath for any appropriate length of time, between 2 and 20 years.", + "key_leads": [ + "Noble Court Subsetting", + "Professional Soldier Subsetting", + "Religious Subsetting" + ] + } + }, + "Noble Court Subsetting": { + "Minstrel": { + "time": 4, + "res": 10, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "City", + "Outcast", + "Villager" + ], + "skills": [ + [ + 5, + "Poetry", + "Sing", + "Musical Instrument" + ] + ], + "traits": [ + 1, + "Recondite" + ], + "key_leads": [ + "City Dweller Setting", + "Outcast Subsetting", + "Villager Setting" + ] + }, + "Court Jester": { + "time": 5, + "res": 10, + "leads": [ + "Outcast", + "Servitude" + ], + "skills": [ + [ + 7, + "Sing", + "Sleight Of Hand", + "Climbing", + "Conspicuous", + "Throwing", + "Ugly Truth" + ] + ], + "traits": [ + 3, + "Scapegoat", + "Aura Of Innocence" + ], + "key_leads": [ + "Outcast Subsetting", + "Servitude And Captive Setting" + ] + }, + "Court Artist": { + "time": 6, + "res": 15, + "leads": [ + "City", + "Outcast" + ], + "skills": [ + [ + 5, + "Sculpture", + "Painting", + "Engraving", + "Seduction", + "Genius-wise" + ] + ], + "traits": [ + 1, + "Romantic" + ], + "requires": "Court Jester, Painter, Thinker, Scholar or Sculptor", + "requires_expr": [ + "court jester", + "painter", + "thinker", + "scholar", + "sculptor" + ], + "key_leads": [ + "City Dweller Setting", + "Outcast Subsetting" + ] + }, + "Servant": { + "time": 6, + "res": 7, + "leads": [ + "Outcast", + "Servitude" + ], + "skills": [ + [ + 4, + "Inconspicuous", + "Etiquette", + "Court Gossip-wise" + ] + ], + "traits": [ + 2, + "Veneer Of Obedience", + "Lifting Heavy Things", + "Bored" + ], + "key_leads": [ + "Outcast Subsetting", + "Servitude And Captive Setting" + ] + }, + "Nurse": { + "time": 6, + "res": 7, + "leads": [ + "Outcast", + "Servitude", + "Villager" + ], + "skills": [ + [ + 5, + "Child Rearing", + "Etiquette", + "Court Gossip-wise", + "Field Dressing", + "Child-wise" + ] + ], + "traits": [ + 2, + "Maternal" + ], + "restrict": "Character must be female.", + "requires_expr": [ + "+sex", + "female" + ], + "key_leads": [ + "Outcast Subsetting", + "Servitude And Captive Setting", + "Villager Setting" + ] + }, + "Groom": { + "time": 4, + "res": 5, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "City", + "Villager", + "Soldier" + ], + "skills": [ + [ + 5, + "Animal Husbandry", + "Riding", + "Mending", + "Border-wise", + "Road-wise" + ] + ], + "traits": [ + 1 + ], + "key_leads": [ + "City Dweller Setting", + "Villager Setting", + "Professional Soldier Subsetting" + ] + }, + "Gardener": { + "time": 10, + "res": 10, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "City", + "Servitude" + ], + "skills": [ + [ + 7, + "Plant-wise", + "Flower-wise", + "Tree-wise", + "Pest-wise", + "Herbalism", + "Farming", + "Almanac" + ] + ], + "traits": [ + 2, + "Earthy Smell", + "Salt Of The Earth", + "Down To Earth", + "Affinity For Plants" + ], + "key_leads": [ + "City Dweller Setting", + "Servitude And Captive Setting" + ] + }, + "Torturer": { + "time": 5, + "res": 10, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Outcast", + "Servitude", + "Soldier" + ], + "skills": [ + [ + 5, + "Interrogation", + "Torture", + "Anatomy", + "Torture Devices-wise" + ] + ], + "traits": [ + 1, + "Unsavory Madman" + ], + "key_leads": [ + "Outcast Subsetting", + "Servitude And Captive Setting", + "Professional Soldier Subsetting" + ] + }, + "Forester": { + "time": 7, + "res": 9, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Peasant", + "Soldier", + "Villager", + "Outcast" + ], + "skills": [ + [ + 8, + "Observation", + "Orienteering", + "Foraging", + "Survival", + "Tracking", + "Trapper", + "Cudgel", + "Staff", + "Bow", + "Poacher-wise", + "Park-wise" + ] + ], + "traits": [ + 1 + ], + "key_leads": [ + "Peasant Setting", + "Professional Soldier Subsetting", + "Villager Setting", + "Outcast Subsetting" + ] + }, + "Student": { + "time": 4, + "res": 10, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "City", + "Noble", + "Religious" + ], + "skills": [ + [ + 9, + "Write", + "Read", + "Rule Of Law", + "Oratory", + "Doctrine", + "Etiquette" + ] + ], + "traits": [ + 1, + "Dangerous", + "Geometric" + ], + "key_leads": [ + "City Dweller Setting", + "Noble Setting", + "Religious Subsetting" + ] + }, + "Page": { + "time": 6, + "res": 15, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Soldier", + "City", + "Servitude", + "Noble" + ], + "skills": [ + [ + 6, + "Riding", + "Brawling", + "Write", + "Read", + "Sword" + ] + ], + "traits": [ + 1 + ], + "restrict": "This must be the character's second lifepath, and may only be taken once.", + "requires_expr": [ + "+and", + [ + "+has_n_lifepaths_or_more", + 1 + ], + [ + "+has_n_lifepaths_or_less", + 1 + ] + ], + "key_leads": [ + "Professional Soldier Subsetting", + "City Dweller Setting", + "Servitude And Captive Setting", + "Noble Setting" + ] + }, + "Man-at-arms": { + "time": 6, + "res": 12, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Soldier", + "City", + "Outcast" + ], + "skills": [ + [ + 8, + "Mounted Combat Training", + "Shield Training", + "Armor Training", + "Brawling", + "Intimidation", + "Etiquette", + "Appropriate Weapons" + ] + ], + "traits": [ + 1 + ], + "requires": "Page, Squire or any Professional Soldier lifepath", + "requires_expr": [ + "page", + "squire", + "professional soldier subsetting:runner", + "professional soldier subsetting:apprentice", + "professional soldier subsetting:musician", + "professional soldier subsetting:foot soldier", + "professional soldier subsetting:archer", + "professional soldier subsetting:crossbowman", + "professional soldier subsetting:sailor", + "professional soldier subsetting:herald", + "professional soldier subsetting:bannerman", + "professional soldier subsetting:scout", + "professional soldier subsetting:sergeant", + "professional soldier subsetting:veteran", + "professional soldier subsetting:cavalryman", + "professional soldier subsetting:journeyman", + "professional soldier subsetting:armorer", + "professional soldier subsetting:atilliator", + "professional soldier subsetting:chaplain", + "professional soldier subsetting:engineer", + "professional soldier subsetting:wizard of war", + "professional soldier subsetting:quartermaster", + "professional soldier subsetting:captain" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "City Dweller Setting", + "Outcast Subsetting" + ] + }, + "Falconer": { + "time": 5, + "res": 10, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Peasant", + "Soldier", + "City" + ], + "skills": [ + [ + 4, + "Falconry", + "Animal Husbandry", + "Hunting" + ] + ], + "traits": [ + 2, + "Boaster", + "Wierd", + "Birdie Talk" + ], + "key_leads": [ + "Peasant Setting", + "Professional Soldier Subsetting", + "City Dweller Setting" + ] + }, + "Huntsman": { + "time": 5, + "res": 12, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Peasant", + "Soldier" + ], + "skills": [ + [ + 8, + "Hunting", + "Animal Husbandry", + "Forest-wise", + "Stealthy", + "Cooking", + "Tracking", + "Orienteering", + "Crossbow" + ] + ], + "traits": [ + 1 + ], + "key_leads": [ + "Peasant Setting", + "Professional Soldier Subsetting" + ] + }, + "Herald": { + "time": 4, + "res": 10, + "leads": [ + "Soldier", + "Servitude", + "City" + ], + "skills": [ + [ + 4, + "Heraldry", + "Noble-wise" + ] + ], + "traits": [ + 1, + "Formalist", + "Rainman", + "Eidetic Memory" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "Servitude And Captive Setting", + "City Dweller Setting" + ] + }, + "Court Chef": { + "time": 5, + "res": 14, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Outcast", + "City" + ], + "skills": [ + [ + 5, + "Cooking", + "Sing", + "Herbalism", + "Falsehood" + ] + ], + "traits": [ + 1 + ], + "key_leads": [ + "Outcast Subsetting", + "City Dweller Setting" + ] + }, + "Squire": { + "time": 5, + "res": 14, + "stat": [ + [ + 1, + "p" + ], + [ + 1, + "m" + ] + ], + "leads": [ + "Soldier", + "City", + "Servitude", + "Outcast", + "Noble" + ], + "skills": [ + [ + 9, + "Sword", + "Armor Training", + "Shield Training", + "Lance", + "Brawling", + "Mounted Combat Training", + "Etiquette" + ] + ], + "traits": [ + 1, + "Pragmatic", + "Tough", + "Determined" + ], + "requires": "Corrupt Sergeant, Village Sergeant, Sergeant, Veteran, Page or Man-At-Arms", + "requires_expr": [ + "corrupt sergeant", + "village sergeant", + "sergeant", + "veteran", + "page", + "man-at-arms" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "City Dweller Setting", + "Servitude And Captive Setting", + "Outcast Subsetting", + "Noble Setting" + ] + }, + "Young Lady": { + "time": 9, + "res": 25, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "City", + "Noble", + "Religious" + ], + "skills": [ + [ + 10, + "Write", + "Read", + "Etiquette", + "Poetry", + "Astrology", + "Musical Instrument", + "Composition", + "Field Dressing", + "Apothecary", + "Court Gossip-wise" + ] + ], + "traits": [ + 1 + ], + "restrict": "This must be the character's second or third lifepath, and may only be taken once. Character must be female.", + "requires_expr": [ + "+and", + [ + "+sex", + "female" + ], + [ + "+has_n_lifepaths_or_more", + 1 + ], + [ + "+has_n_lifepaths_or_less", + 2 + ] + ], + "key_leads": [ + "City Dweller Setting", + "Noble Setting", + "Religious Subsetting" + ] + }, + "Knight": { + "time": 6, + "res": 20, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Soldier", + "Noble", + "Outcast" + ], + "skills": [ + [ + 11, + "Conspicuous", + "Intimidation", + "Falconry", + "Mounted Combat Training", + "Shield Training", + "Armor Training", + "Appropriate Weapons" + ] + ], + "traits": [ + 1, + "Sworn Homage", + "Sense Of Entitlement" + ], + "requires": "Squire or Cavalryman", + "requires_expr": [ + "squire", + "cavalryman" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "Noble Setting", + "Outcast Subsetting" + ] + }, + "Courtier": { + "time": 5, + "res": 15, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "City", + "Outcast", + "Noble" + ], + "skills": [ + [ + 8, + "Etiquette", + "Observation", + "Persuasion", + "Seduction", + "Inconspicuous", + "Court Gossip-wise", + "Noble-wise" + ] + ], + "traits": [ + 2, + "Rapier Wit" + ], + "key_leads": [ + "City Dweller Setting", + "Outcast Subsetting", + "Noble Setting" + ] + }, + "Governess": { + "time": 8, + "res": 12, + "leads": [ + "Outcast", + "Servitude", + "Villager" + ], + "skills": [ + [ + 7, + "Family-wise", + "Administration", + "Intimidation", + "Etiquette", + "Persuasion", + "Ugly Truth" + ] + ], + "traits": [ + 1, + "Dismissive", + "You Should Know Better Than That!", + "Bitter" + ], + "requires": "Nurse, Midwife, Lady or any Wife lifepath", + "requires_expr": [ + "nurse", + "midwife", + "lady", + "country wife", + "village wife", + "city wife" + ], + "key_leads": [ + "Outcast Subsetting", + "Servitude And Captive Setting", + "Villager Setting" + ] + }, + "Chaplain": { + "time": 5, + "res": 18, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Soldier", + "City", + "Religious", + "Servitude" + ], + "skills": [ + [ + 8, + "Oratory", + "Doctrine", + "Riding", + "Armor Training", + "Mounted Combat Training", + "Shield Training", + "Appropriate Weapons" + ] + ], + "traits": [ + 1 + ], + "requires": "Any Priest lifepath or Military Order", + "requires_expr": [ + "itinerant priest", + "village priest", + "venal priest", + "temple priest", + "court priest", + "heretic priest", + "priest", + "archpriest", + "military order" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "City Dweller Setting", + "Religious Subsetting", + "Servitude And Captive Setting" + ] + }, + "Court Sorcerer": { + "time": 8, + "res": 32, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Outcast", + "City" + ], + "skills": [ + [ + 7, + "Etiquette", + "Falsehood", + "Astrology", + "Alchemy", + "Sorcery" + ] + ], + "traits": [ + 1, + "Inscrutable", + "Gifted", + "Second Sight" + ], + "requires": "Arcane Devotee, Rogue Wizard or Sorcerer", + "requires_expr": [ + "arcane devotee", + "rogue wizard", + "sorcerer" + ], + "key_leads": [ + "Outcast Subsetting", + "City Dweller Setting" + ] + }, + "Court Lawyer": { + "time": 8, + "res": 25, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "City", + "Outcast", + "Religious" + ], + "skills": [ + [ + 6, + "Etiquette", + "Oratory", + "Persuasion", + "Rule Of Law", + "History" + ] + ], + "traits": [ + 1, + "Rhetorical", + "Evasive" + ], + "requires": "Student or Advocate", + "requires_expr": [ + "student", + "advocate" + ], + "key_leads": [ + "City Dweller Setting", + "Outcast Subsetting", + "Religious Subsetting" + ] + }, + "Court Doctor": { + "time": 8, + "res": 20, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "City", + "Outcast" + ], + "skills": [ + [ + 7, + "Etiquette", + "Apothecary", + "Bloodletting", + "Surgery", + "Anatomy", + "Astrology", + "Falsehood" + ] + ], + "traits": [ + 1, + "Incomprehensible Diagnosis" + ], + "requires": "Student, Itinerant Monk, Cloistered Monk/Nun or Priest", + "requires_expr": [ + "student", + "itinerant monk", + "cloistered monk/nun", + "priest" + ], + "key_leads": [ + "City Dweller Setting", + "Outcast Subsetting" + ] + }, + "Chronicler": { + "time": 10, + "res": 15, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "City", + "Outcast", + "Villager" + ], + "skills": [ + [ + 6, + "Composition", + "History", + "Etiquette", + "Illuminations", + "Obscure History" + ] + ], + "traits": [ + 2, + "Prone To Exaggeration", + "Flatterer", + "Denouncer", + "Cynical", + "Righteous" + ], + "requires": "Student, Custodian, Interpreter, Archivist or Young Lady", + "requires_expr": [ + "student", + "custodian", + "interpreter", + "archivist", + "young lady" + ], + "key_leads": [ + "City Dweller Setting", + "Outcast Subsetting", + "Villager Setting" + ] + }, + "Armorer": { + "time": 7, + "res": 25, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "City", + "Soldier" + ], + "skills": [ + [ + 9, + "Etching", + "Armorer", + "Blacksmith", + "Tanner", + "Sewing", + "Weaponsmith" + ] + ], + "traits": [ + 1, + "Proud" + ], + "requires": "Journeyman", + "requires_expr": [ + "journeyman" + ], + "key_leads": [ + "City Dweller Setting", + "Professional Soldier Subsetting" + ] + }, + "Atilliator": { + "time": 10, + "res": 30, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Soldier", + "City" + ], + "skills": [ + [ + 6, + "Atilliator", + "Carpentry", + "Carving" + ] + ], + "traits": [ + 1, + "Professionally Diligent" + ], + "requires": "Journeyman", + "requires_expr": [ + "journeyman" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "City Dweller Setting" + ] + }, + "Court Priest": { + "time": 6, + "res": 20, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Outcast", + "City", + "Religious" + ], + "skills": [ + [ + 5, + "Etiquette", + "History", + "Symbology", + "Doctrine", + "Persuasion" + ] + ], + "traits": [ + 2, + "Royal Favorite", + "Faithful" + ], + "requires": "Chaplain, Priest or Religious Acolyte", + "requires_expr": [ + "chaplain", + "priest", + "religious acolyte" + ], + "key_leads": [ + "Outcast Subsetting", + "City Dweller Setting", + "Religious Subsetting" + ] + }, + "Steward": { + "time": 7, + "res": 15, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "City", + "Noble", + "Outcast", + "Religious" + ], + "skills": [ + [ + 5, + "Estate Management", + "Accounting", + "Observation", + "Manor-wise" + ] + ], + "traits": [ + 1 + ], + "requires": "Town Official, Municipal Minister, Judge, Court Lawyer, Court Doctor, Governess, Young Lady, Magnate or Lord", + "requires_expr": [ + "town official", + "municipal minister", + "judge", + "court lawyer", + "court doctor", + "governess", + "young lady", + "magnate", + "lord" + ], + "key_leads": [ + "City Dweller Setting", + "Noble Setting", + "Outcast Subsetting", + "Religious Subsetting" + ] + }, + "Master Of Horses": { + "time": 8, + "res": 40, + "leads": [ + "City", + "Soldier" + ], + "skills": [ + [ + 4, + "Horse Husbandry", + "Appraisal", + "Horse-wise" + ] + ], + "traits": [ + 1, + "Love Of The Horse", + "Low Speech", + "Affinity For Horses" + ], + "requires": "Captain, Baron, Saddler, Merchant or Magnate", + "requires_expr": [ + "captain", + "baron", + "saddler", + "merchant", + "magnate" + ], + "key_leads": [ + "City Dweller Setting", + "Professional Soldier Subsetting" + ] + }, + "Master Of Hounds": { + "time": 7, + "res": 20, + "leads": [ + "City", + "Soldier" + ], + "skills": [ + [ + 7, + "Dog Husbandry", + "Dog-wise", + "Hunting", + "Instruction", + "Mimicry" + ] + ], + "traits": [ + 1, + "Dog Lover", + "Pigpen", + "Emotional", + "Iron Stomach" + ], + "requires": "Captain, Baron, Saddler, Merchant or Magnate", + "requires_expr": [ + "captain", + "baron", + "saddler", + "merchant", + "magnate" + ], + "key_leads": [ + "City Dweller Setting", + "Professional Soldier Subsetting" + ] + }, + "Hostage": { + "time": 6, + "res": "*", + "res_expr": [ + "+mult_prev", + 0.5 + ], + "leads": [ + "City", + "Noble", + "Soldier", + "Religious" + ], + "skills": [ + [ + 4, + "Etiquette", + "Court-wise", + "Foreign Languages", + "Foreign History" + ] + ], + "traits": [ + 1, + "Homesick", + "Bored", + "Darling Of The Court" + ], + "requires": "Any lifepath from the Noble setting", + "requires_expr": [ + "noble setting:born noble", + "noble setting:bastard", + "noble setting:page", + "noble setting:student", + "noble setting:squire", + "noble setting:arcane devotee", + "junior student", + "noble setting:religious acolyte", + "noble setting:young lady", + "noble setting:knight", + "noble setting:lady", + "noble setting:lord", + "noble setting:dame", + "noble setting:baron", + "noble setting:viscount", + "noble setting:count", + "noble setting:duke", + "noble setting:noble prince", + "noble setting:prince of the blood" + ], + "note": "Hostage gives resource points equal to half of the character's previous lifepath.", + "key_leads": [ + "City Dweller Setting", + "Noble Setting", + "Professional Soldier Subsetting", + "Religious Subsetting" + ] + }, + "Bailiff": { + "time": 4, + "res": 15, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "City", + "Soldier", + "Outcast" + ], + "skills": [ + [ + 7, + "Intimidation", + "Interrogation", + "Rule Of Law", + "Outlaw-wise", + "Village-wise", + "City-wise", + "Tax-wise" + ] + ], + "traits": [ + 1, + "Nose For Trouble" + ], + "requires": "Knight or the Your Lordship trait", + "requires_expr": [ + "+or", + [ + "knight" + ], + [ + "+trait", + "your lordship" + ] + ], + "key_leads": [ + "City Dweller Setting", + "Professional Soldier Subsetting", + "Outcast Subsetting" + ] + }, + "Justicar": { + "time": 5, + "res": 15, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "City", + "Soldier", + "Religious", + "Outcast" + ], + "skills": [ + [ + 6, + "Rule Of Law", + "Amercement", + "Interrogation", + "Criminal-wise", + "Circuit-wise" + ] + ], + "traits": [ + 1, + "Stern Demeanor", + "Amenable To Other Options" + ], + "requires": "Judge, Captain, Bailiff or Lord", + "requires_expr": [ + "judge", + "captain", + "bailiff", + "lord" + ], + "key_leads": [ + "City Dweller Setting", + "Professional Soldier Subsetting", + "Religious Subsetting", + "Outcast Subsetting" + ] + }, + "Coroner": { + "time": 6, + "res": 15, + "leads": [ + "City", + "Soldier" + ], + "skills": [ + [ + 5, + "Rule Of Law", + "Anatomy", + "Writ-wise", + "Observation" + ] + ], + "traits": [ + 1, + "Hard-hearted", + "Seen It All" + ], + "requires": "Steward, Town Official, Municipal Minister, Judge, Court Lawyer, Court Doctor, Magnate or Lord", + "requires_expr": [ + "steward", + "town official", + "municipal minister", + "judge", + "court lawyer", + "court doctor", + "magnate", + "lord" + ], + "key_leads": [ + "City Dweller Setting", + "Professional Soldier Subsetting" + ] + }, + "Constable": { + "time": 6, + "res": 50, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "City", + "Soldier", + "Outcast" + ], + "skills": [ + [ + 5, + "Command", + "Heraldry", + "Logistics", + "Kingdom-wise", + "Obligation-wise", + "Soldier-wise", + "Cavalry-wise" + ] + ], + "traits": [ + 1, + "Weight Of The World" + ], + "requires": "Captain, Baron, Viscount, Count, Duke or Prince", + "requires_expr": [ + "captain", + "baron", + "viscount", + "count", + "duke", + "noble prince", + "prince of the blood" + ], + "key_leads": [ + "City Dweller Setting", + "Professional Soldier Subsetting", + "Outcast Subsetting" + ] + }, + "Treasurer": { + "time": 7, + "res": 45, + "leads": [ + "City", + "Soldier", + "Religious" + ], + "skills": [ + [ + 5, + "Accounting", + "Estate Management", + "Tax-wise", + "Debt-wise" + ] + ], + "traits": [ + 1, + "Pecunious", + "Lavish Taste" + ], + "requires": "Steward, Town Official, Municipal Minister, Judge, Court Lawyer, Court Doctor, Magnate, Baron, Bishop, Viscount, Count or Duke", + "requires_expr": [ + "steward", + "town official", + "municipal minister", + "judge", + "court lawyer", + "court doctor", + "magnate", + "baron", + "bishop", + "viscount", + "count", + "duke" + ], + "key_leads": [ + "City Dweller Setting", + "Professional Soldier Subsetting", + "Religious Subsetting" + ] + }, + "Chamberlain": { + "time": 7, + "res": 30, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "City", + "Soldier", + "Religious" + ], + "skills": [ + [ + 5, + "Soothing Platitudes", + "Persuasion", + "Ugly Truth" + ], + [ + 1, + "General" + ] + ], + "traits": [ + 1 + ], + "Requires": "Scholar, Steward, Town Official, Municipal Minister, Judge, Court Lawyer, Court Doctor, Magnate, Baron, Bishop, Viscount, Count or Duke", + "requires_expr": [ + "scholar", + "steward", + "town official", + "municipal minister", + "judge", + "court lawyer", + "court doctor", + "magnate", + "baron", + "bishop", + "viscount", + "count", + "duke" + ], + "key_leads": [ + "City Dweller Setting", + "Professional Soldier Subsetting", + "Religious Subsetting" + ] + }, + "Advisor To The Court": { + "time": "*", + "time_expr": [ + "+range", + 1, + 3 + ], + "res": "*", + "res_expr": [ + "+mult_time", + 10 + ], + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Peasant", + "Villager", + "City", + "Noble", + "Court", + "Servitude", + "Outcast", + "Soldier", + "Seafaring", + "Religious" + ], + "skills": [ + [ + "*", + "General" + ] + ], + "skills_expr": [ + "+mult_time", + 1 + ], + "traits": [ + 1 + ], + "requires": "Thinker, Captain, Sea Captain, Magnate, Master Craftsman, Artisan, Bishop, Rogue Wizard, Mad Summoner, Heretic Priest, Dame, Baron, Viscount, Count, Duke or Prince", + "requires_expr": [ + "thinker", + "captain", + "ship's captain", + "magnate", + "master craftsman", + "artisan", + "bishop", + "rogue wizard", + "mad summoner", + "heretic priest", + "dame", + "baron", + "viscount", + "count", + "duke", + "noble prince", + "prince of the blood" + ], + "note": "This lifepath can be one to three years long, player chooses tenure. Character earns 1 general skill point and 10 resource points per year. The stat and trait points are earned once.", + "key_leads": [ + "Peasant Setting", + "Villager Setting", + "City Dweller Setting", + "Noble Setting", + "Noble Court Subsetting", + "Servitude And Captive Setting", + "Outcast Subsetting", + "Professional Soldier Subsetting", + "Seafaring Setting", + "Religious Subsetting" + ] + } + }, + "Servitude And Captive Setting": { + "Born Slave": { + "time": 12, + "res": 5, + "stat": [ + [ + -1, + "pm" + ] + ], + "leads": [ + "Soldier", + "Outcast" + ], + "skills": [ + [ + 1, + "Slavery-wise" + ], + [ + 2, + "General" + ] + ], + "traits": [ + 3, + "Broken", + "Scarred", + "Maimed", + "Lame" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "Outcast Subsetting" + ] + }, + "Ditch Digging": { + "time": 4, + "res": 4, + "leads": [ + "Soldier", + "Outcast" + ], + "skills": [ + [ + 3, + "Ditch Digging", + "Sing", + "Boss-wise" + ] + ], + "traits": [ + 2, + "Blisters", + "Back-breaking Labor" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "Outcast Subsetting" + ] + }, + "Servant": { + "time": 5, + "res": 6, + "leads": [ + "Outcast", + "Soldier", + "City", + "Court" + ], + "skills": [ + [ + 2, + "Soothing Platitudes", + "Gossip-wise" + ] + ], + "traits": [ + 2, + "Mind-numbing Work", + "Obsequious" + ], + "key_leads": [ + "Outcast Subsetting", + "Professional Soldier Subsetting", + "City Dweller Setting", + "Noble Court Subsetting" + ] + }, + "Field Laborer": { + "time": 6, + "res": 5, + "leads": [ + "Outcast", + "Soldier" + ], + "skills": [ + [ + 7, + "Farming", + "Mending", + "Sing", + "Hauling", + "Driving", + "Fall Grass-wise" + ] + ], + "traits": [ + 3, + "Hope" + ], + "key_leads": [ + "Outcast Subsetting", + "Professional Soldier Subsetting" + ] + }, + "Captive Of War": { + "time": 4, + "res": 4, + "leads": [ + "Outcast", + "Soldier", + "City" + ], + "skills": [ + [ + 2, + "Cell-wise", + "Chain-wise" + ] + ], + "traits": [ + 2, + "Claustrophobic", + "Resigned To Fate" + ], + "key_leads": [ + "Outcast Subsetting", + "Professional Soldier Subsetting", + "City Dweller Setting" + ] + }, + "Gaol": { + "time": 3, + "res": 3, + "leads": [ + "Outcast", + "Soldier", + "City" + ], + "skills": [ + [ + 3, + "Gaol-wise", + "Ratiquette" + ] + ], + "traits": [ + 2, + "Involuntary Shudders" + ], + "key_leads": [ + "Outcast Subsetting", + "Professional Soldier Subsetting", + "City Dweller Setting" + ] + }, + "Harem Slave": { + "time": 5, + "res": 4, + "leads": [ + "Outcast" + ], + "skills": [ + [ + 3, + "Falsehood", + "Seduction" + ] + ], + "traits": [ + 2, + "Numb", + "Worldly" + ], + "key_leads": [ + "Outcast Subsetting" + ] + }, + "Bondsman": { + "time": 7, + "res": 7, + "leads": [ + "Peasant", + "Soldier", + "Outcast" + ], + "skills": [ + [ + 0 + ] + ], + "traits": [ + 2, + "Lucky" + ], + "note": "The player may choose his Bondsman's owner's lifepath from the Noble, City Dweller, Soldier or Villager setting. The Bondsman may purchase from owner's skills with one quarter of that path's skill points (minimum of 1).", + "key_leads": [ + "Peasant Setting", + "Professional Soldier Subsetting", + "Outcast Subsetting" + ] + } + }, + "Outcast Subsetting": { + "Urchin": { + "time": 4, + "res": 3, + "leads": [ + "Peasant", + "Soldier", + "Servitude" + ], + "skills": [ + [ + 4, + "Inconspicuous", + "Streetwise", + "Sleight Of Hand" + ] + ], + "traits": [ + 2, + "Addicted", + "The Story" + ], + "restrict": "Must be the second lifepath chosen and may only be taken once.", + "requires_expr": [ + "+and", + [ + "+has_n_lifepaths_or_more", + 1 + ], + [ + "+has_n_lifepaths_or_less", + 1 + ] + ], + "key_leads": [ + "Peasant Setting", + "Professional Soldier Subsetting", + "Servitude And Captive Setting" + ] + }, + "Apostate": { + "time": 3, + "res": 6, + "leads": [ + "City", + "Soldier", + "Religious" + ], + "skills": [ + [ + 4, + "Doctrine", + "Heretical Doctrine", + "Foreign Doctrine" + ] + ], + "traits": [ + 1, + "Apostate" + ], + "key_leads": [ + "City Dweller Setting", + "Professional Soldier Subsetting", + "Religious Subsetting" + ] + }, + "Blackmailer": { + "time": 3, + "res": 10, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "City", + "Soldier", + "Villager", + "Seafaring" + ], + "skills": [ + [ + 4, + "Extortion", + "Forgery", + "Ugly Truth", + "Falsehood", + "Bribe-wise" + ] + ], + "traits": [ + 2, + "Cold Hearted" + ], + "key_leads": [ + "City Dweller Setting", + "Professional Soldier Subsetting", + "Villager Setting", + "Seafaring Setting" + ] + }, + "Kidnapper": { + "time": 3, + "res": 10, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "City", + "Soldier", + "Villager", + "Seafaring" + ], + "skills": [ + [ + 5, + "Interrogation", + "Torture", + "Intimidation", + "Ransom-wise" + ] + ], + "traits": [ + 2, + "Hard-hearted" + ], + "key_leads": [ + "City Dweller Setting", + "Professional Soldier Subsetting", + "Villager Setting", + "Seafaring Setting" + ] + }, + "Pillager": { + "time": 4, + "res": 7, + "leads": [ + "Soldier", + "City", + "Servitude", + "Seafaring" + ], + "skills": [ + [ + 4, + "Scavenging", + "Foraging", + "Army-wise", + "Battle-wise", + "Haggling" + ] + ], + "traits": [ + 1 + ], + "key_leads": [ + "Professional Soldier Subsetting", + "City Dweller Setting", + "Servitude And Captive Setting", + "Seafaring Setting" + ] + }, + "Vagrant": { + "time": 3, + "res": 5, + "leads": [ + "City", + "Soldier", + "Servitude" + ], + "skills": [ + [ + 4, + "Road-wise", + "Hostel-wise", + "Hospital-wise", + "Inconspicuous" + ] + ], + "traits": [ + 2 + ], + "key_leads": [ + "City Dweller Setting", + "Professional Soldier Subsetting", + "Servitude And Captive Setting" + ] + }, + "Cripple (Lame)": { + "display_name": "Cripple", + "time": 6, + "res": 3, + "leads": [ + "Servitude", + "City" + ], + "skills": [ + [ + 6, + "Begging", + "Inconspicuous", + "Conspicuous" + ] + ], + "traits": [ + 2, + "Lame", + "Missing Limb" + ], + "key_leads": [ + "Servitude And Captive Setting", + "City Dweller Setting" + ] + }, + "Cripple (Missing Limb)": { + "display_name": "Cripple", + "time": 6, + "res": 3, + "leads": [ + "Servitude", + "City" + ], + "skills": [ + [ + 6, + "Begging", + "Inconspicuous", + "Conspicuous" + ] + ], + "traits": [ + 2, + "Missing Limb", + "Lame" + ], + "key_leads": [ + "Servitude And Captive Setting", + "City Dweller Setting" + ] + }, + "Poacher": { + "time": 5, + "res": 5, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Servitude", + "Soldier", + "Villager" + ], + "skills": [ + [ + 6, + "Royal Parks-wise", + "Hunting", + "Stealthy", + "Tracking", + "Orienteering" + ] + ], + "traits": [ + 1 + ], + "key_leads": [ + "Servitude And Captive Setting", + "Professional Soldier Subsetting", + "Villager Setting" + ] + }, + "Deranged": { + "time": 6, + "res": 3, + "leads": [ + "Servitude" + ], + "skills": [ + [ + 3, + "Inconspicuous", + "Quack-wise" + ] + ], + "traits": [ + 2, + "Sick", + "Phobia", + "Lunatic", + "Linguist", + "Possessed" + ], + "key_leads": [ + "Servitude And Captive Setting" + ] + }, + "Outlaw": { + "time": 4, + "res": 5, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Soldier", + "City", + "Villager", + "Peasant", + "Seafaring" + ], + "skills": [ + [ + 5, + "Authority-wise", + "Inconspicuous", + "Conspicuous" + ] + ], + "traits": [ + 1, + "Outlaw" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "City Dweller Setting", + "Villager Setting", + "Peasant Setting", + "Seafaring Setting" + ] + }, + "Fence": { + "time": 6, + "res": 15, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Servitude", + "City", + "Soldier" + ], + "skills": [ + [ + 6, + "Appraisal", + "Haggling", + "Inconspicuous", + "Streetwise", + "Guard-wise" + ] + ], + "traits": [ + 2, + "Shrewd" + ], + "requires": "Shopkeeper, Barkeep, Moneylender or an additional prior Outcast lifepath or criminal-type Lifepath from City Dweller", + "requires_expr": [ + "shopkeeper", + "barkeep", + "outcast subsetting:urchin", + "outcast subsetting:apostate", + "outcast subsetting:blackmailer", + "outcast subsetting:kidnapper", + "outcast subsetting:pillager", + "outcast subsetting:vagrant", + "outcast subsetting:cripple", + "outcast subsetting:poacher", + "outcast subsetting:deranged", + "outcast subsetting:outlaw", + "outcast subsetting:fence", + "outcast subsetting:gravedigger", + "outcast subsetting:ratcatcher", + "outcast subsetting:beggar", + "outcast subsetting:leper", + "outcast subsetting:prostitute", + "outcast subsetting:whoremonger", + "outcast subsetting:itinerant performer", + "outcast subsetting:insurrectionist", + "outcast subsetting:cultist", + "outcast subsetting:poisoner", + "outcast subsetting:thug", + "outcast subsetting:desperate killer", + "outcast subsetting:bandit", + "outcast subsetting:pirate", + "outcast subsetting:smuggler", + "outcast subsetting:freebooter", + "outcast subsetting:strider", + "outcast subsetting:mad summoner", + "outcast subsetting:rogue wizard", + "outcast subsetting:crazy witch", + "outcast subsetting:heretic priest", + "outcast subsetting:thinker", + "moneylender", + "city dweller setting:coin clipper", + "city dweller setting:pickpocket", + "city dweller setting:criminal", + "city dweller setting:street thug", + "city dweller setting:confidence man" + ], + "key_leads": [ + "Servitude And Captive Setting", + "City Dweller Setting", + "Professional Soldier Subsetting" + ] + }, + "Gravedigger": { + "time": 5, + "res": 4, + "leads": [ + "Soldier", + "Servitude" + ], + "skills": [ + [ + 6, + "Ditch Digging", + "Philosophy", + "Grave-wise", + "Cemetery-wise", + "Bone-wise" + ] + ], + "traits": [ + 3, + "Bitter" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "Servitude And Captive Setting" + ] + }, + "Ratcatcher": { + "time": 5, + "res": 4, + "leads": [ + "Rats" + ], + "skills": [ + [ + 4, + "Trapper", + "Poisons", + "Ratiquette" + ] + ], + "traits": [ + 2, + "Diseased", + "Rat-speak" + ], + "key_leads": [ + "Rats" + ] + }, + "Beggar": { + "time": 3, + "res": 5, + "leads": [ + "Peasant", + "Soldier", + "Villager" + ], + "skills": [ + [ + 5, + "Inconspicuous", + "Conspicuous", + "Streetwise", + "Falsehood" + ] + ], + "traits": [ + 2, + "The Story" + ], + "key_leads": [ + "Peasant Setting", + "Professional Soldier Subsetting", + "Villager Setting" + ] + }, + "Leper": { + "time": 4, + "res": 3, + "stat": [ + [ + -1, + "p" + ] + ], + "leads": [ + "Servitude", + "Peasant" + ], + "skills": [ + [ + 5, + "Inconspicuous", + "Hospital-wise", + "Priest-wise", + "Pilgrim-wise" + ] + ], + "traits": [ + 3, + "Leprosy", + "Unbeliever", + "White-gold Wielder" + ], + "key_leads": [ + "Servitude And Captive Setting", + "Peasant Setting" + ] + }, + "Prostitute": { + "time": 5, + "res": 6, + "leads": [ + "Peasant", + "Villager", + "City", + "Servitude" + ], + "skills": [ + [ + 3, + "Conspicuous", + "Inconspicuous", + "Persuasion", + "Falsehood", + "Haggling", + "Soothing Platitudes" + ] + ], + "traits": [ + 2, + "Tolerant" + ], + "key_leads": [ + "Peasant Setting", + "Villager Setting", + "City Dweller Setting", + "Servitude And Captive Setting" + ] + }, + "Whoremonger": { + "time": 6, + "res": 12, + "leads": [ + "Villager", + "City", + "Soldier" + ], + "skills": [ + [ + 5, + "Intimidation", + "Haggling", + "Prostitute-wise", + "City-wise", + "Guard-wise" + ] + ], + "traits": [ + 1 + ], + "requires": "Corrupt Sergeant, Venal Priest, Shopkeeper, Barkeep, Moneylender or an additional prior Outcast lifepath or criminal-type lifepath from City Dweller", + "requires_expr": [ + "corrupt sergeant", + "venal priest", + "shopkeeper", + "barkeep", + "outcast subsetting:urchin", + "outcast subsetting:apostate", + "outcast subsetting:blackmailer", + "outcast subsetting:kidnapper", + "outcast subsetting:pillager", + "outcast subsetting:vagrant", + "outcast subsetting:cripple", + "outcast subsetting:poacher", + "outcast subsetting:deranged", + "outcast subsetting:outlaw", + "outcast subsetting:fence", + "outcast subsetting:gravedigger", + "outcast subsetting:ratcatcher", + "outcast subsetting:beggar", + "outcast subsetting:leper", + "outcast subsetting:prostitute", + "outcast subsetting:whoremonger", + "outcast subsetting:itinerant performer", + "outcast subsetting:insurrectionist", + "outcast subsetting:cultist", + "outcast subsetting:poisoner", + "outcast subsetting:thug", + "outcast subsetting:desperate killer", + "outcast subsetting:bandit", + "outcast subsetting:pirate", + "outcast subsetting:smuggler", + "outcast subsetting:freebooter", + "outcast subsetting:strider", + "outcast subsetting:mad summoner", + "outcast subsetting:rogue wizard", + "outcast subsetting:crazy witch", + "outcast subsetting:heretic priest", + "outcast subsetting:thinker", + "moneylender", + "city dweller setting:coin clipper", + "city dweller setting:pickpocket", + "city dweller setting:criminal", + "city dweller setting:street thug", + "city dweller setting:confidence man" + ], + "key_leads": [ + "Villager Setting", + "City Dweller Setting", + "Professional Soldier Subsetting" + ] + }, + "Itinerant Performer": { + "time": 4, + "res": 5, + "leads": [ + "Peasant", + "Villager", + "City", + "Soldier" + ], + "skills": [ + [ + 8, + "Cooking", + "Sewing", + "Acting", + "Sleight Of Hand", + "Haggling", + "Mending", + "Disguise" + ] + ], + "traits": [ + 2, + "Odd" + ], + "key_leads": [ + "Peasant Setting", + "Villager Setting", + "City Dweller Setting", + "Professional Soldier Subsetting" + ] + }, + "Insurrectionist": { + "time": 3, + "res": 5, + "leads": [ + "City", + "Soldier" + ], + "skills": [ + [ + 4, + "Philosophy", + "Rule Of Law", + "Doctrine", + "Oratory", + "Arson" + ] + ], + "traits": [ + 2, + "Zealot" + ], + "key_leads": [ + "City Dweller Setting", + "Professional Soldier Subsetting" + ] + }, + "Cultist": { + "time": 4, + "res": 8, + "leads": [ + "Peasant", + "Servitude", + "Soldier" + ], + "skills": [ + [ + 5, + "Cult Doctrine", + "Inconspicuous", + "Conspicuous", + "Falsehood", + "Persuasion" + ] + ], + "traits": [ + 2, + "Zealot", + "Rabble-rouser", + "Speaker Of The Secret Language" + ], + "key_leads": [ + "Peasant Setting", + "Servitude And Captive Setting", + "Professional Soldier Subsetting" + ] + }, + "Poisoner": { + "time": 5, + "res": 8, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "City", + "Villager", + "Court" + ], + "skills": [ + [ + 5, + "Poisons", + "Cooking", + "Inconspicuous", + "Disguise" + ] + ], + "traits": [ + 2, + "Off-kilter" + ], + "key_leads": [ + "City Dweller Setting", + "Villager Setting", + "Noble Court Subsetting" + ] + }, + "Thug": { + "time": 4, + "res": 7, + "leads": [ + "Soldier", + "City" + ], + "skills": [ + [ + 4, + "Streetwise", + "Murder-wise", + "Guard-wise", + "Brawling" + ] + ], + "traits": [ + 2, + "Cold-blooded", + "Jaded" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "City Dweller Setting" + ] + }, + "Desperate Killer": { + "time": 3, + "res": 5, + "leads": [ + "Soldier", + "City", + "Servitude" + ], + "skills": [ + [ + 5, + "Appropriate Weapons", + "Inconspicuous", + "Assassination-wise" + ] + ], + "traits": [ + 2, + "Desperate", + "Murderous", + "Cold Hearted", + "Hard-hearted" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "City Dweller Setting", + "Servitude And Captive Setting" + ] + }, + "Bandit": { + "time": 3, + "res": 7, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Soldier", + "Peasant" + ], + "skills": [ + [ + 4, + "Appropriate Weapons", + "Intimidation", + "Stealthy", + "Caravan-wise" + ] + ], + "traits": [ + 1 + ], + "key_leads": [ + "Professional Soldier Subsetting", + "Peasant Setting" + ] + }, + "Pirate": { + "time": 4, + "res": 5, + "leads": [ + "Seafaring", + "City", + "Villager" + ], + "skills": [ + [ + 6, + "Pirate Cove-wise", + "Rigging", + "Knots", + "Knives", + "Sea-wise", + "Map-wise" + ] + ], + "traits": [ + 2, + "Problem With Authority", + "Scurvy", + "Maimed", + "Crippled", + "Lame" + ], + "key_leads": [ + "Seafaring Setting", + "City Dweller Setting", + "Villager Setting" + ] + }, + "Smuggler": { + "time": 4, + "res": 15, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Soldier", + "City", + "Villager" + ], + "skills": [ + [ + 6, + "Persuasion", + "Falsehood", + "Appraisal", + "Law-wise", + "Forgery", + "Stealthy", + "Inconspicuous" + ] + ], + "traits": [ + 2, + "Paranoid" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "City Dweller Setting", + "Villager Setting" + ] + }, + "Freebooter": { + "time": 4, + "res": 10, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Soldier", + "Peasant", + "Servitude" + ], + "skills": [ + [ + 8, + "Intimidation", + "Appropriate Weapons", + "Countryside-wise", + "Fortress-wise", + "Mercenary Company-wise", + "Foreign Languages", + "War-wise", + "Loot-wise", + "Extortion-wise" + ] + ], + "traits": [ + 2, + "Cold-blooded", + "Merciless" + ], + "requires": "Bandit, Smuggler, Squire, Knight, City Guard, Village Guard, Marine or any Professional Soldier lifepath", + "requires_expr": [ + "bandit", + "smuggler", + "squire", + "knight", + "city guard", + "village guard", + "marine", + "professional soldier subsetting:runner", + "professional soldier subsetting:apprentice", + "professional soldier subsetting:musician", + "professional soldier subsetting:foot soldier", + "professional soldier subsetting:archer", + "professional soldier subsetting:crossbowman", + "professional soldier subsetting:sailor", + "professional soldier subsetting:herald", + "professional soldier subsetting:bannerman", + "professional soldier subsetting:scout", + "professional soldier subsetting:sergeant", + "professional soldier subsetting:veteran", + "professional soldier subsetting:cavalryman", + "professional soldier subsetting:journeyman", + "professional soldier subsetting:armorer", + "professional soldier subsetting:atilliator", + "professional soldier subsetting:chaplain", + "professional soldier subsetting:engineer", + "professional soldier subsetting:wizard of war", + "professional soldier subsetting:quartermaster", + "professional soldier subsetting:captain" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "Peasant Setting", + "Servitude And Captive Setting" + ] + }, + "Strider": { + "time": 5, + "res": 6, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Soldier", + "Peasant", + "Servitude" + ], + "skills": [ + [ + 9, + "Forest-wise", + "Orienteering", + "Foraging", + "Tracking", + "Firebuilding", + "Riding", + "Stealthy", + "Appropriate Weapons" + ] + ], + "traits": [ + 2, + "Loner" + ], + "requires": "Born Noble, Hunter, Trapper, Huntsman or Scout", + "requires_expr": [ + "born noble", + "hunter", + "trapper", + "huntsman", + "scout" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "Peasant Setting", + "Servitude And Captive Setting" + ] + }, + "Mad Summoner": { + "time": 8, + "res": 20, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Peasant", + "City", + "Seafaring" + ], + "skills": [ + [ + 6, + "Summoning", + "Enchanting", + "Demonology", + "Empyrealia" + ] + ], + "traits": [ + 2, + "Mad", + "Fear Of Cheese", + "Fear Of Wet Noises", + "Alarming" + ], + "requires": "Cultist, Augur, Neophyte Sorcerer or Arcane Devotee", + "requires_expr": [ + "cultist", + "augur", + "neophyte sorcerer", + "arcane devotee" + ], + "key_leads": [ + "Peasant Setting", + "City Dweller Setting", + "Seafaring Setting" + ] + }, + "Rogue Wizard": { + "time": 6, + "res": 24, + "stat": [ + [ + 1, + "p" + ], + [ + 1, + "m" + ] + ], + "leads": [ + "Servitude", + "Seafaring", + "Religious" + ], + "skills": [ + [ + 8, + "Sorcery", + "Inconspicuous", + "Graveyard-wise", + "Astrology", + "Bloodletting", + "Ugly Truth", + "Apocalypse-wise", + "Enchanting", + "Alchemy" + ] + ], + "traits": [ + 3, + "Spooky", + "Aura Of Fear", + "Obscure Aura" + ], + "requires": "Cultist, Augur, Neophyte Sorcerer or Arcane Devotee", + "requires_expr": [ + "cultist", + "augur", + "neophyte sorcerer", + "arcane devotee" + ], + "key_leads": [ + "Servitude And Captive Setting", + "Seafaring Setting", + "Religious Subsetting" + ] + }, + "Crazy Witch": { + "time": 6, + "res": 6, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Peasant", + "Servitude", + "Villager" + ], + "skills": [ + [ + 5, + "Folklore", + "Herbalism", + "Poisons", + "Summoning", + "Profanity-wise" + ] + ], + "traits": [ + 2, + "A Little Crazy", + "Gifted", + "Mark Of The Beast" + ], + "requires": "Weather Witch, Young Lady, Augur or Midwife", + "requires_expr": [ + "weather witch", + "young lady", + "augur", + "midwife" + ], + "key_leads": [ + "Peasant Setting", + "Servitude And Captive Setting", + "Villager Setting" + ] + }, + "Heretic Priest": { + "time": 7, + "res": 6, + "leads": [ + "Peasant", + "Servitude" + ], + "skills": [ + [ + 7, + "Heretical Doctrine", + "Oratory", + "Apostate-wise", + "Demonology", + "Summoner-wise", + "Cultist-wise" + ] + ], + "traits": [ + 2, + "Lunatic", + "Overbearing Loony", + "Faith In Dead Gods" + ], + "requires": "Acolyte, Cultist, Apostate, Theologian, Venal Priest, Interpreter or Archivist", + "requires_expr": [ + "acolyte", + "cultist", + "apostate", + "theologian", + "venal priest", + "interpreter", + "archivist" + ], + "key_leads": [ + "Peasant Setting", + "Servitude And Captive Setting" + ] + }, + "Thinker": { + "time": 15, + "res": 5, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Peasant", + "Villager", + "City", + "Noble", + "Court", + "Servitude", + "Outcast", + "Soldier", + "Seafaring", + "Religious" + ], + "skills": [ + [ + 6, + "Philosophy", + "Strategy", + "Strategy Games", + "Calligraphy", + "History", + "Painting" + ], + [ + 1, + "General" + ] + ], + "traits": [ + 2 + ], + "restrict": "Thinker can only be taken if the character's starting age will be 36 years or older.", + "requires_expr": [ + "+age_greater_than", + 21 + ], + "key_leads": [ + "Peasant Setting", + "Villager Setting", + "City Dweller Setting", + "Noble Setting", + "Noble Court Subsetting", + "Servitude And Captive Setting", + "Outcast Subsetting", + "Professional Soldier Subsetting", + "Seafaring Setting", + "Religious Subsetting" + ] + } + }, + "Professional Soldier Subsetting": { + "Runner": { + "time": 3, + "res": 5, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Villager", + "Peasant", + "Servitude", + "Outcast" + ], + "skills": [ + [ + 4, + "Inconspicuous", + "Stealthy", + "Sing" + ] + ], + "traits": [ + 2, + "Skinny", + "Fleet Of Foot", + "Sprinter" + ], + "key_leads": [ + "Villager Setting", + "Peasant Setting", + "Servitude And Captive Setting", + "Outcast Subsetting" + ] + }, + "Apprentice": { + "time": 4, + "res": 6, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "City", + "Villager", + "Peasant" + ], + "skills": [ + [ + 6, + "Mending", + "Write", + "Read", + "Hauling", + "Driving", + "Ditch Digging" + ] + ], + "traits": [ + 2, + "Exhausted", + "Back-breaking Labor" + ], + "key_leads": [ + "City Dweller Setting", + "Villager Setting", + "Peasant Setting" + ] + }, + "Musician": { + "time": 3, + "res": 5, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Villager", + "Peasant", + "Servitude" + ], + "skills": [ + [ + 4, + "Musical Instrument", + "Conspicuous", + "Riding" + ] + ], + "traits": [ + 1 + ], + "key_leads": [ + "Villager Setting", + "Peasant Setting", + "Servitude And Captive Setting" + ] + }, + "Foot Soldier": { + "time": 3, + "res": 6, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Villager", + "Servitude", + "Outcast" + ], + "skills": [ + [ + 6, + "Soldiering", + "Appropriate Weapons", + "Shield Training", + "Brawling", + "Foraging", + "Firebuilding" + ] + ], + "traits": [ + 1 + ], + "key_leads": [ + "Villager Setting", + "Servitude And Captive Setting", + "Outcast Subsetting" + ] + }, + "Archer": { + "time": 3, + "res": 5, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Villager", + "Servitude", + "Outcast" + ], + "skills": [ + [ + 5, + "Bow", + "Fletcher", + "Brawling", + "Foraging", + "Firebuilding" + ] + ], + "traits": [ + 1 + ], + "key_leads": [ + "Villager Setting", + "Servitude And Captive Setting", + "Outcast Subsetting" + ] + }, + "Crossbowman": { + "time": 3, + "res": 7, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Villager", + "Servitude", + "Outcast" + ], + "skills": [ + [ + 5, + "Crossbow", + "Fletcher", + "Brawling", + "Foraging", + "Firebuilding" + ] + ], + "traits": [ + 1 + ], + "key_leads": [ + "Villager Setting", + "Servitude And Captive Setting", + "Outcast Subsetting" + ] + }, + "Sailor": { + "time": 5, + "res": 5, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Seafaring", + "Outcast", + "Villager", + "Servitude" + ], + "skills": [ + [ + 6, + "Seamanship", + "Rigging", + "Knots", + "Mending", + "Navigation", + "Knives", + "Sword" + ] + ], + "traits": [ + 1, + "Iron Stomach", + "Sea Legs", + "Affinity For Rope" + ], + "key_leads": [ + "Seafaring Setting", + "Outcast Subsetting", + "Villager Setting", + "Servitude And Captive Setting" + ] + }, + "Herald": { + "time": 3, + "res": 7, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Villager", + "Servitude", + "Court" + ], + "skills": [ + [ + 4, + "Oratory", + "Conspicuous", + "Riding", + "Heraldry", + "Bannerman-wise" + ] + ], + "traits": [ + 1 + ], + "key_leads": [ + "Villager Setting", + "Servitude And Captive Setting", + "Noble Court Subsetting" + ] + }, + "Bannerman": { + "time": 3, + "res": 7, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Villager", + "Servitude", + "Court" + ], + "skills": [ + [ + 5, + "Conspicuous", + "Riding", + "Appropriate Weapons", + "Armor Training" + ] + ], + "traits": [ + 2, + "Honored", + "Brutal", + "Aggressive" + ], + "key_leads": [ + "Villager Setting", + "Servitude And Captive Setting", + "Noble Court Subsetting" + ] + }, + "Scout": { + "time": 3, + "res": 4, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Peasant", + "Servitude", + "Outcast" + ], + "skills": [ + [ + 5, + "Stealthy", + "Foraging", + "Orienteering", + "Appropriate Weapons", + "Observation" + ] + ], + "traits": [ + 1 + ], + "key_leads": [ + "Peasant Setting", + "Servitude And Captive Setting", + "Outcast Subsetting" + ] + }, + "Sergeant": { + "time": 5, + "res": 8, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Villager", + "Servitude", + "Court" + ], + "skills": [ + [ + 6, + "Intimidation", + "Command", + "Field Dressing", + "Appropriate Weapons" + ] + ], + "traits": [ + 1 + ], + "requires": "Squire, Village Guard, City Guard or Foot Soldier", + "requires_expr": [ + "squire", + "village guard", + "city guard", + "foot soldier" + ], + "key_leads": [ + "Villager Setting", + "Servitude And Captive Setting", + "Noble Court Subsetting" + ] + }, + "Veteran": { + "time": 8, + "res": 20, + "leads": [ + "Outcast", + "Court" + ], + "skills": [ + [ + 5, + "Soldier-wise", + "Soldiering", + "Campaign History", + "Tactics" + ] + ], + "traits": [ + 2, + "Stubborn", + "Maimed" + ], + "requires": "Sergeant, Sergeant-At-Arms, Knight, Military Order or Freebooter", + "requires_expr": [ + "sergeant", + "sergeant-at-arms", + "knight", + "military order", + "freebooter" + ], + "key_leads": [ + "Outcast Subsetting", + "Noble Court Subsetting" + ] + }, + "Cavalryman": { + "time": 4, + "res": 9, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Villager", + "Servitude", + "Court" + ], + "skills": [ + [ + 10, + "Riding", + "Mounted Combat Training", + "Armor Training", + "Shield Training", + "Appropriate Weapons", + "Horse-wise", + "Haggling" + ] + ], + "traits": [ + 1 + ], + "requires": "A prior lifepath having to do with horses - Knight, Squire, Groom, Master of Horses, etc.", + "requires_expr": [ + "knight", + "squire", + "groom", + "master of horses", + "farrier", + "military order" + ], + "key_leads": [ + "Villager Setting", + "Servitude And Captive Setting", + "Noble Court Subsetting" + ] + }, + "Journeyman": { + "time": 5, + "res": 15, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Villager", + "Peasant", + "Outcast" + ], + "skills": [ + [ + 5, + "Blacksmith", + "Appraisal", + "Haggling", + "Ridiculous Request-wise" + ] + ], + "traits": [ + 1 + ], + "requires": "Apprentice", + "requires_expr": [ + "apprentice" + ], + "key_leads": [ + "Villager Setting", + "Peasant Setting", + "Outcast Subsetting" + ] + }, + "Armorer": { + "time": 8, + "res": 20, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "City", + "Villager", + "Outcast" + ], + "skills": [ + [ + 9, + "Mending", + "Blacksmith", + "Armorer", + "Weaponsmith", + "Etching", + "Tanner" + ] + ], + "traits": [ + 1 + ], + "requires": "Journeyman", + "requires_expr": [ + "journeyman" + ], + "key_leads": [ + "City Dweller Setting", + "Villager Setting", + "Outcast Subsetting" + ] + }, + "Atilliator": { + "time": 10, + "res": 22, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Court", + "City", + "Outcast" + ], + "skills": [ + [ + 6, + "Atilliator", + "Carpentry", + "Carving", + "Blacksmith", + "Tanner" + ] + ], + "traits": [ + 1 + ], + "requires": "Journeyman", + "requires_expr": [ + "journeyman" + ], + "key_leads": [ + "Noble Court Subsetting", + "City Dweller Setting", + "Outcast Subsetting" + ] + }, + "Chaplain": { + "time": 5, + "res": 15, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Court", + "City", + "Outcast", + "Seafaring", + "Religious" + ], + "skills": [ + [ + 6, + "Oratory", + "Riding", + "Armor Training", + "Mounted Combat Training", + "Appropriate Weapons" + ] + ], + "traits": [ + 1, + "Idealogue", + "Psychotic" + ], + "requires": "Any Priest lifepath or Military Order", + "requires_expr": [ + "itinerant priest", + "village priest", + "venal priest", + "temple priest", + "court priest", + "heretic priest", + "priest", + "archpriest", + "military order" + ], + "key_leads": [ + "Noble Court Subsetting", + "City Dweller Setting", + "Outcast Subsetting", + "Seafaring Setting", + "Religious Subsetting" + ] + }, + "Engineer": { + "time": 5, + "res": 18, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Court", + "City", + "Outcast" + ], + "skills": [ + [ + 6, + "Artillerist", + "Engineering", + "Fortifications" + ] + ], + "traits": [ + 1, + "Smart", + "Sense Of Distance" + ], + "requires": "Student, Engineer, Mining Engineer or Artillerist's Mate", + "requires_expr": [ + "student", + "engineer", + "mining engineer", + "artillerist's mate" + ], + "key_leads": [ + "Noble Court Subsetting", + "City Dweller Setting", + "Outcast Subsetting" + ] + }, + "Wizard Of War": { + "time": 4, + "res": 20, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Court", + "City", + "Outcast" + ], + "skills": [ + [ + 7, + "Sorcery", + "Strategy Games", + "Soldier-wise", + "War-wise", + "Haggling", + "Cartography" + ] + ], + "traits": [ + 1, + "Arrogant" + ], + "requires": "Neophyte Sorcerer, Arcane Devotee, Weather Witch, Rogue Wizard or Mad Summoner", + "requires_expr": [ + "neophyte sorcerer", + "arcane devotee", + "weather witch", + "rogue wizard", + "mad summoner" + ], + "key_leads": [ + "Noble Court Subsetting", + "City Dweller Setting", + "Outcast Subsetting" + ] + }, + "Quartermaster": { + "time": 5, + "res": 17, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Villager", + "City", + "Court" + ], + "skills": [ + [ + 6, + "Administration", + "Accounting", + "Haggling", + "Logistics" + ] + ], + "traits": [ + 1, + "Light Sleeper" + ], + "requires": "Sergeant, Veteran, Steward, Ship's Captain, Guard Captain, Merchant, Man-At-Arms, Smuggler, Constable or Lord", + "requires_expr": [ + "sergeant", + "veteran", + "steward", + "ship's captain", + "guard captain", + "merchant", + "man-at-arms", + "smuggler", + "constable", + "lord" + ], + "key_leads": [ + "Villager Setting", + "City Dweller Setting", + "Noble Court Subsetting" + ] + }, + "Captain": { + "time": 6, + "res": 35, + "stat": [ + [ + 1, + "p" + ], + [ + 1, + "m" + ] + ], + "leads": [ + "Peasant", + "Villager", + "City", + "Court", + "Servitude", + "Outcast", + "Soldier", + "Seafaring", + "Religious" + ], + "skills": [ + [ + 9, + "Command", + "Contract-wise", + "Haggling", + "Oratory", + "Appropriate Weapons", + "Field Dressing", + "Riding", + "Strategy" + ] + ], + "traits": [ + 2, + "Savvy" + ], + "requires": "Guard Captain, Knight, Lord, Constable or two Freebooter lifepaths", + "requires_expr": [ + "+or", + [ + "guard captain", + "knight", + "lord", + "constable" + ], + [ + "+has_n_lifepaths_in", + 2, + "freebooter" + ] + ], + "key_leads": [ + "Peasant Setting", + "Villager Setting", + "City Dweller Setting", + "Noble Court Subsetting", + "Servitude And Captive Setting", + "Outcast Subsetting", + "Professional Soldier Subsetting", + "Seafaring Setting", + "Religious Subsetting" + ] + } + }, + "Seafaring Setting": { + "Son Of A Gun": { + "time": 8, + "res": 3, + "leads": [ + "Servitude", + "Soldier", + "Outcast" + ], + "skills": [ + [ + 3, + "General" + ] + ], + "traits": [ + 2, + "Sea Legs" + ], + "key_leads": [ + "Servitude And Captive Setting", + "Professional Soldier Subsetting", + "Outcast Subsetting" + ] + }, + "Boy": { + "time": 4, + "res": 8, + "leads": [ + "City", + "Servitude", + "Soldier", + "Outcast" + ], + "skills": [ + [ + 4, + "Sailor-wise", + "Ship-wise", + "Captain-wise" + ] + ], + "traits": [ + 1, + "Veneer Of Obedience", + "Curses Like A Sailor", + "Sprinter" + ], + "restrict": "If chosen this must be the second lifepath and may only be taken once.", + "requires_expr": [ + "+and", + [ + "+has_n_lifepaths_or_more", + 1 + ], + [ + "+has_n_lifepaths_or_less", + 1 + ] + ], + "key_leads": [ + "City Dweller Setting", + "Servitude And Captive Setting", + "Professional Soldier Subsetting", + "Outcast Subsetting" + ] + }, + "Galley Slave": { + "time": 6, + "res": 3, + "leads": [ + "Servitude", + "Soldier", + "Outcast" + ], + "skills": [ + [ + 3, + "Slave Deck-wise", + "Taskmaster-wise", + "Sing", + "Seamanship", + "Knots" + ] + ], + "traits": [ + 3, + "Tasting The Lash", + "Eating Maggots", + "Following The Beat", + "Iron Stomach", + "Bottomless Stomach", + "Gnawing Hunger" + ], + "key_leads": [ + "Servitude And Captive Setting", + "Professional Soldier Subsetting", + "Outcast Subsetting" + ] + }, + "Ratcatcher": { + "time": 6, + "res": 4, + "leads": [ + "Outcast", + "Servitude", + "City" + ], + "skills": [ + [ + 5, + "Trapper", + "Poisons", + "Ratiquette" + ] + ], + "traits": [ + 3, + "Bilge-drinker", + "Rat-speak", + "Feral" + ], + "key_leads": [ + "Outcast Subsetting", + "Servitude And Captive Setting", + "City Dweller Setting" + ] + }, + "Landsman": { + "time": 4, + "res": 5, + "leads": [ + "Servitude", + "Soldier", + "Outcast" + ], + "skills": [ + [ + 3, + "Seamanship", + "Knots", + "Brawling", + "Rope-wise" + ] + ], + "traits": [ + 1, + "Cursing", + "Aches And Pains" + ], + "key_leads": [ + "Servitude And Captive Setting", + "Professional Soldier Subsetting", + "Outcast Subsetting" + ] + }, + "Drummer": { + "time": 5, + "res": 6, + "leads": [ + "Soldier", + "City", + "Villager", + "Outcast" + ], + "skills": [ + [ + 3, + "Drum", + "Sing", + "Drum Maker" + ] + ], + "traits": [ + 2, + "Incessant Tapping" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "City Dweller Setting", + "Villager Setting", + "Outcast Subsetting" + ] + }, + "Sailor": { + "time": 5, + "res": 7, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Servitude", + "Soldier", + "City", + "Outcast" + ], + "skills": [ + [ + 6, + "Seamanship", + "Rigging", + "Knots", + "Brawling", + "Sing", + "Sea-wise", + "Gambling" + ] + ], + "traits": [ + 2, + "Drunk" + ], + "key_leads": [ + "Servitude And Captive Setting", + "Professional Soldier Subsetting", + "City Dweller Setting", + "Outcast Subsetting" + ] + }, + "Crazy Old Sailor": { + "time": 10, + "res": 8, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Servitude", + "Outcast" + ], + "skills": [ + [ + 3, + "Ugly Truth", + "Intimidation", + "Omen-wise" + ] + ], + "traits": [ + 3, + "Superstitious", + "Metal Plate In The Skull", + "He's A Jonah, That One" + ], + "requires": "Sailor, Pirate or Mercenary Captain and that the character take this path sometime in his 40s", + "requires_expr": [ + "+and", + [ + "sailor", + "pirate", + "mercenary captain" + ], + [ + "+age_greater_than", + 39 + ], + [ + "+age_less_than", + 50 + ] + ], + "key_leads": [ + "Servitude And Captive Setting", + "Outcast Subsetting" + ] + }, + "Purser": { + "time": 4, + "res": 9, + "leads": [ + "Servitude", + "Soldier" + ], + "skills": [ + [ + 4, + "Accounting", + "Crew-wise", + "Supply-wise", + "Ship-wise" + ] + ], + "traits": [ + 2, + "Gnawing Hunger", + "Bitter" + ], + "requires": "Clerk, Student or Sailor", + "requires_expr": [ + "clerk", + "student", + "sailor" + ], + "key_leads": [ + "Servitude And Captive Setting", + "Professional Soldier Subsetting" + ] + }, + "Signalman": { + "time": 5, + "res": 8, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Servitude", + "Soldier" + ], + "skills": [ + [ + 5, + "Signaling", + "Observation", + "Cryptography" + ] + ], + "traits": [ + 1, + "Cryptic" + ], + "key_leads": [ + "Servitude And Captive Setting", + "Professional Soldier Subsetting" + ] + }, + "Pilot": { + "time": 4, + "res": 8, + "leads": [ + "Soldier", + "City", + "Villager", + "Outcast" + ], + "skills": [ + [ + 5, + "Pilot", + "Ship-wise", + "Observation", + "Shoal-wise" + ] + ], + "traits": [ + 2, + "Blisters", + "Light Sleeper", + "Bored", + "Paranoid About The Ship" + ], + "requires": "Sailor, Pirate or Mercenary Captain", + "requires_expr": [ + "sailor", + "pirate", + "mercenary captain" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "City Dweller Setting", + "Villager Setting", + "Outcast Subsetting" + ] + }, + "Marine": { + "time": 4, + "res": 10, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Soldier", + "City", + "Villager", + "Outcast" + ], + "skills": [ + [ + 4, + "Appropriate Weapons", + "Knots", + "Intimidation" + ] + ], + "traits": [ + 1, + "Bruiser", + "Sea Legs" + ], + "requires": "Sailor, Pirate or Mercenary Captain", + "requires_expr": [ + "sailor", + "pirate", + "mercenary captain" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "City Dweller Setting", + "Villager Setting", + "Outcast Subsetting" + ] + }, + "Bosun": { + "time": 5, + "res": 8, + "leads": [ + "Soldier", + "City", + "Villager", + "Outcast" + ], + "skills": [ + [ + 3, + "Intimidation", + "Brawling", + "Sailor-wise" + ] + ], + "traits": [ + 1, + "Mean", + "Obedient" + ], + "requires": "Sailor, Pirate or Mercenary Captain", + "requires_expr": [ + "sailor", + "pirate", + "mercenary captain" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "City Dweller Setting", + "Villager Setting", + "Outcast Subsetting" + ] + }, + "Sailmaker": { + "time": 5, + "res": 9, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Soldier", + "City", + "Villager", + "Outcast" + ], + "skills": [ + [ + 5, + "Sewing", + "Weaving", + "Mending", + "Sail-wise" + ] + ], + "traits": [ + 1 + ], + "requires": "Sailor, Pirate, Seamstress", + "requires_expr": [ + "sailor", + "pirate", + "seamstress" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "City Dweller Setting", + "Villager Setting", + "Outcast Subsetting" + ] + }, + "Ship's Doctor": { + "time": 6, + "res": 15, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Soldier", + "City", + "Villager", + "Outcast" + ], + "skills": [ + [ + 8, + "Apothecary", + "Bloodletting", + "Surgery", + "Anatomy", + "Astrology", + "Falsehood", + "Tar-wise", + "Scurvy-wise" + ] + ], + "traits": [ + 3, + "Incomprehensible Diagnosis", + "Ugly Reputation" + ], + "requires": "Doctor, Court Doctor, Physician, Barber or Student", + "requires_expr": [ + "doctor", + "court doctor", + "physician", + "barber", + "student" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "City Dweller Setting", + "Villager Setting", + "Outcast Subsetting" + ] + }, + "Ship's Cook": { + "time": 5, + "res": 10, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Soldier", + "City", + "Villager", + "Outcast" + ], + "skills": [ + [ + 6, + "Cooking", + "Firebuilding", + "Sing", + "Falsehood", + "Mystery Meat-wise" + ] + ], + "traits": [ + 3, + "Crippled", + "Cookie", + "Maggot Connoisseur" + ], + "requires": "Sailor or Pirate", + "requires_expr": [ + "sailor", + "pirate" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "City Dweller Setting", + "Villager Setting", + "Outcast Subsetting" + ] + }, + "Ship's Chaplain": { + "time": 5, + "res": 15, + "leads": [ + "Villager", + "City", + "Religious", + "Soldier" + ], + "skills": [ + [ + 4, + "Oratory", + "Doctrine", + "Ship-wise" + ] + ], + "traits": [ + 2, + "World Weary", + "Burial At Sea", + "Secretly Worships The Black Sea God" + ], + "requires": "Chaplain, Military Order, Temple Acolyte or Religious Acolyte", + "requires_expr": [ + "chaplain", + "military order", + "temple acolyte", + "religious acolyte" + ], + "key_leads": [ + "Villager Setting", + "City Dweller Setting", + "Religious Subsetting", + "Professional Soldier Subsetting" + ] + }, + "Weather Witch": { + "time": 5, + "res": 20, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Servitude", + "City", + "Villager", + "Outcast" + ], + "skills": [ + [ + 6, + "Sea-wise", + "Summoning", + "Spirit Binding", + "Superstition-wise", + "Navigation", + "Astrology" + ] + ], + "traits": [ + 2, + "Weather Sense" + ], + "requires": "Augur, Neophyte Sorcerer, Arcane Devotee or Rogue Wizard", + "requires_expr": [ + "augur", + "neophyte sorcerer", + "arcane devotee", + "rogue wizard" + ], + "key_leads": [ + "Servitude And Captive Setting", + "City Dweller Setting", + "Villager Setting", + "Outcast Subsetting" + ] + }, + "Navigator": { + "time": 6, + "res": 15, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Soldier", + "City", + "Servitude", + "Outcast" + ], + "skills": [ + [ + 6, + "Navigation", + "Sea-wise", + "Cartography", + "Astrology", + "Current-wise" + ] + ], + "traits": [ + 1 + ], + "requires": "Pilot, Mercenary Captain, Sailor or Student", + "requires_expr": [ + "pilot", + "mercenary captain", + "sailor", + "student" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "City Dweller Setting", + "Servitude And Captive Setting", + "Outcast Subsetting" + ] + }, + "Carpenter's Mate": { + "time": 6, + "res": 8, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Soldier", + "Servitude", + "Villager", + "Outcast" + ], + "skills": [ + [ + 3, + "Mending", + "Gambling", + "Wood-wise" + ] + ], + "traits": [ + 1, + "Cursing", + "Bull's-eye Spitter" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "Servitude And Captive Setting", + "Villager Setting", + "Outcast Subsetting" + ] + }, + "Ship's Carpenter": { + "time": 4, + "res": 16, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Soldier", + "City", + "Servitude", + "Outcast" + ], + "skills": [ + [ + 5, + "Carpentry", + "Shipwright", + "Boatwright", + "Ship-wise" + ] + ], + "traits": [ + 1, + "I Know This Ship Like My Own Hands" + ], + "requires": "Apprentice, Carpenter's Mate", + "requires_expr": [ + "apprentice", + "carpenter's mate" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "City Dweller Setting", + "Servitude And Captive Setting", + "Outcast Subsetting" + ] + }, + "Artillerist's Mate": { + "time": 4, + "res": 8, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Soldier", + "City", + "Servitude", + "Outcast" + ], + "skills": [ + [ + 4, + "Mending", + "Carpentry", + "Artillerist" + ] + ], + "traits": [ + 1, + "Disturbingly Confident" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "City Dweller Setting", + "Servitude And Captive Setting", + "Outcast Subsetting" + ] + }, + "Engineer": { + "time": 4, + "res": 25, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Soldier", + "City", + "Servitude", + "Outcast" + ], + "skills": [ + [ + 6, + "Engineering", + "Munitions", + "Artillerist", + "Carpentry", + "Mending" + ] + ], + "traits": [ + 1, + "It Just Might Work!" + ], + "requires": "Artillerist's Mate, Student, Ship's Carpenter, Engineer or Journeyman", + "requires_expr": [ + "artillerist's mate", + "student", + "ship's carpenter", + "engineer", + "journeyman" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "City Dweller Setting", + "Servitude And Captive Setting", + "Outcast Subsetting" + ] + }, + "Officer's Mate": { + "time": 4, + "res": 10, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Servitude", + "Outcast", + "Soldier", + "City" + ], + "skills": [ + [ + 4, + "Etiquette", + "Captain-wise", + "Seamanship" + ] + ], + "traits": [ + 3, + "Pegboy" + ], + "requires": "Born Noble, Page or Son of a Gun", + "restrict": "If chosen, this lifepath must be the character's second.", + "requires_expr": [ + "+and", + [ + "+has_n_lifepaths_or_more", + 1 + ], + [ + "+has_n_lifepaths_or_less", + 1 + ], + [ + "born noble", + "page", + "son of a gun" + ] + ], + "key_leads": [ + "Servitude And Captive Setting", + "Outcast Subsetting", + "Professional Soldier Subsetting", + "City Dweller Setting" + ] + }, + "Steward": { + "time": 6, + "res": 20, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Soldier", + "City", + "Servitude", + "Outcast" + ], + "skills": [ + [ + 5, + "Accounting", + "Ship Management", + "Haggling", + "Merchant-wise", + "Appraisal" + ] + ], + "traits": [ + 1 + ], + "requires": "Purser, Merchant, Steward or Accountant", + "requires_expr": [ + "purser", + "merchant", + "steward", + "accountant" + ], + "key_leads": [ + "Professional Soldier Subsetting", + "City Dweller Setting", + "Servitude And Captive Setting", + "Outcast Subsetting" + ] + }, + "First Mate": { + "time": 6, + "res": 18, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Soldier", + "City", + "Servitude", + "Outcast" + ], + "skills": [ + [ + 5, + "Intimidation", + "Command", + "Conspicuous", + "Seaman-wise", + "Sword" + ] + ], + "traits": [ + 1 + ], + "requires": "Knight or any two Sailor/Seafaring lifepaths", + "requires_expr": [ + "+or", + [ + "knight" + ], + [ + "+has_n_lifepaths_in", + 2, + "seafaring setting:son of a gun", + "seafaring setting:boy", + "seafaring setting:galley slave", + "seafaring setting:ratcatcher", + "seafaring setting:landsman", + "seafaring setting:drummer", + "sailor", + "seafaring setting:crazy old sailor", + "seafaring setting:purser", + "seafaring setting:signalman", + "seafaring setting:pilot", + "seafaring setting:marine", + "seafaring setting:bosun", + "seafaring setting:sailmaker", + "seafaring setting:ship's doctor", + "seafaring setting:ship's cook", + "seafaring setting:ship's chaplain", + "seafaring setting:weather witch", + "seafaring setting:navigator", + "seafaring setting:carpenter's mate", + "seafaring setting:ship's carpenter", + "seafaring setting:artillerist's mate", + "seafaring setting:engineer", + "seafaring setting:officer's mate", + "seafaring setting:steward", + "seafaring setting:first mate", + "seafaring setting:ship's captain" + ] + ], + "key_leads": [ + "Professional Soldier Subsetting", + "City Dweller Setting", + "Servitude And Captive Setting", + "Outcast Subsetting" + ] + }, + "Ship's Captain": { + "time": 7, + "res": 30, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Peasant", + "Villager", + "City", + "Court", + "Servitude", + "Outcast", + "Soldier", + "Seafaring", + "Religious" + ], + "skills": [ + [ + 6, + "Command", + "Oratory", + "Ship-wise", + "Sea-wise" + ], + [ + 2, + "General" + ] + ], + "traits": [ + 2, + "Stern Demeanor" + ], + "requires": "First Mate, Knight, Military Order or two Mercenary Captain lifepaths", + "requires_expr": [ + "+or", + [ + "first mate", + "knight", + "military order" + ], + [ + "+has_n_lifepaths_in", + 2, + "mercenary captain" + ] + ], + "key_leads": [ + "Peasant Setting", + "Villager Setting", + "City Dweller Setting", + "Noble Court Subsetting", + "Servitude And Captive Setting", + "Outcast Subsetting", + "Professional Soldier Subsetting", + "Seafaring Setting", + "Religious Subsetting" + ] + } + }, + "Religious Subsetting": { + "Castrati": { + "time": 7, + "res": 15, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Outcast", + "Court" + ], + "skills": [ + [ + 7, + "Sing", + "Persuasion", + "Falsehood", + "Etiquette", + "Administration", + "Rule Of Law" + ] + ], + "traits": [ + 3, + "Eunuch", + "Scheming" + ], + "key_leads": [ + "Outcast Subsetting", + "Noble Court Subsetting" + ] + }, + "Pardoner": { + "time": 5, + "res": 12, + "leads": [ + "Peasant", + "City", + "Villager", + "Outcast" + ], + "skills": [ + [ + 5, + "Persuasion", + "Falsehood", + "Intimidation", + "Doctrine" + ] + ], + "traits": [ + 1, + "Pardoner", + "Corrupt" + ], + "key_leads": [ + "Peasant Setting", + "City Dweller Setting", + "Villager Setting", + "Outcast Subsetting" + ] + }, + "Zealous Convert": { + "time": 4, + "res": 10, + "leads": [ + "Outcast", + "Peasant", + "Servitude", + "Court" + ], + "skills": [ + [ + 4, + "Religious Diatribe", + "Doctrine", + "Rhetoric" + ] + ], + "traits": [ + 3, + "Infallible Religious Logic", + "Righteous", + "Firm", + "Demagogue" + ], + "key_leads": [ + "Outcast Subsetting", + "Peasant Setting", + "Servitude And Captive Setting", + "Noble Court Subsetting" + ] + }, + "Military Order": { + "time": 3, + "res": 7, + "stat": [ + [ + 1, + "p" + ], + [ + 1, + "m" + ] ], - [ - 1, - "m" - ] - ], - "leads": [ - "Peasant", - "Villager", - "City", - "Court", - "Servitude", - "Outcast", - "Soldier", - "Seafaring", - "Religious" - ], - "skills": [ - [ - 9, - "Command", - "Contract-wise", - "Haggling", - "Oratory", - "Appropriate Weapons", - "Field Dressing", - "Riding", - "Strategy" - ] - ], - "traits": [ - 2, - "Savvy" - ], - "requires": "Guard Captain, Knight, Lord, Constable or two Freebooter lifepaths", - "requires_expr": [ - "+or", - [ - "guard captain", + "leads": [ + "Villager", + "City", + "Noble", + "Court", + "Servitude", + "Outcast", + "Soldier", + "Seafaring", + "Religious" + ], + "skills": [ + [ + 5, + "Doctrine", + "Riding", + "Armor Training", + "Appropriate Weapons" + ] + ], + "traits": [ + 2, + "Disciplined", + "Fanatical Devotion", + "Sworn To The Order" + ], + "requires": "Squire, Knight or any lifepath from the Professional Soldier setting", + "requires_expr": [ + "squire", "knight", - "lord", - "constable" + "professional soldier subsetting:runner", + "professional soldier subsetting:apprentice", + "professional soldier subsetting:musician", + "professional soldier subsetting:foot soldier", + "professional soldier subsetting:archer", + "professional soldier subsetting:crossbowman", + "professional soldier subsetting:sailor", + "professional soldier subsetting:herald", + "professional soldier subsetting:bannerman", + "professional soldier subsetting:scout", + "professional soldier subsetting:sergeant", + "professional soldier subsetting:veteran", + "professional soldier subsetting:cavalryman", + "professional soldier subsetting:journeyman", + "professional soldier subsetting:armorer", + "professional soldier subsetting:atilliator", + "professional soldier subsetting:chaplain", + "professional soldier subsetting:engineer", + "professional soldier subsetting:wizard of war", + "professional soldier subsetting:quartermaster", + "professional soldier subsetting:captain" ], - [ - "+has_n_lifepaths_in", + "key_leads": [ + "Villager Setting", + "City Dweller Setting", + "Noble Setting", + "Noble Court Subsetting", + "Servitude And Captive Setting", + "Outcast Subsetting", + "Professional Soldier Subsetting", + "Seafaring Setting", + "Religious Subsetting" + ] + }, + "Grave Digger": { + "time": 4, + "res": 6, + "leads": [ + "Outcast", + "Servitude", + "City", + "Villager" + ], + "skills": [ + [ + 4, + "Digging", + "Grave-wise", + "Cemetery-wise" + ] + ], + "traits": [ 2, - "freebooter" - ] - ], - "key_leads": [ - "Peasant Setting", - "Villager Setting", - "City Dweller Setting", - "Noble Court Subsetting", - "Servitude And Captive Setting", - "Outcast Subsetting", - "Professional Soldier Subsetting", - "Seafaring Setting", - "Religious Subsetting" - ] - } - }, - "Seafaring Setting": { - "Son Of A Gun": { - "time": 8, - "res": 3, - "leads": [ - "Servitude", - "Soldier", - "Outcast" - ], - "skills": [ - [ - 3, - "General" - ] - ], - "traits": [ - 2, - "Sea Legs" - ], - "key_leads": [ - "Servitude And Captive Setting", - "Professional Soldier Subsetting", - "Outcast Subsetting" - ] - }, - "Boy": { - "time": 4, - "res": 8, - "leads": [ - "City", - "Servitude", - "Soldier", - "Outcast" - ], - "skills": [ - [ - 4, - "Sailor-wise", - "Ship-wise", - "Captain-wise" - ] - ], - "traits": [ - 1, - "Veneer Of Obedience", - "Curses Like A Sailor", - "Sprinter" - ], - "restrict": "If chosen this must be the second lifepath and may only be taken once.", - "requires_expr": [ - "+and", - [ - "+has_n_lifepaths_or_more", - 1 + "Superstitious", + "Burial Rites" ], - [ - "+has_n_lifepaths_or_less", - 1 - ] - ], - "key_leads": [ - "City Dweller Setting", - "Servitude And Captive Setting", - "Professional Soldier Subsetting", - "Outcast Subsetting" - ] - }, - "Galley Slave": { - "time": 6, - "res": 3, - "leads": [ - "Servitude", - "Soldier", - "Outcast" - ], - "skills": [ - [ - 3, - "Slave Deck-wise", - "Taskmaster-wise", - "Sing", - "Seamanship", - "Knots" - ] - ], - "traits": [ - 3, - "Tasting The Lash", - "Eating Maggots", - "Following The Beat", - "Iron Stomach", - "Bottomless Stomach", - "Gnawing Hunger" - ], - "key_leads": [ - "Servitude And Captive Setting", - "Professional Soldier Subsetting", - "Outcast Subsetting" - ] - }, - "Ratcatcher": { - "time": 6, - "res": 4, - "leads": [ - "Outcast", - "Servitude", - "City" - ], - "skills": [ - [ - 5, - "Trapper", - "Poisons", - "Ratiquette" - ] - ], - "traits": [ - 3, - "Bilge-drinker", - "Rat-speak", - "Feral" - ], - "key_leads": [ - "Outcast Subsetting", - "Servitude And Captive Setting", - "City Dweller Setting" - ] - }, - "Landsman": { - "time": 4, - "res": 5, - "leads": [ - "Servitude", - "Soldier", - "Outcast" - ], - "skills": [ - [ - 3, - "Seamanship", - "Knots", - "Brawling", - "Rope-wise" - ] - ], - "traits": [ - 1, - "Cursing", - "Aches And Pains" - ], - "key_leads": [ - "Servitude And Captive Setting", - "Professional Soldier Subsetting", - "Outcast Subsetting" - ] - }, - "Drummer": { - "time": 5, - "res": 6, - "leads": [ - "Soldier", - "City", - "Villager", - "Outcast" - ], - "skills": [ - [ - 3, - "Drum", - "Sing", - "Drum Maker" - ] - ], - "traits": [ - 2, - "Incessant Tapping" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "City Dweller Setting", - "Villager Setting", - "Outcast Subsetting" - ] - }, - "Sailor": { - "time": 5, - "res": 7, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Servitude", - "Soldier", - "City", - "Outcast" - ], - "skills": [ - [ - 6, - "Seamanship", - "Rigging", - "Knots", - "Brawling", - "Sing", - "Sea-wise", - "Gambling" - ] - ], - "traits": [ - 2, - "Drunk" - ], - "key_leads": [ - "Servitude And Captive Setting", - "Professional Soldier Subsetting", - "City Dweller Setting", - "Outcast Subsetting" - ] - }, - "Crazy Old Sailor": { - "time": 10, - "res": 8, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Servitude", - "Outcast" - ], - "skills": [ - [ - 3, - "Ugly Truth", - "Intimidation", - "Omen-wise" - ] - ], - "traits": [ - 3, - "Superstitious", - "Metal Plate In The Skull", - "He's A Jonah, That One" - ], - "requires": "Sailor, Pirate or Mercenary Captain and that the character take this path sometime in his 40s", - "requires_expr": [ - "+and", - [ - "sailor", - "pirate", - "mercenary captain" + "key_leads": [ + "Outcast Subsetting", + "Servitude And Captive Setting", + "City Dweller Setting", + "Villager Setting" + ] + }, + "Porter": { + "time": 3, + "res": 5, + "leads": [ + "Outcast", + "Villager", + "Peasant" ], - [ - "+age_greater_than", - 39 + "skills": [ + [ + 4, + "Temple-wise", + "Priest-wise", + "Worshipper-wise", + "Church Treasure-wise" + ] ], - [ - "+age_less_than", - 50 - ] - ], - "key_leads": [ - "Servitude And Captive Setting", - "Outcast Subsetting" - ] - }, - "Purser": { - "time": 4, - "res": 9, - "leads": [ - "Servitude", - "Soldier" - ], - "skills": [ - [ - 4, - "Accounting", - "Crew-wise", - "Supply-wise", - "Ship-wise" - ] - ], - "traits": [ - 2, - "Gnawing Hunger", - "Bitter" - ], - "requires": "Clerk, Student or Sailor", - "requires_expr": [ - "clerk", - "student", - "sailor" - ], - "key_leads": [ - "Servitude And Captive Setting", - "Professional Soldier Subsetting" - ] - }, - "Signalman": { - "time": 5, - "res": 8, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Servitude", - "Soldier" - ], - "skills": [ - [ - 5, - "Signaling", - "Observation", - "Cryptography" - ] - ], - "traits": [ - 1, - "Cryptic" - ], - "key_leads": [ - "Servitude And Captive Setting", - "Professional Soldier Subsetting" - ] - }, - "Pilot": { - "time": 4, - "res": 8, - "leads": [ - "Soldier", - "City", - "Villager", - "Outcast" - ], - "skills": [ - [ - 5, - "Pilot", - "Ship-wise", - "Observation", - "Shoal-wise" - ] - ], - "traits": [ - 2, - "Blisters", - "Light Sleeper", - "Bored", - "Paranoid About The Ship" - ], - "requires": "Sailor, Pirate or Mercenary Captain", - "requires_expr": [ - "sailor", - "pirate", - "mercenary captain" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "City Dweller Setting", - "Villager Setting", - "Outcast Subsetting" - ] - }, - "Marine": { - "time": 4, - "res": 10, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Soldier", - "City", - "Villager", - "Outcast" - ], - "skills": [ - [ - 4, - "Appropriate Weapons", - "Knots", - "Intimidation" - ] - ], - "traits": [ - 1, - "Bruiser", - "Sea Legs" - ], - "requires": "Sailor, Pirate or Mercenary Captain", - "requires_expr": [ - "sailor", - "pirate", - "mercenary captain" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "City Dweller Setting", - "Villager Setting", - "Outcast Subsetting" - ] - }, - "Bosun": { - "time": 5, - "res": 8, - "leads": [ - "Soldier", - "City", - "Villager", - "Outcast" - ], - "skills": [ - [ - 3, - "Intimidation", - "Brawling", - "Sailor-wise" - ] - ], - "traits": [ - 1, - "Mean", - "Obedient" - ], - "requires": "Sailor, Pirate or Mercenary Captain", - "requires_expr": [ - "sailor", - "pirate", - "mercenary captain" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "City Dweller Setting", - "Villager Setting", - "Outcast Subsetting" - ] - }, - "Sailmaker": { - "time": 5, - "res": 9, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Soldier", - "City", - "Villager", - "Outcast" - ], - "skills": [ - [ - 5, - "Sewing", - "Weaving", - "Mending", - "Sail-wise" - ] - ], - "traits": [ - 1 - ], - "requires": "Sailor, Pirate, Seamstress", - "requires_expr": [ - "sailor", - "pirate", - "seamstress" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "City Dweller Setting", - "Villager Setting", - "Outcast Subsetting" - ] - }, - "Ship's Doctor": { - "time": 6, - "res": 15, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Soldier", - "City", - "Villager", - "Outcast" - ], - "skills": [ - [ - 8, - "Apothecary", - "Bloodletting", - "Surgery", - "Anatomy", - "Astrology", - "Falsehood", - "Tar-wise", - "Scurvy-wise" - ] - ], - "traits": [ - 3, - "Incomprehensible Diagnosis", - "Ugly Reputation" - ], - "requires": "Doctor, Court Doctor, Physician, Barber or Student", - "requires_expr": [ - "doctor", - "court doctor", - "physician", - "barber", - "student" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "City Dweller Setting", - "Villager Setting", - "Outcast Subsetting" - ] - }, - "Ship's Cook": { - "time": 5, - "res": 10, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Soldier", - "City", - "Villager", - "Outcast" - ], - "skills": [ - [ - 6, - "Cooking", - "Firebuilding", - "Sing", - "Falsehood", - "Mystery Meat-wise" - ] - ], - "traits": [ - 3, - "Crippled", - "Cookie", - "Maggot Connoisseur" - ], - "requires": "Sailor or Pirate", - "requires_expr": [ - "sailor", - "pirate" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "City Dweller Setting", - "Villager Setting", - "Outcast Subsetting" - ] - }, - "Ship's Chaplain": { - "time": 5, - "res": 15, - "leads": [ - "Villager", - "City", - "Religious", - "Soldier" - ], - "skills": [ - [ - 4, - "Oratory", - "Doctrine", - "Ship-wise" - ] - ], - "traits": [ - 2, - "World Weary", - "Burial At Sea", - "Secretly Worships The Black Sea God" - ], - "requires": "Chaplain, Military Order, Temple Acolyte or Religious Acolyte", - "requires_expr": [ - "chaplain", - "military order", - "temple acolyte", - "religious acolyte" - ], - "key_leads": [ - "Villager Setting", - "City Dweller Setting", - "Religious Subsetting", - "Professional Soldier Subsetting" - ] - }, - "Weather Witch": { - "time": 5, - "res": 20, - "stat": [ - [ - 1, - "pm" - ] - ], - "leads": [ - "Servitude", - "City", - "Villager", - "Outcast" - ], - "skills": [ - [ - 6, - "Sea-wise", - "Summoning", - "Spirit Binding", - "Superstition-wise", - "Navigation", - "Astrology" - ] - ], - "traits": [ - 2, - "Weather Sense" - ], - "requires": "Augur, Neophyte Sorcerer, Arcane Devotee or Rogue Wizard", - "requires_expr": [ - "augur", - "neophyte sorcerer", - "arcane devotee", - "rogue wizard" - ], - "key_leads": [ - "Servitude And Captive Setting", - "City Dweller Setting", - "Villager Setting", - "Outcast Subsetting" - ] - }, - "Navigator": { - "time": 6, - "res": 15, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Soldier", - "City", - "Servitude", - "Outcast" - ], - "skills": [ - [ - 6, - "Navigation", - "Sea-wise", - "Cartography", - "Astrology", - "Current-wise" - ] - ], - "traits": [ - 1 - ], - "requires": "Pilot, Mercenary Captain, Sailor or Student", - "requires_expr": [ - "pilot", - "mercenary captain", - "sailor", - "student" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "City Dweller Setting", - "Servitude And Captive Setting", - "Outcast Subsetting" - ] - }, - "Carpenter's Mate": { - "time": 6, - "res": 8, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Soldier", - "Servitude", - "Villager", - "Outcast" - ], - "skills": [ - [ - 3, - "Mending", - "Gambling", - "Wood-wise" - ] - ], - "traits": [ - 1, - "Cursing", - "Bull's-eye Spitter" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "Servitude And Captive Setting", - "Villager Setting", - "Outcast Subsetting" - ] - }, - "Ship's Carpenter": { - "time": 4, - "res": 16, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Soldier", - "City", - "Servitude", - "Outcast" - ], - "skills": [ - [ - 5, - "Carpentry", - "Shipwright", - "Boatwright", - "Ship-wise" - ] - ], - "traits": [ - 1, - "I Know This Ship Like My Own Hands" - ], - "requires": "Apprentice, Carpenter's Mate", - "requires_expr": [ - "apprentice", - "carpenter's mate" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "City Dweller Setting", - "Servitude And Captive Setting", - "Outcast Subsetting" - ] - }, - "Artillerist's Mate": { - "time": 4, - "res": 8, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Soldier", - "City", - "Servitude", - "Outcast" - ], - "skills": [ - [ - 4, - "Mending", - "Carpentry", - "Artillerist" - ] - ], - "traits": [ - 1, - "Disturbingly Confident" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "City Dweller Setting", - "Servitude And Captive Setting", - "Outcast Subsetting" - ] - }, - "Engineer": { - "time": 4, - "res": 25, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Soldier", - "City", - "Servitude", - "Outcast" - ], - "skills": [ - [ - 6, - "Engineering", - "Munitions", - "Artillerist", - "Carpentry", - "Mending" - ] - ], - "traits": [ - 1, - "It Just Might Work!" - ], - "requires": "Artillerist's Mate, Student, Ship's Carpenter, Engineer or Journeyman", - "requires_expr": [ - "artillerist's mate", - "student", - "ship's carpenter", - "engineer", - "journeyman" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "City Dweller Setting", - "Servitude And Captive Setting", - "Outcast Subsetting" - ] - }, - "Officer's Mate": { - "time": 4, - "res": 10, - "stat": [ - [ + "traits": [ 1, - "pm" - ] - ], - "leads": [ - "Servitude", - "Outcast", - "Soldier", - "City" - ], - "skills": [ - [ - 4, - "Etiquette", - "Captain-wise", - "Seamanship" - ] - ], - "traits": [ - 3, - "Pegboy" - ], - "requires": "Born Noble, Page or Son of a Gun", - "restrict": "If chosen, this lifepath must be the character's second.", - "requires_expr": [ - "+and", - [ - "+has_n_lifepaths_or_more", - 1 + "Keys To The Church", + "Familiar Face" + ], + "key_leads": [ + "Outcast Subsetting", + "Villager Setting", + "Peasant Setting" + ] + }, + "Notary": { + "time": 4, + "res": 15, + "leads": [ + "City", + "Outcast", + "Court" ], - [ - "+has_n_lifepaths_or_less", + "skills": [ + [ + 4, + "Rule Of Law", + "Bureaucracy", + "Church Law", + "Bribe-wise" + ] + ], + "traits": [ 1 ], - [ - "born noble", - "page", - "son of a gun" - ] - ], - "key_leads": [ - "Servitude And Captive Setting", - "Outcast Subsetting", - "Professional Soldier Subsetting", - "City Dweller Setting" - ] - }, - "Steward": { - "time": 6, - "res": 20, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Soldier", - "City", - "Servitude", - "Outcast" - ], - "skills": [ - [ - 5, - "Accounting", - "Ship Management", - "Haggling", - "Merchant-wise", - "Appraisal" - ] - ], - "traits": [ - 1 - ], - "requires": "Purser, Merchant, Steward or Accountant", - "requires_expr": [ - "purser", - "merchant", - "steward", - "accountant" - ], - "key_leads": [ - "Professional Soldier Subsetting", - "City Dweller Setting", - "Servitude And Captive Setting", - "Outcast Subsetting" - ] - }, - "First Mate": { - "time": 6, - "res": 18, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Soldier", - "City", - "Servitude", - "Outcast" - ], - "skills": [ - [ - 5, - "Intimidation", - "Command", - "Conspicuous", - "Seaman-wise", - "Sword" - ] - ], - "traits": [ - 1 - ], - "requires": "Knight or any two Sailor/Seafaring lifepaths", - "requires_expr": [ - "+or", - [ - "knight" + "requires": "Clerk, Young Lady or Student", + "requires_expr": [ + "clerk", + "young lady", + "student" ], - [ - "+has_n_lifepaths_in", - 2, - "seafaring setting:son of a gun", - "seafaring setting:boy", - "seafaring setting:galley slave", - "seafaring setting:ratcatcher", - "seafaring setting:landsman", - "seafaring setting:drummer", - "sailor", - "seafaring setting:crazy old sailor", - "seafaring setting:purser", - "seafaring setting:signalman", - "seafaring setting:pilot", - "seafaring setting:marine", - "seafaring setting:bosun", - "seafaring setting:sailmaker", - "seafaring setting:ship's doctor", - "seafaring setting:ship's cook", - "seafaring setting:ship's chaplain", - "seafaring setting:weather witch", - "seafaring setting:navigator", - "seafaring setting:carpenter's mate", - "seafaring setting:ship's carpenter", - "seafaring setting:artillerist's mate", - "seafaring setting:engineer", - "seafaring setting:officer's mate", - "seafaring setting:steward", - "seafaring setting:first mate", - "seafaring setting:ship's captain" - ] - ], - "key_leads": [ - "Professional Soldier Subsetting", - "City Dweller Setting", - "Servitude And Captive Setting", - "Outcast Subsetting" - ] - }, - "Ship's Captain": { - "time": 7, - "res": 30, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Peasant", - "Villager", - "City", - "Court", - "Servitude", - "Outcast", - "Soldier", - "Seafaring", - "Religious" - ], - "skills": [ - [ - 6, - "Command", - "Oratory", - "Ship-wise", - "Sea-wise" - ], - [ + "key_leads": [ + "City Dweller Setting", + "Outcast Subsetting", + "Noble Court Subsetting" + ] + }, + "Custodian": { + "time": 5, + "res": 10, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "City", + "Outcast" + ], + "skills": [ + [ + 7, + "Relic-wise", + "Observation", + "Obscure History", + "Religious History", + "Folklore", + "Saint-wise" + ] + ], + "traits": [ 2, - "General" - ] - ], - "traits": [ - 2, - "Stern Demeanor" - ], - "requires": "First Mate, Knight, Military Order or two Mercenary Captain lifepaths", - "requires_expr": [ - "+or", - [ - "first mate", - "knight", - "military order" + "Strange", + "Erudite", + "Obsessed", + "Arcane" ], - [ - "+has_n_lifepaths_in", + "requires": "Student, Young Lady, Cloistered Monk/Nun, Temple Acolyte, Inquisitor, Exorcist or Theologian", + "requires_expr": [ + "student", + "young lady", + "cloistered monk/nun", + "temple acolyte", + "inquisitor", + "exorcist", + "theologian" + ], + "key_leads": [ + "City Dweller Setting", + "Outcast Subsetting" + ] + }, + "Interpreter": { + "time": 5, + "res": 10, + "leads": [ + "City", + "Court", + "Villager" + ], + "skills": [ + [ + 7, + "Read", + "Ancient Languages", + "Instruction", + "Write", + "Doctrine", + "Foreign Languages" + ] + ], + "traits": [ 2, - "mercenary captain" - ] - ], - "key_leads": [ - "Peasant Setting", - "Villager Setting", - "City Dweller Setting", - "Noble Court Subsetting", - "Servitude And Captive Setting", - "Outcast Subsetting", - "Professional Soldier Subsetting", - "Seafaring Setting", - "Religious Subsetting" - ] - } - }, - "Religious Subsetting": { - "Castrati": { - "time": 7, - "res": 15, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Outcast", - "Court" - ], - "skills": [ - [ - 7, - "Sing", - "Persuasion", - "Falsehood", - "Etiquette", - "Administration", - "Rule Of Law" - ] - ], - "traits": [ - 3, - "Eunuch", - "Scheming" - ], - "key_leads": [ - "Outcast Subsetting", - "Noble Court Subsetting" - ] - }, - "Pardoner": { - "time": 5, - "res": 12, - "leads": [ - "Peasant", - "City", - "Villager", - "Outcast" - ], - "skills": [ - [ - 5, - "Persuasion", - "Falsehood", - "Intimidation", - "Doctrine" - ] - ], - "traits": [ - 1, - "Pardoner", - "Corrupt" - ], - "key_leads": [ - "Peasant Setting", - "City Dweller Setting", - "Villager Setting", - "Outcast Subsetting" - ] - }, - "Zealous Convert": { - "time": 4, - "res": 10, - "leads": [ - "Outcast", - "Peasant", - "Servitude", - "Court" - ], - "skills": [ - [ - 4, - "Religious Diatribe", - "Doctrine", - "Rhetoric" - ] - ], - "traits": [ - 3, - "Infallible Religious Logic", - "Righteous", - "Firm", - "Demagogue" - ], - "key_leads": [ - "Outcast Subsetting", - "Peasant Setting", - "Servitude And Captive Setting", - "Noble Court Subsetting" - ] - }, - "Military Order": { - "time": 3, - "res": 7, - "stat": [ - [ - 1, - "p" + "Ink-stained Hands", + "Condescending" ], - [ - 1, - "m" - ] - ], - "leads": [ - "Villager", - "City", - "Noble", - "Court", - "Servitude", - "Outcast", - "Soldier", - "Seafaring", - "Religious" - ], - "skills": [ - [ - 5, - "Doctrine", - "Riding", - "Armor Training", - "Appropriate Weapons" - ] - ], - "traits": [ - 2, - "Disciplined", - "Fanatical Devotion", - "Sworn To The Order" - ], - "requires": "Squire, Knight or any lifepath from the Professional Soldier setting", - "requires_expr": [ - "squire", - "knight", - "professional soldier subsetting:runner", - "professional soldier subsetting:apprentice", - "professional soldier subsetting:musician", - "professional soldier subsetting:foot soldier", - "professional soldier subsetting:archer", - "professional soldier subsetting:crossbowman", - "professional soldier subsetting:sailor", - "professional soldier subsetting:herald", - "professional soldier subsetting:bannerman", - "professional soldier subsetting:scout", - "professional soldier subsetting:sergeant", - "professional soldier subsetting:veteran", - "professional soldier subsetting:cavalryman", - "professional soldier subsetting:journeyman", - "professional soldier subsetting:armorer", - "professional soldier subsetting:atilliator", - "professional soldier subsetting:chaplain", - "professional soldier subsetting:engineer", - "professional soldier subsetting:wizard of war", - "professional soldier subsetting:quartermaster", - "professional soldier subsetting:captain" - ], - "key_leads": [ - "Villager Setting", - "City Dweller Setting", - "Noble Setting", - "Noble Court Subsetting", - "Servitude And Captive Setting", - "Outcast Subsetting", - "Professional Soldier Subsetting", - "Seafaring Setting", - "Religious Subsetting" - ] - }, - "Grave Digger": { - "time": 4, - "res": 6, - "leads": [ - "Outcast", - "Servitude", - "City", - "Villager" - ], - "skills": [ - [ - 4, - "Digging", - "Grave-wise", - "Cemetery-wise" - ] - ], - "traits": [ - 2, - "Superstitious", - "Burial Rites" - ], - "key_leads": [ - "Outcast Subsetting", - "Servitude And Captive Setting", - "City Dweller Setting", - "Villager Setting" - ] - }, - "Porter": { - "time": 3, - "res": 5, - "leads": [ - "Outcast", - "Villager", - "Peasant" - ], - "skills": [ - [ - 4, - "Temple-wise", - "Priest-wise", - "Worshipper-wise", - "Church Treasure-wise" - ] - ], - "traits": [ - 1, - "Keys To The Church", - "Familiar Face" - ], - "key_leads": [ - "Outcast Subsetting", - "Villager Setting", - "Peasant Setting" - ] - }, - "Notary": { - "time": 4, - "res": 15, - "leads": [ - "City", - "Outcast", - "Court" - ], - "skills": [ - [ - 4, - "Rule Of Law", - "Bureaucracy", - "Church Law", - "Bribe-wise" - ] - ], - "traits": [ - 1 - ], - "requires": "Clerk, Young Lady or Student", - "requires_expr": [ - "clerk", - "young lady", - "student" - ], - "key_leads": [ - "City Dweller Setting", - "Outcast Subsetting", - "Noble Court Subsetting" - ] - }, - "Custodian": { - "time": 5, - "res": 10, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "City", - "Outcast" - ], - "skills": [ - [ - 7, - "Relic-wise", - "Observation", - "Obscure History", - "Religious History", - "Folklore", - "Saint-wise" - ] - ], - "traits": [ - 2, - "Strange", - "Erudite", - "Obsessed", - "Arcane" - ], - "requires": "Student, Young Lady, Cloistered Monk/Nun, Temple Acolyte, Inquisitor, Exorcist or Theologian", - "requires_expr": [ - "student", - "young lady", - "cloistered monk/nun", - "temple acolyte", - "inquisitor", - "exorcist", - "theologian" - ], - "key_leads": [ - "City Dweller Setting", - "Outcast Subsetting" - ] - }, - "Interpreter": { - "time": 5, - "res": 10, - "leads": [ - "City", - "Court", - "Villager" - ], - "skills": [ - [ - 7, - "Read", - "Ancient Languages", - "Instruction", - "Write", - "Doctrine", - "Foreign Languages" - ] - ], - "traits": [ - 2, - "Ink-stained Hands", - "Condescending" - ], - "requires": "Student, Young Lady, Temple Acolyte, Exorcist or Theologian", - "requires_expr": [ - "student", - "young lady", - "temple acolyte", - "exorcist", - "theologian" - ], - "key_leads": [ - "City Dweller Setting", - "Noble Court Subsetting", - "Villager Setting" - ] - }, - "Archivist": { - "time": 7, - "res": 8, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "City", - "Villager", - "Court" - ], - "skills": [ - [ - 5, - "Research", - "Library-wise", - "Ancient History", - "Symbology" - ] - ], - "traits": [ - 1, - "Myopic", - "Affinity For Books And Scrolls" - ], - "requires": "Student, Young Lady, Temple Acolyte, Exorcist or Theologian", - "requires_expr": [ - "student", - "young lady", - "temple acolyte", - "exorcist", - "theologian" - ], - "key_leads": [ - "City Dweller Setting", - "Villager Setting", - "Noble Court Subsetting" - ] - }, - "Itinerant Monk": { - "time": 6, - "res": 6, - "leads": [ - "Peasant", - "Villager", - "Outcast" - ], - "skills": [ - [ - 7, - "Doctrine", - "Suasion", - "Meditation", - "Begging", - "Alms-wise", - "Streetwise", - "Road-wise" - ] - ], - "traits": [ - 2, - "Tonsured" - ], - "key_leads": [ - "Peasant Setting", - "Villager Setting", - "Outcast Subsetting" - ] - }, - "Cloistered Monk/nun": { - "time": 10, - "res": 12, - "leads": [ - "Peasant", - "Outcast", - "Court" - ], - "skills": [ - [ - 6, - "Research", - "History", - "Meditation", - "Monastic Ritual", - "Vintner", - "Symbology" - ] - ], - "traits": [ - 1, - "Tonsured", - "Restless", - "Bored" - ], - "key_leads": [ - "Peasant Setting", - "Outcast Subsetting", - "Noble Court Subsetting" - ] - }, - "Temple Acolyte": { - "time": 6, - "res": 5, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "City", - "Outcast", - "Soldier" - ], - "skills": [ - [ - 4, - "Write", - "Read", - "Doctrine", - "Temple-wise" - ] - ], - "traits": [ - 1, - "Tonsured", - "Obedient", - "Faithful" - ], - "key_leads": [ - "City Dweller Setting", - "Outcast Subsetting", - "Professional Soldier Subsetting" - ] - }, - "Priest": { - "time": 5, - "res": 18, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Villager", - "Outcast", - "Soldier", - "Court" - ], - "skills": [ - [ - 7, - "Oratory", - "Suasion", - "Write", - "Read", - "Doctrine", - "Ritual", - "Symbology", - "Religious History" - ] - ], - "traits": [ - 2, - "Vested" - ], - "requires": "Temple Acolyte or Religious Acolyte", - "requires_expr": [ - "temple acolyte", - "religious acolyte" - ], - "key_leads": [ - "Villager Setting", - "Outcast Subsetting", - "Professional Soldier Subsetting", - "Noble Court Subsetting" - ] - }, - "Exorcist": { - "time": 6, - "res": 10, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Outcast", - "City", - "Court" - ], - "skills": [ - [ - 9, - "Doctrine", - "Obscure History", - "Observation", - "Church Law", - "Symbology", - "Demonology", - "Ancient Languages", - "Exorcist Ritual" - ] - ], - "traits": [ - 2, - "Skeptical", - "Haunted", - "Possessed", - "Lost Faith", - "Faithful" - ], - "requires": "Temple Priest, Itinerant Priest, Priest, Court Priest or Archivist", - "requires_expr": [ - "temple priest", - "itinerant priest", - "priest", - "court priest", - "archivist" - ], - "key_leads": [ - "Outcast Subsetting", - "City Dweller Setting", - "Noble Court Subsetting" - ] - }, - "Inquisitor": { - "time": 6, - "res": 15, - "stat": [ - [ - 1, - "pm" - ] - ], - "leads": [ - "Outcast", - "Soldier", - "City", - "Court" - ], - "skills": [ - [ - 6, - "Doctrine", - "Interrogation", - "Torture", - "Heresy-wise" - ] - ], - "traits": [ - 2, - "Suspicious", - "Merciless", - "Cold-blooded", - "Righteous" - ], - "requires": "Temple Priest, Itinerant Priest, Priest, Court Priest, Judge or Justicar", - "requires_expr": [ - "temple priest", - "itinerant priest", - "priest", - "court priest", - "judge", - "justicar" - ], - "key_leads": [ - "Outcast Subsetting", - "Professional Soldier Subsetting", - "City Dweller Setting", - "Noble Court Subsetting" - ] - }, - "Theologian": { - "time": 10, - "res": 9, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "City", - "Villager", - "Court" - ], - "skills": [ - [ - 10, - "Doctrine", - "Rhetoric", - "Philosophy", - "History", - "Religious History", - "Church Law", - "Obscure History", - "Read", - "Write" - ] - ], - "traits": [ - 2, - "Learned", - "Insightful", - "Bookworm", - "Academic" - ], - "requires": "Scribe, Archivist, Court Lawyer, Advocate, Custodian, Interpreter, Priest or Bishop", - "requires_expr": [ - "scribe", - "archivist", - "court lawyer", - "advocate", - "custodian", - "interpreter", - "priest", - "bishop" - ], - "key_leads": [ - "City Dweller Setting", - "Villager Setting", - "Noble Court Subsetting" - ] - }, - "Archpriest": { - "time": 5, - "res": 25, - "stat": [ - [ + "requires": "Student, Young Lady, Temple Acolyte, Exorcist or Theologian", + "requires_expr": [ + "student", + "young lady", + "temple acolyte", + "exorcist", + "theologian" + ], + "key_leads": [ + "City Dweller Setting", + "Noble Court Subsetting", + "Villager Setting" + ] + }, + "Archivist": { + "time": 7, + "res": 8, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "City", + "Villager", + "Court" + ], + "skills": [ + [ + 5, + "Research", + "Library-wise", + "Ancient History", + "Symbology" + ] + ], + "traits": [ 1, - "pm" - ] - ], - "leads": [ - "City", - "Outcast", - "Court" - ], - "skills": [ - [ - 10, - "Oratory", - "Suasion", - "Write", - "Read", - "Doctrine", - "History", - "Religious History", - "Ritual", - "Church-wise", - "Parish-wise", - "Tithe-wise" - ] - ], - "traits": [ - 2, - "Imperious Demeanor" - ], - "requires": "Temple Priest, Itinerant Priest, Priest, Court Priest or Chaplain", - "requires_expr": [ - "temple priest", - "itinerant priest", - "priest", - "court priest", - "chaplain" - ], - "key_leads": [ - "City Dweller Setting", - "Outcast Subsetting", - "Noble Court Subsetting" - ] - }, - "Canon": { - "time": 10, - "res": 45, - "stat": [ - [ + "Myopic", + "Affinity For Books And Scrolls" + ], + "requires": "Student, Young Lady, Temple Acolyte, Exorcist or Theologian", + "requires_expr": [ + "student", + "young lady", + "temple acolyte", + "exorcist", + "theologian" + ], + "key_leads": [ + "City Dweller Setting", + "Villager Setting", + "Noble Court Subsetting" + ] + }, + "Itinerant Monk": { + "time": 6, + "res": 6, + "leads": [ + "Peasant", + "Villager", + "Outcast" + ], + "skills": [ + [ + 7, + "Doctrine", + "Suasion", + "Meditation", + "Begging", + "Alms-wise", + "Streetwise", + "Road-wise" + ] + ], + "traits": [ + 2, + "Tonsured" + ], + "key_leads": [ + "Peasant Setting", + "Villager Setting", + "Outcast Subsetting" + ] + }, + "Cloistered Monk/nun": { + "time": 10, + "res": 12, + "leads": [ + "Peasant", + "Outcast", + "Court" + ], + "skills": [ + [ + 6, + "Research", + "History", + "Meditation", + "Monastic Ritual", + "Vintner", + "Symbology" + ] + ], + "traits": [ 1, - "pm" - ] - ], - "leads": [ - "City", - "Outcast", - "Court" - ], - "skills": [ - [ - 6, - "Rule Of Law", - "Church Law", - "Administration", - "Doctrine", - "Church-wise" - ] - ], - "traits": [ - 1, - "Authoritative" - ], - "requires": "Archpriest, Theologian or Abbot", - "requires_expr": [ - "archpriest", - "theologian", - "abbot/abbess" - ], - "key_leads": [ - "City Dweller Setting", - "Outcast Subsetting", - "Noble Court Subsetting" - ] - }, - "Abbot/abbess": { - "time": 10, - "res": 45, - "stat": [ - [ + "Tonsured", + "Restless", + "Bored" + ], + "key_leads": [ + "Peasant Setting", + "Outcast Subsetting", + "Noble Court Subsetting" + ] + }, + "Temple Acolyte": { + "time": 6, + "res": 5, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "City", + "Outcast", + "Soldier" + ], + "skills": [ + [ + 4, + "Write", + "Read", + "Doctrine", + "Temple-wise" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "City", - "Outcast", - "Court" - ], - "skills": [ - [ - 6, - "Administration", - "Accounting", - "Vintner", - "Wine Tasting", - "Royal Secret-wise", - "Abbey-wise" - ], - [ + "Tonsured", + "Obedient", + "Faithful" + ], + "key_leads": [ + "City Dweller Setting", + "Outcast Subsetting", + "Professional Soldier Subsetting" + ] + }, + "Priest": { + "time": 5, + "res": 18, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Villager", + "Outcast", + "Soldier", + "Court" + ], + "skills": [ + [ + 7, + "Oratory", + "Suasion", + "Write", + "Read", + "Doctrine", + "Ritual", + "Symbology", + "Religious History" + ] + ], + "traits": [ 2, - "General" - ] - ], - "traits": [ - 1 - ], - "requires": "Itinerant Monk, Cloistered Monk/Nun, Theologian or Vintner", - "requires_expr": [ - "itinerant monk", - "cloistered monk/nun", - "theologian", - "vintner" - ], - "key_leads": [ - "City Dweller Setting", - "Outcast Subsetting", - "Noble Court Subsetting" - ] - }, - "Bishop": { - "time": 8, - "res": 45, - "leads": [ - "City", - "Outcast", - "Court" - ], - "skills": [ - [ - 7, - "Religious History", - "Intimidation", - "Ritual", - "Symbology", - "History", - "Obscure History" - ] - ], - "traits": [ - 2, - "Domineering Presence" - ], - "requires": "Archpriest, Baron, Viscount, Count, Duke or Prince and the Your Grace trait", - "requires_expr": [ - "+and", - [ + "Vested" + ], + "requires": "Temple Acolyte or Religious Acolyte", + "requires_expr": [ + "temple acolyte", + "religious acolyte" + ], + "key_leads": [ + "Villager Setting", + "Outcast Subsetting", + "Professional Soldier Subsetting", + "Noble Court Subsetting" + ] + }, + "Exorcist": { + "time": 6, + "res": 10, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Outcast", + "City", + "Court" + ], + "skills": [ + [ + 9, + "Doctrine", + "Obscure History", + "Observation", + "Church Law", + "Symbology", + "Demonology", + "Ancient Languages", + "Exorcist Ritual" + ] + ], + "traits": [ + 2, + "Skeptical", + "Haunted", + "Possessed", + "Lost Faith", + "Faithful" + ], + "requires": "Temple Priest, Itinerant Priest, Priest, Court Priest or Archivist", + "requires_expr": [ + "temple priest", + "itinerant priest", + "priest", + "court priest", + "archivist" + ], + "key_leads": [ + "Outcast Subsetting", + "City Dweller Setting", + "Noble Court Subsetting" + ] + }, + "Inquisitor": { + "time": 6, + "res": 15, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Outcast", + "Soldier", + "City", + "Court" + ], + "skills": [ + [ + 6, + "Doctrine", + "Interrogation", + "Torture", + "Heresy-wise" + ] + ], + "traits": [ + 2, + "Suspicious", + "Merciless", + "Cold-blooded", + "Righteous" + ], + "requires": "Temple Priest, Itinerant Priest, Priest, Court Priest, Judge or Justicar", + "requires_expr": [ + "temple priest", + "itinerant priest", + "priest", + "court priest", + "judge", + "justicar" + ], + "key_leads": [ + "Outcast Subsetting", + "Professional Soldier Subsetting", + "City Dweller Setting", + "Noble Court Subsetting" + ] + }, + "Theologian": { + "time": 10, + "res": 9, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "City", + "Villager", + "Court" + ], + "skills": [ + [ + 10, + "Doctrine", + "Rhetoric", + "Philosophy", + "History", + "Religious History", + "Church Law", + "Obscure History", + "Read", + "Write" + ] + ], + "traits": [ + 2, + "Learned", + "Insightful", + "Bookworm", + "Academic" + ], + "requires": "Scribe, Archivist, Court Lawyer, Advocate, Custodian, Interpreter, Priest or Bishop", + "requires_expr": [ + "scribe", + "archivist", + "court lawyer", + "advocate", + "custodian", + "interpreter", + "priest", + "bishop" + ], + "key_leads": [ + "City Dweller Setting", + "Villager Setting", + "Noble Court Subsetting" + ] + }, + "Archpriest": { + "time": 5, + "res": 25, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "City", + "Outcast", + "Court" + ], + "skills": [ + [ + 10, + "Oratory", + "Suasion", + "Write", + "Read", + "Doctrine", + "History", + "Religious History", + "Ritual", + "Church-wise", + "Parish-wise", + "Tithe-wise" + ] + ], + "traits": [ + 2, + "Imperious Demeanor" + ], + "requires": "Temple Priest, Itinerant Priest, Priest, Court Priest or Chaplain", + "requires_expr": [ + "temple priest", + "itinerant priest", + "priest", + "court priest", + "chaplain" + ], + "key_leads": [ + "City Dweller Setting", + "Outcast Subsetting", + "Noble Court Subsetting" + ] + }, + "Canon": { + "time": 10, + "res": 45, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "City", + "Outcast", + "Court" + ], + "skills": [ + [ + 6, + "Rule Of Law", + "Church Law", + "Administration", + "Doctrine", + "Church-wise" + ] + ], + "traits": [ + 1, + "Authoritative" + ], + "requires": "Archpriest, Theologian or Abbot", + "requires_expr": [ "archpriest", - "baron", - "viscount", - "count", - "duke", - "noble prince", - "prince of the blood" + "theologian", + "abbot/abbess" ], - [ - "+trait", - "your grace" + "key_leads": [ + "City Dweller Setting", + "Outcast Subsetting", + "Noble Court Subsetting" + ] + }, + "Abbot/abbess": { + "time": 10, + "res": 45, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "City", + "Outcast", + "Court" + ], + "skills": [ + [ + 6, + "Administration", + "Accounting", + "Vintner", + "Wine Tasting", + "Royal Secret-wise", + "Abbey-wise" + ], + [ + 2, + "General" + ] + ], + "traits": [ + 1 + ], + "requires": "Itinerant Monk, Cloistered Monk/Nun, Theologian or Vintner", + "requires_expr": [ + "itinerant monk", + "cloistered monk/nun", + "theologian", + "vintner" + ], + "key_leads": [ + "City Dweller Setting", + "Outcast Subsetting", + "Noble Court Subsetting" + ] + }, + "Bishop": { + "time": 8, + "res": 45, + "leads": [ + "City", + "Outcast", + "Court" + ], + "skills": [ + [ + 7, + "Religious History", + "Intimidation", + "Ritual", + "Symbology", + "History", + "Obscure History" + ] + ], + "traits": [ + 2, + "Domineering Presence" + ], + "requires": "Archpriest, Baron, Viscount, Count, Duke or Prince and the Your Grace trait", + "requires_expr": [ + "+and", + [ + "archpriest", + "baron", + "viscount", + "count", + "duke", + "noble prince", + "prince of the blood" + ], + [ + "+trait", + "your grace" + ] + ], + "key_leads": [ + "City Dweller Setting", + "Outcast Subsetting", + "Noble Court Subsetting" ] - ], - "key_leads": [ - "City Dweller Setting", - "Outcast Subsetting", - "Noble Court Subsetting" - ] + } } } } diff --git a/src/data/gold/lifepaths/orc.json b/src/data/gold/lifepaths/orc.json index 06198d8..0ccb6f8 100644 --- a/src/data/gold/lifepaths/orc.json +++ b/src/data/gold/lifepaths/orc.json @@ -1,1577 +1,1580 @@ { - "Chattel Setting": { - "Born Chattel": { - "time": 10, - "res": 5, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Black Legion", - "Servant" - ], - "skills": [ - [ + "stock": "orc", + "settings": { + "Chattel Setting": { + "Born Chattel": { + "time": 10, + "res": 5, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Black Legion", + "Servant" + ], + "skills": [ + [ + 2, + "General" + ] + ], + "traits": [ + 1 + ], + "key_leads": [ + "Black Legion Subsetting", + "Servant Of The Dark Blood Subsetting" + ] + }, + "Cattle Slave": { + "time": 5, + "res": 3, + "stat": [ + [ + 1, + "p" + ] + ], + "skills": [ + [ + 2, + "Animal Husbandry" + ] + ], + "traits": [ + 2, + "Tasting The Lash", + "Screaming", + "Shouting", + "Kicking The Beast" + ] + }, + "Scavenger": { + "time": 3, + "res": 6, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Black Legion" + ], + "skills": [ + [ + 3, + "Foraging", + "Inconspicuous" + ] + ], + "traits": [ + 2, + "Tasting The Lash", + "Running (Away)", + "Hiding", + "Stealing", + "Scavenger" + ], + "key_leads": [ + "Black Legion Subsetting" + ] + }, + "Forge Slave": { + "time": 5, + "res": 3, + "stat": [ + [ + 1, + "p" + ] + ], + "skills": [ + [ + 2, + "Ditch Digging" + ] + ], + "traits": [ + 2, + "Tasting The Lash", + "Pain Life", + "Back-breaking Labor", + "Numb" + ] + }, + "Hauler": { + "time": 5, + "res": 3, + "stat": [ + [ + 1, + "p" + ] + ], + "skills": [ + [ + 2, + "Driving", + "Beast Of Burden-wise" + ] + ], + "traits": [ + 2, + "Tasting The Lash", + "Back-breaking Labor", + "Cursing", + "Spitting", + "Yowling" + ] + }, + "Cutter Slave": { + "time": 5, + "res": 3, + "stat": [ + [ + 1, + "p" + ] + ], + "skills": [ + [ + 2, + "Tree Pulling", + "Ditch Digging" + ] + ], + "traits": [ + 2, + "Tasting The Lash", + "Hatred Of Forests", + "Back-breaking Labor" + ] + }, + "Tunneler": { + "time": 4, + "res": 3, + "stat": [ + [ + 1, + "p" + ] + ], + "skills": [ + [ + 2, + "Ditch Digging", + "Tunnel-wise" + ] + ], + "traits": [ 2, - "General" + "Tasting The Lash", + "Back-breaking Labor", + "Black Lung" + ] + }, + "Ravager": { + "time": 3, + "res": 8, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Black Legion" + ], + "skills": [ + [ + 4, + "Brawling", + "Cudgel", + "Intimidation" + ] + ], + "traits": [ + 2, + "Pack Hunter" + ], + "key_leads": [ + "Black Legion Subsetting" + ] + }, + "Woodcutter": { + "time": 7, + "res": 9, + "stat": [ + [ + 1, + "m" + ] + ], + "skills": [ + [ + 4, + "Rude Carpentry", + "Mending", + "Intimidation" + ] + ], + "traits": [ + 1 + ], + "requires": "Cutter Slave", + "requires_expr": [ + "cutter slave" ] - ], - "traits": [ - 1 - ], - "key_leads": [ - "Black Legion Subsetting", - "Servant Of The Dark Blood Subsetting" - ] - }, - "Cattle Slave": { - "time": 5, - "res": 3, - "stat": [ - [ + }, + "Butcher": { + "time": 7, + "res": 9, + "stat": [ + [ + 1, + "m" + ] + ], + "skills": [ + [ + 4, + "Butchery", + "Tanner", + "Intimidation" + ] + ], + "traits": [ + 1 + ], + "requires": "Cattle Slave", + "requires_expr": [ + "cattle slave" + ] + }, + "Forger": { + "time": 7, + "res": 9, + "stat": [ + [ + 1, + "m" + ] + ], + "skills": [ + [ + 5, + "Blacksmith", + "Intimidation" + ] + ], + "traits": [ + 2, + "Singed" + ], + "requires": "Forge Slave", + "requires_expr": [ + "forge slave" + ] + }, + "Pitwright": { + "time": 8, + "res": 10, + "stat": [ + [ + 1, + "m" + ] + ], + "skills": [ + [ + 4, + "Mining", + "Intimidation" + ] + ], + "traits": [ 1, - "p" - ] - ], - "skills": [ - [ + "Deep Sense" + ], + "requires": "Tunneler", + "requires_expr": [ + "tunneler" + ] + }, + "Edge Grinder": { + "time": 10, + "res": 15, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Black Legion" + ], + "skills": [ + [ + 6, + "Mending", + "Weaponsmith", + "Armorer", + "Tanner" + ] + ], + "traits": [ 2, - "Animal Husbandry" - ] - ], - "traits": [ - 2, - "Tasting The Lash", - "Screaming", - "Shouting", - "Kicking The Beast" - ] - }, - "Scavenger": { - "time": 3, - "res": 6, - "stat": [ - [ + "Suspicious" + ], + "requires": "He Who Grinds the Edges of our Axes to Glinting Sharpness requires Forger", + "requires_expr": [ + "forger" + ], + "key_leads": [ + "Black Legion Subsetting" + ] + }, + "Whipmaster": { + "time": 9, + "res": 15, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Black Legion" + ], + "skills": [ + [ + 4, + "Interrogation", + "Intimidation", + "Brawling", + "Orcish Torture" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Black Legion" - ], - "skills": [ - [ - 3, - "Foraging", - "Inconspicuous" + "Where There's A Whip, There's A Way" + ], + "requires": "Pitwright, Forger, four Slave life paths, or any Great and Black, or Legion lifepath", + "requires_expr": [ + "+or", + [ + "pitwright", + "forger" + ], + [ + "+has_n_lifepaths_in", + 4, + "cattle slave", + "forge slave", + "cutter slave" + ], + [ + "great and black setting:born great", + "great and black setting:the rites", + "great and black setting:servant of the gate", + "great and black setting:follower", + "great and black setting:black destroyer", + "great and black setting:named", + "great and black setting:siege master", + "great and black setting:gate forger", + "great and black setting:whisperer", + "great and black setting:great one", + "black legion subsetting:goblin", + "black legion subsetting:sun blotter", + "black legion subsetting:nightseeker", + "black legion subsetting:legioner", + "black legion subsetting:hatred bearer", + "black legion subsetting:despair shouter", + "black legion subsetting:black hunter", + "black legion subsetting:astride the beast", + "black legion subsetting:bears the lash", + "black legion subsetting:packmaster", + "black legion subsetting:head taker", + "black legion subsetting:troll lord" + ] + ], + "key_leads": [ + "Black Legion Subsetting" ] - ], - "traits": [ - 2, - "Tasting The Lash", - "Running (Away)", - "Hiding", - "Stealing", - "Scavenger" - ], - "key_leads": [ - "Black Legion Subsetting" - ] + } }, - "Forge Slave": { - "time": 5, - "res": 3, - "stat": [ - [ - 1, - "p" - ] - ], - "skills": [ - [ + "Great And Black Setting": { + "Born Great": { + "time": 10, + "res": 5, + "leads": [ + "Servant" + ], + "skills": [ + [ + 3, + "General" + ] + ], + "traits": [ 2, - "Ditch Digging" - ] - ], - "traits": [ - 2, - "Tasting The Lash", - "Pain Life", - "Back-breaking Labor", - "Numb" - ] - }, - "Hauler": { - "time": 5, - "res": 3, - "stat": [ - [ - 1, - "p" - ] - ], - "skills": [ - [ + "Born To Rule Them All", + "Enemy Of The Sun" + ], + "key_leads": [ + "Servant Of The Dark Blood Subsetting" + ] + }, + "The Rites": { + "time": 3, + "res": 3, + "stat": [ + [ + 1, + "m" + ], + [ + 1, + "p" + ] + ], + "leads": [ + "Black Legion", + "Servant" + ], + "skills": [ + [ + 5, + "Brawling", + "Intimidation", + "Orcish Torture" + ] + ], + "traits": [ 2, - "Driving", - "Beast Of Burden-wise" - ] - ], - "traits": [ - 2, - "Tasting The Lash", - "Back-breaking Labor", - "Cursing", - "Spitting", - "Yowling" - ] - }, - "Cutter Slave": { - "time": 5, - "res": 3, - "stat": [ - [ + "Life Is Death", + "Sprinter" + ], + "restrict": "The Rites may only be taken once and it must be the character's second lifepath.", + "requires_expr": [ + "+and", + [ + "+has_n_lifepaths_or_more", + 1 + ], + [ + "+has_n_lifepaths_or_less", + 1 + ] + ], + "key_leads": [ + "Black Legion Subsetting", + "Servant Of The Dark Blood Subsetting" + ] + }, + "Servant Of The Gate": { + "time": 4, + "res": 7, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Black Legion", + "Chattel" + ], + "skills": [ + [ + 2, + "Soothing Platitudes", + "Ditch Digging" + ] + ], + "traits": [ 1, - "p" - ] - ], - "skills": [ - [ - 2, - "Tree Pulling", - "Ditch Digging" - ] - ], - "traits": [ - 2, - "Tasting The Lash", - "Hatred Of Forests", - "Back-breaking Labor" - ] - }, - "Tunneler": { - "time": 4, - "res": 3, - "stat": [ - [ + "Humble Before My Master", + "Hauling", + "Back-breaking Labor" + ], + "key_leads": [ + "Black Legion Subsetting", + "Chattel Setting" + ] + }, + "Follower": { + "time": 5, + "res": 9, + "stat": [ + [ + 1, + "m" + ], + [ + 1, + "p" + ] + ], + "leads": [ + "Black Legion", + "Chattel" + ], + "skills": [ + [ + 8, + "Armor Training", + "Axe", + "Bow", + "Knives", + "Mace", + "Riding", + "Shield Training", + "Clan-wise" + ] + ], + "traits": [ 1, - "p" - ] - ], - "skills": [ - [ + "Silent Hatred" + ], + "requires": "He Who Walks in the Named's Shadow requires The Rites or Astride the Beast", + "requires_expr": [ + "the rites", + "astride the beast" + ], + "key_leads": [ + "Black Legion Subsetting", + "Chattel Setting" + ] + }, + "Black Destroyer": { + "time": 6, + "res": 12, + "stat": [ + [ + 1, + "m" + ], + [ + 1, + "p" + ] + ], + "leads": [ + "Chattel" + ], + "skills": [ + [ + 7, + "Mounted Combat Training", + "Great Wolf Husbandry", + "Riding", + "Axe", + "Spear" + ] + ], + "traits": [ 2, - "Ditch Digging", - "Tunnel-wise" - ] - ], - "traits": [ - 2, - "Tasting The Lash", - "Back-breaking Labor", - "Black Lung" - ] - }, - "Ravager": { - "time": 3, - "res": 8, - "stat": [ - [ + "Intense Hatred", + "Low Cunning" + ], + "requires": "He Whose Skin is like Winter Night, Whose Mere Presence Causes Those Beneath Him to Shiver in Terror and Cower Beneath his Wicked Blade requires Follower, Astride the Beast or Head Taker", + "requires_expr": [ + "follower", + "astride the beast", + "head taker" + ], + "key_leads": [ + "Chattel Setting" + ] + }, + "Named": { + "time": 8, + "res": 25, + "stat": [ + [ + 1, + "m" + ], + [ + 1, + "p" + ] + ], + "leads": [ + "Chattel" + ], + "skills": [ + [ + 5, + "Command", + "Brutal Intimidation", + "Orcish Torture" + ] + ], + "traits": [ + 2, + "Savage Consequences" + ], + "requires": "He Who is Mighty and Earned the Ancient Right to be Named requires Black Destroyer, Troll Lord or Head Taker", + "requires_expr": [ + "black destroyer", + "troll lord", + "head taker" + ], + "key_leads": [ + "Chattel Setting" + ] + }, + "Siege Master": { + "time": 10, + "res": 30, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Chattel" + ], + "skills": [ + [ + 5, + "Siege Engineer", + "Artillerist", + "Mending" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Black Legion" - ], - "skills": [ - [ - 4, - "Brawling", - "Cudgel", - "Intimidation" - ] - ], - "traits": [ - 2, - "Pack Hunter" - ], - "key_leads": [ - "Black Legion Subsetting" - ] - }, - "Woodcutter": { - "time": 7, - "res": 9, - "stat": [ - [ + "The Bigger They Come...", + "Brutish Efficiency" + ], + "requires": "Servant of the Gate", + "requires_expr": [ + "servant of the gate" + ], + "key_leads": [ + "Chattel Setting" + ] + }, + "Gate Forger": { + "time": 10, + "res": 30, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Chattel" + ], + "skills": [ + [ + 5, + "Mason", + "Bastions Of Hatred", + "Mining" + ] + ], + "traits": [ 1, - "m" - ] - ], - "skills": [ - [ - 4, - "Rude Carpentry", - "Mending", - "Intimidation" + "Rare Talent" + ], + "requires": "Siege Master", + "requires_expr": [ + "siege master" + ], + "key_leads": [ + "Chattel Setting" + ] + }, + "Whisperer": { + "time": 9, + "res": 40, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Servant" + ], + "skills": [ + [ + 5, + "Poisonous Platitudes", + "Falsehood", + "Persuasion", + "Clan-wise", + "Ambition-wise" + ] + ], + "traits": [ + 2, + "Forked Tongue", + "Poisonous Ambition" + ], + "requires": "Slave to the Dark, Whipmaster, Gate Forger or Bears the Lash", + "requires_expr": [ + "slave to the dark", + "whipmaster", + "gate forger", + "bears the lash" + ], + "key_leads": [ + "Servant Of The Dark Blood Subsetting" + ] + }, + "Great One": { + "time": 20, + "res": 60, + "stat": [ + [ + 2, + "m" + ], + [ + 2, + "p" + ] + ], + "leads": [ + "Black Legion" + ], + "skills": [ + [ + 5, + "Command", + "Strategy", + "Name Ritual" + ], + [ + 1, + "General" + ] + ], + "traits": [ + 2, + "Flights Of Murderous Fancy", + "Unrelenting Hatred" + ], + "requires": "Named and the Born to Rule Them All trait", + "requires_expr": [ + "+and", + [ + "named" + ], + [ + "+trait", + "born to rule them all" + ] + ], + "key_leads": [ + "Black Legion Subsetting" ] - ], - "traits": [ - 1 - ], - "requires": "Cutter Slave", - "requires_expr": [ - "cutter slave" - ] + } }, - "Butcher": { - "time": 7, - "res": 9, - "stat": [ - [ + "Black Legion Subsetting": { + "Goblin": { + "time": 3, + "res": 2, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Chattel" + ], + "skills": [ + [ + 2, + "Foraging", + "Brawling" + ] + ], + "traits": [ + 2, + "Tasting The Lash", + "Exhausted", + "Running (Away)", + "Charging Blindly", + "Marching" + ], + "restrict": "Born Great orcs may not take this path.", + "requires_expr": [ + "+not", + [ + "born great" + ] + ], + "key_leads": [ + "Chattel Setting" + ] + }, + "Sun Blotter": { + "time": 3, + "res": 3, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Chattel" + ], + "skills": [ + [ + 2, + "Bow", + "Mending", + "Fletcher" + ] + ], + "traits": [ 1, - "m" - ] - ], - "skills": [ - [ - 4, - "Butchery", - "Tanner", - "Intimidation" - ] - ], - "traits": [ - 1 - ], - "requires": "Cattle Slave", - "requires_expr": [ - "cattle slave" - ] - }, - "Forger": { - "time": 7, - "res": 9, - "stat": [ - [ + "Hiding", + "Running (Away)" + ], + "restrict": "Born Great orcs may not take this path.", + "requires_expr": [ + "+not", + [ + "born great" + ] + ], + "key_leads": [ + "Chattel Setting" + ] + }, + "Nightseeker": { + "time": 4, + "res": 4, + "stat": [ + [ + 1, + "p" + ], + [ + 1, + "m" + ] + ], + "leads": [ + "Chattel" + ], + "skills": [ + [ + 5, + "Orienteering", + "Tracking", + "Trapper", + "Stealthy", + "Climbing", + "Garrote" + ] + ], + "traits": [ 1, - "m" - ] - ], - "skills": [ - [ - 5, - "Blacksmith", - "Intimidation" - ] - ], - "traits": [ - 2, - "Singed" - ], - "requires": "Forge Slave", - "requires_expr": [ - "forge slave" - ] - }, - "Pitwright": { - "time": 8, - "res": 10, - "stat": [ - [ + "Tasting The Lash" + ], + "requires": "He Who Lurks in the Twilight and Seeks Our Enemies requires Legioner, Sun Blotter, Scavenger or Ravager", + "restrict": "Born Great orcs may not take this path.", + "requires_expr": [ + "+and", + [ + "legioner", + "sun blotter", + "scavenger", + "ravager" + ], + [ + "+not", + [ + "born great" + ] + ] + ], + "key_leads": [ + "Chattel Setting" + ] + }, + "Legioner": { + "time": 4, + "res": 5, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Chattel" + ], + "skills": [ + [ + 4, + "Spear", + "Shield Training", + "Brawling", + "Foraging" + ] + ], + "traits": [ + 1 + ], + "requires": "Ravager, Whipmaster or Goblin", + "restrict": "Born Great orcs may not take this path.", + "requires_expr": [ + "+and", + [ + "ravager", + "whipmaster", + "goblin" + ], + [ + "+not", + [ + "born great" + ] + ] + ], + "key_leads": [ + "Chattel Setting" + ] + }, + "Hatred Bearer": { + "time": 1, + "res": 15, + "stat": [ + [ + 1, + "p" + ], + [ + 1, + "m" + ] + ], + "leads": [ + "Chattel" + ], + "skills": [ + [ + 3, + "Conspicuous", + "Black Legion-wise" + ] + ], + "traits": [ 1, - "m" - ] - ], - "skills": [ - [ - 4, - "Mining", - "Intimidation" - ] - ], - "traits": [ - 1, - "Deep Sense" - ], - "requires": "Tunneler", - "requires_expr": [ - "tunneler" - ] - }, - "Edge Grinder": { - "time": 10, - "res": 15, - "stat": [ - [ + "Psychotic", + "Paranoid", + "Booming Voice" + ], + "requires": "The Rites, Legioner or Whipmaster", + "requires_expr": [ + "the rites", + "legioner", + "whipmaster" + ], + "key_leads": [ + "Chattel Setting" + ] + }, + "Despair Shouter": { + "time": 3, + "res": 10, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Chattel" + ], + "skills": [ + [ + 3, + "Brazen Horn Of Despair", + "Intimidation", + "Brawling" + ] + ], + "traits": [ + 2, + "Reviled" + ], + "requires": "The Rites, Legioner or Whipmaster", + "requires_expr": [ + "the rites", + "legioner", + "whipmaster" + ], + "key_leads": [ + "Chattel Setting" + ] + }, + "Black Hunter": { + "time": 5, + "res": 5, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Chattel" + ], + "skills": [ + [ + 5, + "Bow", + "Hunting", + "Field Dressing", + "Stealthy" + ] + ], + "traits": [ 1, - "pm" - ] - ], - "leads": [ - "Black Legion" - ], - "skills": [ - [ - 6, - "Mending", - "Weaponsmith", - "Armorer", - "Tanner" - ] - ], - "traits": [ - 2, - "Suspicious" - ], - "requires": "He Who Grinds the Edges of our Axes to Glinting Sharpness requires Forger", - "requires_expr": [ - "forger" - ], - "key_leads": [ - "Black Legion Subsetting" - ] - }, - "Whipmaster": { - "time": 9, - "res": 15, - "stat": [ - [ + "Black Bile Poison" + ], + "requires": "He Who is Fell and Stalks the Night requires Follower, Ravager or Nightseeker", + "requires_expr": [ + "follower", + "ravager", + "nightseeker" + ], + "key_leads": [ + "Chattel Setting" + ] + }, + "Astride The Beast": { + "time": 5, + "res": 6, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Chattel", + "Great" + ], + "skills": [ + [ + 8, + "Mounted Combat Training", + "Riding", + "Great Wolf Husbandry", + "Intimidation", + "Spear", + "Armor Training" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Black Legion" - ], - "skills": [ - [ - 4, - "Interrogation", - "Intimidation", - "Brawling", - "Orcish Torture" - ] - ], - "traits": [ - 1, - "Where There's A Whip, There's A Way" - ], - "requires": "Pitwright, Forger, four Slave life paths, or any Great and Black, or Legion lifepath", - "requires_expr": [ - "+or", - [ - "pitwright", - "forger" + "Brash", + "Cry Of Doom" + ], + "requires": "He Who Sits Astride the Howling Black Beast requires Black Hunter or Follower", + "requires_expr": [ + "black hunter", + "follower" + ], + "key_leads": [ + "Chattel Setting", + "Great And Black Setting" + ] + }, + "Bears The Lash": { + "time": 6, + "res": 9, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Chattel", + "Great" + ], + "skills": [ + [ + 6, + "Whip-wise", + "Intimidation", + "Orcish Torture", + "Command", + "Sword", + "Brawling" + ] + ], + "traits": [ + 1, + "Where There's A Whip, There's A Way" + ], + "requires": "He Who Bears the Lash and Drives Us Ever On requires Whipmaster, Black Hunter, Astride the Beast or The Rites", + "requires_expr": [ + "whipmaster", + "black hunter", + "astride the beast", + "the rites" + ], + "key_leads": [ + "Chattel Setting", + "Great And Black Setting" + ] + }, + "Packmaster": { + "time": 7, + "res": 10, + "stat": [ + [ + 1, + "pm" + ] ], - [ - "+has_n_lifepaths_in", - 4, - "cattle slave", - "forge slave", - "cutter slave" + "leads": [ + "Chattel", + "Great" ], - [ - "great and black setting:born great", - "great and black setting:the rites", - "great and black setting:servant of the gate", - "great and black setting:follower", - "great and black setting:black destroyer", - "great and black setting:named", - "great and black setting:siege master", - "great and black setting:gate forger", - "great and black setting:whisperer", - "great and black setting:great one", - "black legion subsetting:goblin", - "black legion subsetting:sun blotter", - "black legion subsetting:nightseeker", - "black legion subsetting:legioner", - "black legion subsetting:hatred bearer", - "black legion subsetting:despair shouter", - "black legion subsetting:black hunter", - "black legion subsetting:astride the beast", - "black legion subsetting:bears the lash", - "black legion subsetting:packmaster", - "black legion subsetting:head taker", - "black legion subsetting:troll lord" - ] - ], - "key_leads": [ - "Black Legion Subsetting" - ] - } - }, - "Great And Black Setting": { - "Born Great": { - "time": 10, - "res": 5, - "leads": [ - "Servant" - ], - "skills": [ - [ - 3, - "General" - ] - ], - "traits": [ - 2, - "Born To Rule Them All", - "Enemy Of The Sun" - ], - "key_leads": [ - "Servant Of The Dark Blood Subsetting" - ] - }, - "The Rites": { - "time": 3, - "res": 3, - "stat": [ - [ - 1, - "m" + "skills": [ + [ + 5, + "Great Wolf Husbandry", + "Great Wolf-wise", + "Pack-wise", + "Mending" + ] ], - [ + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Black Legion", - "Servant" - ], - "skills": [ - [ - 5, - "Brawling", - "Intimidation", - "Orcish Torture" - ] - ], - "traits": [ - 2, - "Life Is Death", - "Sprinter" - ], - "restrict": "The Rites may only be taken once and it must be the character's second lifepath.", - "requires_expr": [ - "+and", - [ - "+has_n_lifepaths_or_more", - 1 + "Flea-bitten", + "Where There's A Whip, There's A Way", + "Show No Fear" ], - [ - "+has_n_lifepaths_or_less", - 1 - ] - ], - "key_leads": [ - "Black Legion Subsetting", - "Servant Of The Dark Blood Subsetting" - ] - }, - "Servant Of The Gate": { - "time": 4, - "res": 7, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Black Legion", - "Chattel" - ], - "skills": [ - [ - 2, - "Soothing Platitudes", - "Ditch Digging" - ] - ], - "traits": [ - 1, - "Humble Before My Master", - "Hauling", - "Back-breaking Labor" - ], - "key_leads": [ - "Black Legion Subsetting", - "Chattel Setting" - ] - }, - "Follower": { - "time": 5, - "res": 9, - "stat": [ - [ - 1, - "m" + "requires": "He Who Rules the Black Wolf Pack requires Bears the Lash, Follower, Whipmaster, Master of Eight or Knower of Secrets]", + "requires_expr": [ + "bears the lash", + "follower", + "whipmaster", + "master of eight", + "knower of secrets" ], - [ - 1, - "p" - ] - ], - "leads": [ - "Black Legion", - "Chattel" - ], - "skills": [ - [ - 8, - "Armor Training", - "Axe", - "Bow", - "Knives", - "Mace", - "Riding", - "Shield Training", - "Clan-wise" - ] - ], - "traits": [ - 1, - "Silent Hatred" - ], - "requires": "He Who Walks in the Named's Shadow requires The Rites or Astride the Beast", - "requires_expr": [ - "the rites", - "astride the beast" - ], - "key_leads": [ - "Black Legion Subsetting", - "Chattel Setting" - ] - }, - "Black Destroyer": { - "time": 6, - "res": 12, - "stat": [ - [ - 1, - "m" + "key_leads": [ + "Chattel Setting", + "Great And Black Setting" + ] + }, + "Head Taker": { + "time": 6, + "res": 15, + "stat": [ + [ + 1, + "m" + ], + [ + 1, + "p" + ] ], - [ - 1, - "p" - ] - ], - "leads": [ - "Chattel" - ], - "skills": [ - [ - 7, - "Mounted Combat Training", - "Great Wolf Husbandry", - "Riding", - "Axe", - "Spear" - ] - ], - "traits": [ - 2, - "Intense Hatred", - "Low Cunning" - ], - "requires": "He Whose Skin is like Winter Night, Whose Mere Presence Causes Those Beneath Him to Shiver in Terror and Cower Beneath his Wicked Blade requires Follower, Astride the Beast or Head Taker", - "requires_expr": [ - "follower", - "astride the beast", - "head taker" - ], - "key_leads": [ - "Chattel Setting" - ] - }, - "Named": { - "time": 8, - "res": 25, - "stat": [ - [ - 1, - "m" + "leads": [ + "Chattel", + "Great" ], - [ - 1, - "p" - ] - ], - "leads": [ - "Chattel" - ], - "skills": [ - [ - 5, - "Command", - "Brutal Intimidation", - "Orcish Torture" - ] - ], - "traits": [ - 2, - "Savage Consequences" - ], - "requires": "He Who is Mighty and Earned the Ancient Right to be Named requires Black Destroyer, Troll Lord or Head Taker", - "requires_expr": [ - "black destroyer", - "troll lord", - "head taker" - ], - "key_leads": [ - "Chattel Setting" - ] - }, - "Siege Master": { - "time": 10, - "res": 30, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Chattel" - ], - "skills": [ - [ - 5, - "Siege Engineer", - "Artillerist", - "Mending" - ] - ], - "traits": [ - 1, - "The Bigger They Come...", - "Brutish Efficiency" - ], - "requires": "Servant of the Gate", - "requires_expr": [ - "servant of the gate" - ], - "key_leads": [ - "Chattel Setting" - ] - }, - "Gate Forger": { - "time": 10, - "res": 30, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Chattel" - ], - "skills": [ - [ - 5, - "Mason", - "Bastions Of Hatred", - "Mining" - ] - ], - "traits": [ - 1, - "Rare Talent" - ], - "requires": "Siege Master", - "requires_expr": [ - "siege master" - ], - "key_leads": [ - "Chattel Setting" - ] - }, - "Whisperer": { - "time": 9, - "res": 40, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Servant" - ], - "skills": [ - [ - 5, - "Poisonous Platitudes", - "Falsehood", - "Persuasion", - "Clan-wise", - "Ambition-wise" - ] - ], - "traits": [ - 2, - "Forked Tongue", - "Poisonous Ambition" - ], - "requires": "Slave to the Dark, Whipmaster, Gate Forger or Bears the Lash", - "requires_expr": [ - "slave to the dark", - "whipmaster", - "gate forger", - "bears the lash" - ], - "key_leads": [ - "Servant Of The Dark Blood Subsetting" - ] - }, - "Great One": { - "time": 20, - "res": 60, - "stat": [ - [ - 2, - "m" + "skills": [ + [ + 5, + "Command", + "Brutal Intimidation", + "Axe", + "Brawling" + ] ], - [ + "traits": [ 2, - "p" - ] - ], - "leads": [ - "Black Legion" - ], - "skills": [ - [ - 5, - "Command", - "Strategy", - "Name Ritual" - ], - [ - 1, - "General" - ] - ], - "traits": [ - 2, - "Flights Of Murderous Fancy", - "Unrelenting Hatred" - ], - "requires": "Named and the Born to Rule Them All trait", - "requires_expr": [ - "+and", - [ + "Unrelenting Savagery", + "Fondness For Elven Blood", + "Taste For Man-flesh" + ], + "requires": "He Who Cleaves the Heads of his Enemies From Their Shoulders and Sets Them Upon Stakes for All to See requires Bears the Lash, Black Destroyer or Named", + "requires_expr": [ + "bears the lash", + "black destroyer", "named" ], - [ - "+trait", - "born to rule them all" - ] - ], - "key_leads": [ - "Black Legion Subsetting" - ] - } - }, - "Black Legion Subsetting": { - "Goblin": { - "time": 3, - "res": 2, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Chattel" - ], - "skills": [ - [ - 2, - "Foraging", - "Brawling" - ] - ], - "traits": [ - 2, - "Tasting The Lash", - "Exhausted", - "Running (Away)", - "Charging Blindly", - "Marching" - ], - "restrict": "Born Great orcs may not take this path.", - "requires_expr": [ - "+not", - [ - "born great" - ] - ], - "key_leads": [ - "Chattel Setting" - ] - }, - "Sun Blotter": { - "time": 3, - "res": 3, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Chattel" - ], - "skills": [ - [ + "key_leads": [ + "Chattel Setting", + "Great And Black Setting" + ] + }, + "Troll Lord": { + "time": 5, + "res": 20, + "stat": [ + [ + 1, + "m" + ], + [ + 1, + "p" + ] + ], + "leads": [ + "Great", + "Servant" + ], + "skills": [ + [ + 6, + "Troll-wise", + "Troll Etiquette", + "Hammer", + "Shield Training" + ] + ], + "traits": [ 2, - "Bow", - "Mending", - "Fletcher" - ] - ], - "traits": [ - 1, - "Hiding", - "Running (Away)" - ], - "restrict": "Born Great orcs may not take this path.", - "requires_expr": [ - "+not", - [ - "born great" + "Arrogant", + "Troll Speak" + ], + "requires": "Bears the Lash, Pack Master or Named", + "requires_expr": [ + "bears the lash", + "packmaster", + "named" + ], + "key_leads": [ + "Great And Black Setting", + "Servant Of The Dark Blood Subsetting" ] - ], - "key_leads": [ - "Chattel Setting" - ] + } }, - "Nightseeker": { - "time": 4, - "res": 4, - "stat": [ - [ - 1, - "p" + "Servant Of The Dark Blood Subsetting": { + "Slave To The Dark": { + "time": 6, + "res": 3, + "leads": [ + "Chattel" ], - [ - 1, - "m" - ] - ], - "leads": [ - "Chattel" - ], - "skills": [ - [ - 5, - "Orienteering", - "Tracking", - "Trapper", - "Stealthy", - "Climbing", - "Garrote" - ] - ], - "traits": [ - 1, - "Tasting The Lash" - ], - "requires": "He Who Lurks in the Twilight and Seeks Our Enemies requires Legioner, Sun Blotter, Scavenger or Ravager", - "restrict": "Born Great orcs may not take this path.", - "requires_expr": [ - "+and", - [ - "legioner", - "sun blotter", - "scavenger", - "ravager" + "skills": [ + [ + 2, + "Servant-wise" + ] ], - [ - "+not", + "traits": [ + 2, + "Fearful Respect Of The Servants", + "Naked Hatred" + ], + "key_leads": [ + "Chattel Setting" + ] + }, + "Drinker Of The Dark": { + "time": 5, + "res": 6, + "stat": [ [ - "born great" + 1, + "m" + ], + [ + 1, + "p" ] - ] - ], - "key_leads": [ - "Chattel Setting" - ] - }, - "Legioner": { - "time": 4, - "res": 5, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Chattel" - ], - "skills": [ - [ - 4, - "Spear", - "Shield Training", - "Brawling", - "Foraging" - ] - ], - "traits": [ - 1 - ], - "requires": "Ravager, Whipmaster or Goblin", - "restrict": "Born Great orcs may not take this path.", - "requires_expr": [ - "+and", - [ - "ravager", - "whipmaster", - "goblin" ], - [ - "+not", + "leads": [ + "Chattel" + ], + "skills": [ [ - "born great" + 3, + "Doctrine Of Night's Blood" ] - ] - ], - "key_leads": [ - "Chattel Setting" - ] - }, - "Hatred Bearer": { - "time": 1, - "res": 15, - "stat": [ - [ - 1, - "p" ], - [ - 1, - "m" - ] - ], - "leads": [ - "Chattel" - ], - "skills": [ - [ - 3, - "Conspicuous", - "Black Legion-wise" - ] - ], - "traits": [ - 1, - "Psychotic", - "Paranoid", - "Booming Voice" - ], - "requires": "The Rites, Legioner or Whipmaster", - "requires_expr": [ - "the rites", - "legioner", - "whipmaster" - ], - "key_leads": [ - "Chattel Setting" - ] - }, - "Despair Shouter": { - "time": 3, - "res": 10, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Chattel" - ], - "skills": [ - [ + "traits": [ 3, - "Brazen Horn Of Despair", - "Intimidation", - "Brawling" - ] - ], - "traits": [ - 2, - "Reviled" - ], - "requires": "The Rites, Legioner or Whipmaster", - "requires_expr": [ - "the rites", - "legioner", - "whipmaster" - ], - "key_leads": [ - "Chattel Setting" - ] - }, - "Black Hunter": { - "time": 5, - "res": 5, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Chattel" - ], - "skills": [ - [ - 5, - "Bow", - "Hunting", - "Field Dressing", - "Stealthy" - ] - ], - "traits": [ - 1, - "Black Bile Poison" - ], - "requires": "He Who is Fell and Stalks the Night requires Follower, Ravager or Nightseeker", - "requires_expr": [ - "follower", - "ravager", - "nightseeker" - ], - "key_leads": [ - "Chattel Setting" - ] - }, - "Astride The Beast": { - "time": 5, - "res": 6, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Chattel", - "Great" - ], - "skills": [ - [ - 8, - "Mounted Combat Training", - "Riding", - "Great Wolf Husbandry", - "Intimidation", - "Spear", - "Armor Training" - ] - ], - "traits": [ - 1, - "Brash", - "Cry Of Doom" - ], - "requires": "He Who Sits Astride the Howling Black Beast requires Black Hunter or Follower", - "requires_expr": [ - "black hunter", - "follower" - ], - "key_leads": [ - "Chattel Setting", - "Great And Black Setting" - ] - }, - "Bears The Lash": { - "time": 6, - "res": 9, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Chattel", - "Great" - ], - "skills": [ - [ - 6, - "Whip-wise", - "Intimidation", - "Orcish Torture", - "Command", - "Sword", - "Brawling" - ] - ], - "traits": [ - 1, - "Where There's A Whip, There's A Way" - ], - "requires": "He Who Bears the Lash and Drives Us Ever On requires Whipmaster, Black Hunter, Astride the Beast or The Rites", - "requires_expr": [ - "whipmaster", - "black hunter", - "astride the beast", - "the rites" - ], - "key_leads": [ - "Chattel Setting", - "Great And Black Setting" - ] - }, - "Packmaster": { - "time": 7, - "res": 10, - "stat": [ - [ - 1, - "pm" - ] - ], - "leads": [ - "Chattel", - "Great" - ], - "skills": [ - [ - 5, - "Great Wolf Husbandry", - "Great Wolf-wise", - "Pack-wise", - "Mending" - ] - ], - "traits": [ - 1, - "Flea-bitten", - "Where There's A Whip, There's A Way", - "Show No Fear" - ], - "requires": "He Who Rules the Black Wolf Pack requires Bears the Lash, Follower, Whipmaster, Master of Eight or Knower of Secrets]", - "requires_expr": [ - "bears the lash", - "follower", - "whipmaster", - "master of eight", - "knower of secrets" - ], - "key_leads": [ - "Chattel Setting", - "Great And Black Setting" - ] - }, - "Head Taker": { - "time": 6, - "res": 15, - "stat": [ - [ - 1, - "m" + "Stark Madness", + "Blasphemer", + "Void Embrace" ], - [ - 1, - "p" - ] - ], - "leads": [ - "Chattel", - "Great" - ], - "skills": [ - [ - 5, - "Command", - "Brutal Intimidation", - "Axe", - "Brawling" - ] - ], - "traits": [ - 2, - "Unrelenting Savagery", - "Fondness For Elven Blood", - "Taste For Man-flesh" - ], - "requires": "He Who Cleaves the Heads of his Enemies From Their Shoulders and Sets Them Upon Stakes for All to See requires Bears the Lash, Black Destroyer or Named", - "requires_expr": [ - "bears the lash", - "black destroyer", - "named" - ], - "key_leads": [ - "Chattel Setting", - "Great And Black Setting" - ] - }, - "Troll Lord": { - "time": 5, - "res": 20, - "stat": [ - [ - 1, - "m" + "requires": "Slave to the Dark", + "requires_expr": [ + "slave to the dark" ], - [ - 1, - "p" - ] - ], - "leads": [ - "Great", - "Servant" - ], - "skills": [ - [ - 6, - "Troll-wise", - "Troll Etiquette", - "Hammer", - "Shield Training" - ] - ], - "traits": [ - 2, - "Arrogant", - "Troll Speak" - ], - "requires": "Bears the Lash, Pack Master or Named", - "requires_expr": [ - "bears the lash", - "packmaster", - "named" - ], - "key_leads": [ - "Great And Black Setting", - "Servant Of The Dark Blood Subsetting" - ] - } - }, - "Servant Of The Dark Blood Subsetting": { - "Slave To The Dark": { - "time": 6, - "res": 3, - "leads": [ - "Chattel" - ], - "skills": [ - [ - 2, - "Servant-wise" - ] - ], - "traits": [ - 2, - "Fearful Respect Of The Servants", - "Naked Hatred" - ], - "key_leads": [ - "Chattel Setting" - ] - }, - "Drinker Of The Dark": { - "time": 5, - "res": 6, - "stat": [ - [ - 1, - "m" + "key_leads": [ + "Chattel Setting" + ] + }, + "Bloodletter": { + "time": 5, + "res": 6, + "stat": [ + [ + 1, + "m" + ], + [ + 1, + "p" + ] ], - [ - 1, - "p" - ] - ], - "leads": [ - "Chattel" - ], - "skills": [ - [ - 3, - "Doctrine Of Night's Blood" - ] - ], - "traits": [ - 3, - "Stark Madness", - "Blasphemer", - "Void Embrace" - ], - "requires": "Slave to the Dark", - "requires_expr": [ - "slave to the dark" - ], - "key_leads": [ - "Chattel Setting" - ] - }, - "Bloodletter": { - "time": 5, - "res": 6, - "stat": [ - [ - 1, - "m" + "leads": [ + "Chattel" ], - [ - 1, - "p" - ] - ], - "leads": [ - "Chattel" - ], - "skills": [ - [ - 5, - "Rituals Of Blood", - "Orcish Torture", - "Intimidation", - "Knives" - ] - ], - "traits": [ - 1 - ], - "requires": "Drinker of the Dark", - "requires_expr": [ - "drinker of the dark" - ], - "key_leads": [ - "Chattel Setting" - ] - }, - "Knower Of Secrets": { - "time": 6, - "res": 7, - "stat": [ - [ - 1, - "pm" - ] - ], - "leads": [ - "Chattel", - "Black Legion" - ], - "skills": [ - [ - 4, - "Rituals Of Night", - "Vile Poisoner", - "Foraging" - ] - ], - "traits": [ - 1 - ], - "requires": "Drinker of the Dark", - "requires_expr": [ - "drinker of the dark" - ], - "key_leads": [ - "Chattel Setting", - "Black Legion Subsetting" - ] - }, - "Master Of Eight": { - "time": 8, - "res": 8, - "stat": [ - [ - 1, - "pm" - ] - ], - "leads": [ - "Chattel", - "Black Legion" - ], - "skills": [ - [ - 7, - "Spider Husbandry", - "Riding", - "Mounted Combat Training", - "Web-wise", - "Climbing" - ] - ], - "traits": [ - 2, - "Batshit", - "Affinity For Spiders" - ], - "requires": "Knower of Secrets", - "requires_expr": [ - "knower of secrets" - ], - "key_leads": [ - "Chattel Setting", - "Black Legion Subsetting" - ] - }, - "Master Of Blood": { - "time": 7, - "res": 8, - "stat": [ - [ - 1, - "pm" - ] - ], - "skills": [ - [ - 4, - "Rituals-wise", - "Animal Husbandry", - "Orc-wise", - "Elf-wise", - "Wolf-wise" - ] - ], - "traits": [ - 2, - "Where There's A Whip, There's A Way" - ], - "requires": "Bloodletter", - "requires_expr": [ - "bloodletter" - ] - }, - "Master Of Darkness": { - "time": 7, - "res": 8, - "stat": [ - [ - 1, - "pm" - ] - ], - "skills": [ - [ - 3, - "Cave-wise", - "Tunnel-wise" - ] - ], - "traits": [ - 1 - ], - "requires": "Knower of Secrets", - "requires_expr": [ - "knower of secrets" - ] - }, - "Dark Summoner": { - "time": 10, - "res": 12, - "stat": [ - [ - 1, - "pm" - ] - ], - "skills": [ - [ - 3, - "Darkness-wise" + "skills": [ + [ + 5, + "Rituals Of Blood", + "Orcish Torture", + "Intimidation", + "Knives" + ] ], - [ - 1, - "General" - ] - ], - "traits": [ - 1 - ], - "requires": "Master of Darkness", - "requires_expr": [ - "master of darkness" - ] - }, - "Blood Summoner": { - "time": 10, - "res": 12, - "stat": [ - [ - 1, - "pm" - ] - ], - "skills": [ - [ - 3, - "Poison-wise", - "Bat-wise", - "Troll-wise" + "traits": [ + 1 ], - [ - 1, - "General" - ] - ], - "traits": [ - 1 - ], - "requires": "Master of Blood", - "requires_expr": [ - "master of blood" - ] - }, - "Servant": { - "time": 50, - "res": 30, - "stat": [ - [ - 1, - "m" - ] - ], - "skills": [ - [ + "requires": "Drinker of the Dark", + "requires_expr": [ + "drinker of the dark" + ], + "key_leads": [ + "Chattel Setting" + ] + }, + "Knower Of Secrets": { + "time": 6, + "res": 7, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Chattel", + "Black Legion" + ], + "skills": [ + [ + 4, + "Rituals Of Night", + "Vile Poisoner", + "Foraging" + ] + ], + "traits": [ + 1 + ], + "requires": "Drinker of the Dark", + "requires_expr": [ + "drinker of the dark" + ], + "key_leads": [ + "Chattel Setting", + "Black Legion Subsetting" + ] + }, + "Master Of Eight": { + "time": 8, + "res": 8, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Chattel", + "Black Legion" + ], + "skills": [ + [ + 7, + "Spider Husbandry", + "Riding", + "Mounted Combat Training", + "Web-wise", + "Climbing" + ] + ], + "traits": [ 2, - "Great And Black-wise", - "Name Ritual" + "Batshit", + "Affinity For Spiders" + ], + "requires": "Knower of Secrets", + "requires_expr": [ + "knower of secrets" + ], + "key_leads": [ + "Chattel Setting", + "Black Legion Subsetting" + ] + }, + "Master Of Blood": { + "time": 7, + "res": 8, + "stat": [ + [ + 1, + "pm" + ] + ], + "skills": [ + [ + 4, + "Rituals-wise", + "Animal Husbandry", + "Orc-wise", + "Elf-wise", + "Wolf-wise" + ] ], - [ + "traits": [ 2, - "General" - ] - ], - "traits": [ - 1 - ], - "requires": "The Born to Rule Them All trait and Dark Summoner or Blood Summoner", - "requires_expr": [ - "+and", - [ - "dark summoner", - "blood summoner" - ], - [ - "+trait", - "born to rule them all" + "Where There's A Whip, There's A Way" + ], + "requires": "Bloodletter", + "requires_expr": [ + "bloodletter" + ] + }, + "Master Of Darkness": { + "time": 7, + "res": 8, + "stat": [ + [ + 1, + "pm" + ] + ], + "skills": [ + [ + 3, + "Cave-wise", + "Tunnel-wise" + ] + ], + "traits": [ + 1 + ], + "requires": "Knower of Secrets", + "requires_expr": [ + "knower of secrets" + ] + }, + "Dark Summoner": { + "time": 10, + "res": 12, + "stat": [ + [ + 1, + "pm" + ] + ], + "skills": [ + [ + 3, + "Darkness-wise" + ], + [ + 1, + "General" + ] + ], + "traits": [ + 1 + ], + "requires": "Master of Darkness", + "requires_expr": [ + "master of darkness" + ] + }, + "Blood Summoner": { + "time": 10, + "res": 12, + "stat": [ + [ + 1, + "pm" + ] + ], + "skills": [ + [ + 3, + "Poison-wise", + "Bat-wise", + "Troll-wise" + ], + [ + 1, + "General" + ] + ], + "traits": [ + 1 + ], + "requires": "Master of Blood", + "requires_expr": [ + "master of blood" + ] + }, + "Servant": { + "time": 50, + "res": 30, + "stat": [ + [ + 1, + "m" + ] + ], + "skills": [ + [ + 2, + "Great And Black-wise", + "Name Ritual" + ], + [ + 2, + "General" + ] + ], + "traits": [ + 1 + ], + "requires": "The Born to Rule Them All trait and Dark Summoner or Blood Summoner", + "requires_expr": [ + "+and", + [ + "dark summoner", + "blood summoner" + ], + [ + "+trait", + "born to rule them all" + ] ] - ] + } } } } diff --git a/src/data/gold/lifepaths/roden.json b/src/data/gold/lifepaths/roden.json index bc69f7d..4b58bde 100644 --- a/src/data/gold/lifepaths/roden.json +++ b/src/data/gold/lifepaths/roden.json @@ -1,1722 +1,1725 @@ { - "Field Setting": { - "Born To The Fields": { - "time": 8, - "res": 0, - "leads": [ - "Society" - ], - "skills": [ - [ + "stock": "roden", + "settings": { + "Field Setting": { + "Born To The Fields": { + "time": 8, + "res": 0, + "leads": [ + "Society" + ], + "skills": [ + [ + 3, + "General" + ] + ], + "traits": [ 3, - "General" - ] - ], - "traits": [ - 3, - "Vegetarian" - ], - "key_leads": [ - "Society Subsetting" - ] - }, - "Hand": { - "time": 3, - "res": 3, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Exile" - ], - "skills": [ - [ - 4, - "Sing", - "Work-wise", - "Back-breaking Labor" - ] - ], - "traits": [ - 1, - "Toiling" - ], - "key_leads": [ - "Exile Subsetting" - ] - }, - "Woodsen": { - "time": 6, - "res": 6, - "stat": [ - [ + "Vegetarian" + ], + "key_leads": [ + "Society Subsetting" + ] + }, + "Hand": { + "time": 3, + "res": 3, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Exile" + ], + "skills": [ + [ + 4, + "Sing", + "Work-wise", + "Back-breaking Labor" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Exile" - ], - "skills": [ - [ - 4, - "Tree Cutting", - "Tree-wise", - "Mending", - "Orienteering" - ] - ], - "traits": [ - 1, - "Independent" - ], - "key_leads": [ - "Exile Subsetting" - ] - }, - "Bee Keeper": { - "time": 7, - "res": 9, - "skills": [ - [ - 5, - "Bee Husbandry", - "Firebuilding", - "Bee-wise", - "Flower-wise", - "Honey-wise" - ] - ], - "traits": [ - 1, - "Thick-skinned", - "Beespeaker" - ] - }, - "Gatherer": { - "time": 8, - "res": 10, - "leads": [ - "Exile" - ], - "skills": [ - [ - 4, - "Foraging", - "Herbalism", - "Nut And Berry-wise" - ] - ], - "traits": [ - 1, - "Adventurous Palate" - ], - "key_leads": [ - "Exile Subsetting" - ] - }, - "Farmer": { - "time": 8, - "res": 10, - "stat": [ - [ + "Toiling" + ], + "key_leads": [ + "Exile Subsetting" + ] + }, + "Woodsen": { + "time": 6, + "res": 6, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Exile" + ], + "skills": [ + [ + 4, + "Tree Cutting", + "Tree-wise", + "Mending", + "Orienteering" + ] + ], + "traits": [ 1, - "p" - ] - ], - "skills": [ - [ - 3, - "Farming", - "Mending", - "Seed-wise" - ] - ], - "traits": [ - 1, - "Hoarder", - "Slow" - ] - }, - "Miller": { - "time 9": null, - "res": 15, - "stat": [ - [ + "Independent" + ], + "key_leads": [ + "Exile Subsetting" + ] + }, + "Bee Keeper": { + "time": 7, + "res": 9, + "skills": [ + [ + 5, + "Bee Husbandry", + "Firebuilding", + "Bee-wise", + "Flower-wise", + "Honey-wise" + ] + ], + "traits": [ 1, - "pm" - ] - ], - "skills": [ - [ - 5, - "Miller", - "Grain-wise", - "Haggling" - ] - ], - "traits": [ - 1, - "Industrious" - ] - }, - "Mead-maker": { - "time": 9, - "res": 14, - "skills": [ - [ - 5, - "Brewer", - "Mead-wise", - "Haggling", - "Cooper" - ] - ], - "traits": [ - 1, - "Beloved" - ] - }, - "Baker": { - "time": 7, - "res": 12, - "skills": [ - [ - 4, - "Cooking", - "Firebuilding", - "Bread-wise" - ] - ], - "traits": [ - 1, - "Keen Sense Of Taste", - "Fragrant", - "Sweet-tooth" - ] - }, - "Weaver": { - "time": 8, - "res": 15, - "skills": [ - [ - 6, - "Weaving", - "Sewing", - "Embroidery", - "Soothing Platitudes", - "Sing" - ] - ], - "traits": [ - 1, - "Calloused Fingers" - ] - }, - "Apprentice": { - "time": 4, - "res": 8, - "stat": [ - [ + "Thick-skinned", + "Beespeaker" + ] + }, + "Gatherer": { + "time": 8, + "res": 10, + "leads": [ + "Exile" + ], + "skills": [ + [ + 4, + "Foraging", + "Herbalism", + "Nut And Berry-wise" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Exile", - "Society" - ], - "skills": [ - [ - 4, - "Mending", - "Blacksmith", - "Carpentry", - "Potter", - "Mason" - ] - ], - "traits": [ - 1, - "Gopher" - ], - "key_leads": [ - "Exile Subsetting", - "Society Subsetting" - ] - }, - "Crafter": { - "time": 10, - "res": 20, - "stat": [ - [ + "Adventurous Palate" + ], + "key_leads": [ + "Exile Subsetting" + ] + }, + "Farmer": { + "time": 8, + "res": 10, + "stat": [ + [ + 1, + "p" + ] + ], + "skills": [ + [ + 3, + "Farming", + "Mending", + "Seed-wise" + ] + ], + "traits": [ 1, - "pm" - ] - ], - "skills": [ - [ - 8, - "Haggling", - "Jargon", - "Instruction", - "Apprentice-wise" - ] - ], - "traits": [ - 1, - "Serious", - "Diligent" - ], - "requires": "Apprentice", - "requires_expr": [ - "apprentice" - ] - }, - "Healer": { - "time": 8, - "res": 10, - "stat": [ - [ + "Hoarder", + "Slow" + ] + }, + "Miller": { + "time 9": null, + "res": 15, + "stat": [ + [ + 1, + "pm" + ] + ], + "skills": [ + [ + 5, + "Miller", + "Grain-wise", + "Haggling" + ] + ], + "traits": [ 1, - "m" - ] - ], - "skills": [ - [ - 6, - "Herbalism", - "Field Dressing", - "Apothecary", - "Ugly Truth", - "Hurt-wise" + "Industrious" ] - ], - "traits": [ - 1, - "Compassionate", - "Bedside Manner" - ] - }, - "Trader": { - "time": 8, - "res": 6, - "leads": [ - "Exile" - ], - "skills": [ - [ - 6, - "Haggling", - "Appraisal", - "Accounting", - "Conspicuous", - "Village-wise" - ] - ], - "traits": [ - 1, - "Opportunist" - ], - "key_leads": [ - "Exile Subsetting" - ] - }, - "Deputy": { - "time": 4, - "res": 6, - "stat": [ - [ + }, + "Mead-maker": { + "time": 9, + "res": 14, + "skills": [ + [ + 5, + "Brewer", + "Mead-wise", + "Haggling", + "Cooper" + ] + ], + "traits": [ 1, - "p" + "Beloved" ] - ], - "leads": [ - "Exile", - "Society" - ], - "skills": [ - [ - 7, - "Spear", - "Bow", - "Brawling", - "Shield Training", - "Trouble-wise" - ] - ], - "traits": [ - 1, - "Alarmist" - ], - "key_leads": [ - "Exile Subsetting", - "Society Subsetting" - ] - }, - "Sheriff": { - "time": 8, - "res": 8, - "stat": [ - [ + }, + "Baker": { + "time": 7, + "res": 12, + "skills": [ + [ + 4, + "Cooking", + "Firebuilding", + "Bread-wise" + ] + ], + "traits": [ 1, - "pm" - ] - ], - "skills": [ - [ - 7, - "Rule Of Law", - "Command", - "Intimidation", - "Interrogation", - "Sword" - ] - ], - "traits": [ - 1, - "Suspicious" - ] - }, - "Mayor": { - "time": 10, - "res": 20, - "skills": [ - [ - 8, - "Oratory", - "Persuasion", - "Rule Of Law", - "Etiquette", - "Haggling", - "Petitioner-wise" - ] - ], - "traits": [ - 1, - "Hand-shaker", - "Practiced Smile" - ], - "requires": "Requires the character to be at minimum 17 yrs old before taking it.", - "requires_expr": [ - "+age_greater_than", - 16 - ] - }, - "Brother/sister": { - "time": 5, - "res": 14, - "stat": [ - [ + "Keen Sense Of Taste", + "Fragrant", + "Sweet-tooth" + ] + }, + "Weaver": { + "time": 8, + "res": 15, + "skills": [ + [ + 6, + "Weaving", + "Sewing", + "Embroidery", + "Soothing Platitudes", + "Sing" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Exile", - "Society" - ], - "skills": [ - [ - 6, - "Doctrine", - "Read", - "Write", - "Meditation", - "Shrine-wise", - "Prayer-wise" + "Calloused Fingers" ] - ], - "traits": [ - 2, - "Humble", - "Ordained", - "Faithful" - ], - "key_leads": [ - "Exile Subsetting", - "Society Subsetting" - ] - }, - "Missionary": { - "time": 5, - "res": 5, - "stat": [ - [ + }, + "Apprentice": { + "time": 4, + "res": 8, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Exile", + "Society" + ], + "skills": [ + [ + 4, + "Mending", + "Blacksmith", + "Carpentry", + "Potter", + "Mason" + ] + ], + "traits": [ 1, - "m" + "Gopher" ], - [ + "key_leads": [ + "Exile Subsetting", + "Society Subsetting" + ] + }, + "Crafter": { + "time": 10, + "res": 20, + "stat": [ + [ + 1, + "pm" + ] + ], + "skills": [ + [ + 8, + "Haggling", + "Jargon", + "Instruction", + "Apprentice-wise" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Exile", - "Society" - ], - "skills": [ - [ - 5, - "Suasion", - "Preaching", - "Intimidation", - "Below-wise", - "Brawling", - "Man-wise" - ] - ], - "traits": [ - 2, - "Tough", - "Zealot", - "Righteous" - ], - "requires": "Brother/Sister", - "requires_expr": [ - "brother/sister" - ], - "key_leads": [ - "Exile Subsetting", - "Society Subsetting" - ] - }, - "Father/mother": { - "time": 7, - "res": 15, - "stat": [ - [ + "Serious", + "Diligent" + ], + "requires": "Apprentice", + "requires_expr": [ + "apprentice" + ] + }, + "Healer": { + "time": 8, + "res": 10, + "stat": [ + [ + 1, + "m" + ] + ], + "skills": [ + [ + 6, + "Herbalism", + "Field Dressing", + "Apothecary", + "Ugly Truth", + "Hurt-wise" + ] + ], + "traits": [ 1, - "m" - ] - ], - "skills": [ - [ - 5, - "Suasion", - "Oratory", - "Illuminations", - "Calligraphy", - "Sing" - ] - ], - "traits": [ - 3, - "Patient", - "Friendly Face", - "Portly" - ], - "requires": "Brother/Sister", - "requires_expr": [ - "brother/sister" - ] - }, - "Abbot/abbess": { - "time": 10, - "res": 30, - "stat": [ - [ + "Compassionate", + "Bedside Manner" + ] + }, + "Trader": { + "time": 8, + "res": 6, + "leads": [ + "Exile" + ], + "skills": [ + [ + 6, + "Haggling", + "Appraisal", + "Accounting", + "Conspicuous", + "Village-wise" + ] + ], + "traits": [ 1, - "m" - ] - ], - "skills": [ - [ - 10, - "Oratory", - "Conspicuous", - "History", - "Research", - "Cartography", - "Poetry", - "Etiquette" - ] - ], - "traits": [ - 1, - "Revered", - "Wise" - ], - "requires": "Father/Mother", - "requires_expr": [ - "father/mother" - ] - } - }, - "Below Setting": { - "Born Below": { - "time": 6, - "res": 0, - "leads": [ - "Society" - ], - "skills": [ - [ - 3, - "General" - ] - ], - "traits": [ - 3, - "Tunnel Vision" - ], - "key_leads": [ - "Society Subsetting" - ] - }, - "Pinky": { - "time": 2, - "res": 2, - "stat": [ - [ - -1, - "m" - ] - ], - "skills": [ - [ - 3, - "Soothing Platitudes", - "Below-wise" - ] - ], - "traits": [ - 2, - "Confusing Rant", - "Distracted", - "Clumsy", - "Lucky" - ] - }, - "Scavenger": { - "time": 4, - "res": 3, - "leads": [ - "Exile", - "Society" - ], - "skills": [ - [ - 6, - "Inconspicuous", - "Survival", - "Appraisal", - "Brawling", - "Junk-wise" - ] - ], - "traits": [ - 1, - "Greedy", - "Iron Stomach", - "Callous" - ], - "key_leads": [ - "Exile Subsetting", - "Society Subsetting" - ] - }, - "Scratcher": { - "time": 6, - "res": 4, - "stat": [ - [ + "Opportunist" + ], + "key_leads": [ + "Exile Subsetting" + ] + }, + "Deputy": { + "time": 4, + "res": 6, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Exile", + "Society" + ], + "skills": [ + [ + 7, + "Spear", + "Bow", + "Brawling", + "Shield Training", + "Trouble-wise" + ] + ], + "traits": [ 1, - "p" - ] - ], - "skills": [ - [ - 5, - "Tunneling", - "Tunnel-wise", - "Mending" - ] - ], - "traits": [ - 1, - "Deep Sense", - "Hacking Cough" - ] - }, - "Snitch": { - "time": 4, - "res": 3, - "leads": [ - "Exile", - "Society" - ], - "skills": [ - [ - 4, - "Inconspicuous", - "Falsehood", - "Haggling", - "Secret-wise" - ] - ], - "traits": [ - 1, - "Cowardly", - "Two-faced" - ], - "key_leads": [ - "Exile Subsetting", - "Society Subsetting" - ] - }, - "The Gauntlet": { - "time": 1, - "res": 4, - "stat": [ - [ + "Alarmist" + ], + "key_leads": [ + "Exile Subsetting", + "Society Subsetting" + ] + }, + "Sheriff": { + "time": 8, + "res": 8, + "stat": [ + [ + 1, + "pm" + ] + ], + "skills": [ + [ + 7, + "Rule Of Law", + "Command", + "Intimidation", + "Interrogation", + "Sword" + ] + ], + "traits": [ 1, - "p" + "Suspicious" ] - ], - "leads": [ - "Society" - ], - "skills": [ - [ - 5, - "Brawling", - "Soothing Platitudes", - "Hazing-wise", - "Pecking Order-wise" - ] - ], - "traits": [ - 1, - "Skulking", - "Abused" - ], - "key_leads": [ - "Society Subsetting" - ] - }, - "Apprentice": { - "time": 6, - "res": 5, - "stat": [ - [ + }, + "Mayor": { + "time": 10, + "res": 20, + "skills": [ + [ + 8, + "Oratory", + "Persuasion", + "Rule Of Law", + "Etiquette", + "Haggling", + "Petitioner-wise" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Exile", - "Society" - ], - "skills": [ - [ + "Hand-shaker", + "Practiced Smile" + ], + "requires": "Requires the character to be at minimum 17 yrs old before taking it.", + "requires_expr": [ + "+age_greater_than", + 16 + ] + }, + "Brother/sister": { + "time": 5, + "res": 14, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Exile", + "Society" + ], + "skills": [ + [ + 6, + "Doctrine", + "Read", + "Write", + "Meditation", + "Shrine-wise", + "Prayer-wise" + ] + ], + "traits": [ + 2, + "Humble", + "Ordained", + "Faithful" + ], + "key_leads": [ + "Exile Subsetting", + "Society Subsetting" + ] + }, + "Missionary": { + "time": 5, + "res": 5, + "stat": [ + [ + 1, + "m" + ], + [ + 1, + "p" + ] + ], + "leads": [ + "Exile", + "Society" + ], + "skills": [ + [ + 5, + "Suasion", + "Preaching", + "Intimidation", + "Below-wise", + "Brawling", + "Man-wise" + ] + ], + "traits": [ + 2, + "Tough", + "Zealot", + "Righteous" + ], + "requires": "Brother/Sister", + "requires_expr": [ + "brother/sister" + ], + "key_leads": [ + "Exile Subsetting", + "Society Subsetting" + ] + }, + "Father/mother": { + "time": 7, + "res": 15, + "stat": [ + [ + 1, + "m" + ] + ], + "skills": [ + [ + 5, + "Suasion", + "Oratory", + "Illuminations", + "Calligraphy", + "Sing" + ] + ], + "traits": [ 3, - "Mending", - "Blacksmith", - "Bribe-wise" - ] - ], - "traits": [ - 1, - "Gopher" - ], - "requires": "The Gauntlet", - "requires_expr": [ - "the gauntlet" - ], - "key_leads": [ - "Exile Subsetting", - "Society Subsetting" - ] - }, - "Bladesmith": { - "time": 8, - "res": 20, - "stat": [ - [ + "Patient", + "Friendly Face", + "Portly" + ], + "requires": "Brother/Sister", + "requires_expr": [ + "brother/sister" + ] + }, + "Abbot/abbess": { + "time": 10, + "res": 30, + "stat": [ + [ + 1, + "m" + ] + ], + "skills": [ + [ + 10, + "Oratory", + "Conspicuous", + "History", + "Research", + "Cartography", + "Poetry", + "Etiquette" + ] + ], + "traits": [ 1, - "pm" - ] - ], - "leads": [ - "Society" - ], - "skills": [ - [ - 7, - "Haggling", - "Instruction", - "Blacksmith", - "Knife-wise", - "Sword-wise" + "Revered", + "Wise" + ], + "requires": "Father/Mother", + "requires_expr": [ + "father/mother" ] - ], - "traits": [ - 1, - "Secretive" - ], - "requires": "Apprentice", - "requires_expr": [ - "apprentice" - ], - "key_leads": [ - "Society Subsetting" - ] + } }, - "Kidnapper": { - "time": 7, - "res": 10, - "stat": [ - [ + "Below Setting": { + "Born Below": { + "time": 6, + "res": 0, + "leads": [ + "Society" + ], + "skills": [ + [ + 3, + "General" + ] + ], + "traits": [ + 3, + "Tunnel Vision" + ], + "key_leads": [ + "Society Subsetting" + ] + }, + "Pinky": { + "time": 2, + "res": 2, + "stat": [ + [ + -1, + "m" + ] + ], + "skills": [ + [ + 3, + "Soothing Platitudes", + "Below-wise" + ] + ], + "traits": [ + 2, + "Confusing Rant", + "Distracted", + "Clumsy", + "Lucky" + ] + }, + "Scavenger": { + "time": 4, + "res": 3, + "leads": [ + "Exile", + "Society" + ], + "skills": [ + [ + 6, + "Inconspicuous", + "Survival", + "Appraisal", + "Brawling", + "Junk-wise" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Exile", - "Society" - ], - "skills": [ - [ - 7, - "Inconspicuous", - "Knots", - "Haggling", - "Cudgel", - "Intimidation", - "Child-wise" - ] - ], - "traits": [ - 1, - "Callous" - ], - "requires": "The Gauntlet", - "requires_expr": [ - "the gauntlet" - ], - "key_leads": [ - "Exile Subsetting", - "Society Subsetting" - ] - }, - "Fingers": { - "time": 6, - "res": 5, - "stat": [ - [ + "Greedy", + "Iron Stomach", + "Callous" + ], + "key_leads": [ + "Exile Subsetting", + "Society Subsetting" + ] + }, + "Scratcher": { + "time": 6, + "res": 4, + "stat": [ + [ + 1, + "p" + ] + ], + "skills": [ + [ + 5, + "Tunneling", + "Tunnel-wise", + "Mending" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Exile", - "Society" - ], - "skills": [ - [ - 4, - "Sleight Of Hand", - "Inconspicuous", - "Knives", - "Streetwise" - ] - ], - "traits": [ - 1, - "Light Touch", - "Cocky" - ], - "requires": "The Gauntlet", - "requires_expr": [ - "the gauntlet" - ], - "key_leads": [ - "Exile Subsetting", - "Society Subsetting" - ] - }, - "Sneak-thief": { - "time": 7, - "res": 6, - "skills": [ - [ - 5, - "Stealthy", - "Lock Pick", - "Knives", - "Roof-wise", - "Window-wise" - ] - ], - "traits": [ - 1, - "Cool-headed", - "Soft Step" - ], - "requires": "The Gauntlet", - "requires_expr": [ - "the gauntlet" - ] - }, - "Burglar": { - "time": 8, - "res": 10, - "stat": [ - [ + "Deep Sense", + "Hacking Cough" + ] + }, + "Snitch": { + "time": 4, + "res": 3, + "leads": [ + "Exile", + "Society" + ], + "skills": [ + [ + 4, + "Inconspicuous", + "Falsehood", + "Haggling", + "Secret-wise" + ] + ], + "traits": [ 1, - "pm" - ] - ], - "skills": [ - [ - 8, - "Observation", - "Climbing", - "Throwing", - "Knots", - "Interrogation", - "Locksmith", - "Loot-wise" - ] - ], - "traits": [ - 1, - "Quiet", - "Confident" - ], - "requires": "Sneak-Thief, Sheriff, or Shadow", - "requires_expr": [ - "sneak-thief", - "sheriff", - "shadow" - ] - }, - "Bruiser": { - "time": 6, - "res": 8, - "stat": [ - [ + "Cowardly", + "Two-faced" + ], + "key_leads": [ + "Exile Subsetting", + "Society Subsetting" + ] + }, + "The Gauntlet": { + "time": 1, + "res": 4, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Society" + ], + "skills": [ + [ + 5, + "Brawling", + "Soothing Platitudes", + "Hazing-wise", + "Pecking Order-wise" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Exile", - "Society" - ], - "skills": [ - [ - 7, - "Weapon Of Choice", - "Intimidation", - "Extortion", - "Crossbow", - "Shield Training" - ] - ], - "traits": [ - 1, - "Mean", - "Brutal", - "Dumb" - ], - "requires": "The Gauntlet", - "requires_expr": [ - "the gauntlet" - ], - "key_leads": [ - "Exile Subsetting", - "Society Subsetting" - ] - }, - "Fence": { - "time": 7, - "res": 20, - "stat": [ - [ + "Skulking", + "Abused" + ], + "key_leads": [ + "Society Subsetting" + ] + }, + "Apprentice": { + "time": 6, + "res": 5, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Exile", + "Society" + ], + "skills": [ + [ + 3, + "Mending", + "Blacksmith", + "Bribe-wise" + ] + ], + "traits": [ 1, - "m" - ] - ], - "skills": [ - [ - 7, - "Appraisal", - "Haggling", - "Falsehood", - "Antique-wise", - "Fake-wise" - ] - ], - "traits": [ - 1, - "Poker Face" - ] - }, - "Sawbones": { - "time": 8, - "res": 15, - "leads": [ - "Exile" - ], - "skills": [ - [ - 6, - "Field Dressing", - "Apothecary", - "Surgery", - "Poisons", - "Haggling" - ] - ], - "traits": [ - 1, - "Practical", - "Impersonal" - ], - "key_leads": [ - "Exile Subsetting" - ] - }, - "Negotiator": { - "time": 8, - "res": 15, - "stat": [ - [ + "Gopher" + ], + "requires": "The Gauntlet", + "requires_expr": [ + "the gauntlet" + ], + "key_leads": [ + "Exile Subsetting", + "Society Subsetting" + ] + }, + "Bladesmith": { + "time": 8, + "res": 20, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Society" + ], + "skills": [ + [ + 7, + "Haggling", + "Instruction", + "Blacksmith", + "Knife-wise", + "Sword-wise" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Society" - ], - "skills": [ - [ - 6, - "Persuasion", - "Deal-wise", - "Haggling", - "Intimidation", - "Oratory" - ] - ], - "traits": [ - 1, - "Calm Demeanor", - "Good Listener" - ], - "key_leads": [ - "Society Subsetting" - ] - }, - "The Brain": { - "time": 9, - "res": 13, - "stat": [ - [ + "Secretive" + ], + "requires": "Apprentice", + "requires_expr": [ + "apprentice" + ], + "key_leads": [ + "Society Subsetting" + ] + }, + "Kidnapper": { + "time": 7, + "res": 10, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Exile", + "Society" + ], + "skills": [ + [ + 7, + "Inconspicuous", + "Knots", + "Haggling", + "Cudgel", + "Intimidation", + "Child-wise" + ] + ], + "traits": [ + 1, + "Callous" + ], + "requires": "The Gauntlet", + "requires_expr": [ + "the gauntlet" + ], + "key_leads": [ + "Exile Subsetting", + "Society Subsetting" + ] + }, + "Fingers": { + "time": 6, + "res": 5, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Exile", + "Society" + ], + "skills": [ + [ + 4, + "Sleight Of Hand", + "Inconspicuous", + "Knives", + "Streetwise" + ] + ], + "traits": [ + 1, + "Light Touch", + "Cocky" + ], + "requires": "The Gauntlet", + "requires_expr": [ + "the gauntlet" + ], + "key_leads": [ + "Exile Subsetting", + "Society Subsetting" + ] + }, + "Sneak-thief": { + "time": 7, + "res": 6, + "skills": [ + [ + 5, + "Stealthy", + "Lock Pick", + "Knives", + "Roof-wise", + "Window-wise" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Society" - ], - "skills": [ - [ - 13, - "Soothing Platitudes", - "Read", - "Write", - "Research", - "Astrology", - "Strategy", - "Logistics", - "Falsehood", - "History", - "Obscure History", - "World Domination-wise" + "Cool-headed", + "Soft Step" + ], + "requires": "The Gauntlet", + "requires_expr": [ + "the gauntlet" ] - ], - "traits": [ - 2, - "Genius", - "Condescending", - "Academic", - "Frustrated" - ], - "requires": "One completely mundane lifepath like Bee Keeper, Scavenger, or Hermit", - "key_leads": [ - "Society Subsetting" - ] - }, - "Mastermind": { - "time": 10, - "res": 30, - "stat": [ - [ + }, + "Burglar": { + "time": 8, + "res": 10, + "stat": [ + [ + 1, + "pm" + ] + ], + "skills": [ + [ + 8, + "Observation", + "Climbing", + "Throwing", + "Knots", + "Interrogation", + "Locksmith", + "Loot-wise" + ] + ], + "traits": [ 1, - "m" + "Quiet", + "Confident" + ], + "requires": "Sneak-Thief, Sheriff, or Shadow", + "requires_expr": [ + "sneak-thief", + "sheriff", + "shadow" + ] + }, + "Bruiser": { + "time": 6, + "res": 8, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Exile", + "Society" + ], + "skills": [ + [ + 7, + "Weapon Of Choice", + "Intimidation", + "Extortion", + "Crossbow", + "Shield Training" + ] ], - [ + "traits": [ 1, - "p" - ] - ], - "skills": [ - [ - 13, - "Intimidation", - "Persuasion", - "Oratory", - "Falsehood", - "Command", - "Below-wise", - "Sword", - "Clique-wise", - "Nest-wise", - "Traitor-wise" - ] - ], - "traits": [ - 3, - "Ambitious", - "Ruthless", - "Suspicious" - ], - "requires": "The Gauntlet and either Negotiator or The Brain", - "requires_expr": [ - "+and", - [ + "Mean", + "Brutal", + "Dumb" + ], + "requires": "The Gauntlet", + "requires_expr": [ "the gauntlet" ], - [ - "+or", + "key_leads": [ + "Exile Subsetting", + "Society Subsetting" + ] + }, + "Fence": { + "time": 7, + "res": 20, + "stat": [ [ - "negotiator" - ], + 1, + "m" + ] + ], + "skills": [ [ - "the brain" + 7, + "Appraisal", + "Haggling", + "Falsehood", + "Antique-wise", + "Fake-wise" ] - ] - ] - } - }, - "Exile Subsetting": { - "Carnivore": { - "time": 4, - "res": 5, - "stat": [ - [ + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Below", - "Society" - ], - "skills": [ - [ - 6, - "Hunting", - "Cooking", - "Tracking", - "Trapper", - "Bow", - "Spear", - "Forest-wise" - ] - ], - "traits": [ - 1, - "Gnawing Hunger", - "Aggressive Carnivore" - ], - "requires": "Born to the Fields", - "requires_expr": [ - "born to the fields" - ], - "key_leads": [ - "Below Setting", - "Society Subsetting" - ] - }, - "Scrub": { - "time": 3, - "res": 3, - "stat": [ - [ - -1, - "m" - ], - [ - -1, - "p" - ] - ], - "leads": [ - "Field", - "Society" - ], - "skills": [ - [ - 5, - "Inconspicuous", - "Soothing Platitudes", - "Kick Me-wise", - "Bully-wise", - "Nest-wise", - "Below-wise", - "Village-wise", - "Cat-wise" - ] - ], - "traits": [ - 3, - "Abused", - "Non-confrontational", - "Meek" - ], - "requires": "Born Below", - "requires_exp": [ - "born below" - ], - "key_leads": [ - "Field Setting", - "Society Subsetting" - ] - }, - "Diseased": { - "time": 3, - "res": 3, - "stat": [ - [ - -1, - "p" - ] - ], - "skills": [ - [ - 5, - "Survival", - "Foraging", - "Disease-wise", - "Lynch Mob-wise", - "Hospital-wise" - ] - ], - "traits": [ - 2, - "Contagious", - "Bitter" - ] - }, - "Hermit": { - "time": 10, - "res": 2, - "leads": [ - "Field", - "Society" - ], - "skills": [ - [ - 9, - "Philosophy", - "Astrology", - "Rhetoric", - "Oratory", - "Foraging", - "Books-wise", - "Lost Secrets-wise" - ] - ], - "traits": [ - 3, - "Philosophical", - "Boring" - ], - "key_leads": [ - "Field Setting", - "Society Subsetting" - ] - }, - "Bushwhacker": { - "time": 5, - "res": 5, - "stat": [ - [ + "Poker Face" + ] + }, + "Sawbones": { + "time": 8, + "res": 15, + "leads": [ + "Exile" + ], + "skills": [ + [ + 6, + "Field Dressing", + "Apothecary", + "Surgery", + "Poisons", + "Haggling" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Field", - "Below", - "Society" - ], - "skills": [ - [ - 4, - "Weapon Of Choice", - "Intimidation", - "Stealthy", - "Bow", - "Ambush-wise" - ] - ], - "traits": [ - 1, - "Desperate" - ], - "key_leads": [ - "Field Setting", - "Below Setting", - "Society Subsetting" - ] - }, - "Corsair": { - "time": 6, - "res": 15, - "stat": [ - [ + "Practical", + "Impersonal" + ], + "key_leads": [ + "Exile Subsetting" + ] + }, + "Negotiator": { + "time": 8, + "res": 15, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Society" + ], + "skills": [ + [ + 6, + "Persuasion", + "Deal-wise", + "Haggling", + "Intimidation", + "Oratory" + ] + ], + "traits": [ 1, - "pm" - ] - ], - "leads": [ - "Field", - "Below", - "Society" - ], - "skills": [ - [ - 8, - "Rigging", - "Knots", - "Navigation", - "Mending", - "Appropriate Weapons", - "Intimidation", - "Ship-wise", - "Bay-wise" + "Calm Demeanor", + "Good Listener" + ], + "key_leads": [ + "Society Subsetting" + ] + }, + "The Brain": { + "time": 9, + "res": 13, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Society" + ], + "skills": [ + [ + 13, + "Soothing Platitudes", + "Read", + "Write", + "Research", + "Astrology", + "Strategy", + "Logistics", + "Falsehood", + "History", + "Obscure History", + "World Domination-wise" + ] + ], + "traits": [ + 2, + "Genius", + "Condescending", + "Academic", + "Frustrated" + ], + "requires": "One completely mundane lifepath like Bee Keeper, Scavenger, or Hermit", + "key_leads": [ + "Society Subsetting" + ] + }, + "Mastermind": { + "time": 10, + "res": 30, + "stat": [ + [ + 1, + "m" + ], + [ + 1, + "p" + ] + ], + "skills": [ + [ + 13, + "Intimidation", + "Persuasion", + "Oratory", + "Falsehood", + "Command", + "Below-wise", + "Sword", + "Clique-wise", + "Nest-wise", + "Traitor-wise" + ] + ], + "traits": [ + 3, + "Ambitious", + "Ruthless", + "Suspicious" + ], + "requires": "The Gauntlet and either Negotiator or The Brain", + "requires_expr": [ + "+and", + [ + "the gauntlet" + ], + [ + "+or", + [ + "negotiator" + ], + [ + "the brain" + ] + ] ] - ], - "traits": [ - 1, - "Ruthless", - "Sea Legs" - ], - "key_leads": [ - "Field Setting", - "Below Setting", - "Society Subsetting" - ] + } }, - "Bandit King": { - "time": 7, - "res": 15, - "stat": [ - [ + "Exile Subsetting": { + "Carnivore": { + "time": 4, + "res": 5, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Below", + "Society" + ], + "skills": [ + [ + 6, + "Hunting", + "Cooking", + "Tracking", + "Trapper", + "Bow", + "Spear", + "Forest-wise" + ] + ], + "traits": [ 1, - "pm" - ] - ], - "leads": [ - "Field", - "Below", - "Society" - ], - "skills": [ - [ - 6, - "Intimidation", - "Command", - "Sword", - "Bandit-wise", - "Caravan-wise" - ] - ], - "traits": [ - 2, - "Scheming", - "Daring" - ], - "requires": "Bushwhacker, Sheriff, or Bruiser", - "requires_expr": [ - "bushwhacker", - "sheriff", - "bruiser" - ], - "key_leads": [ - "Field Setting", - "Below Setting", - "Society Subsetting" - ] - }, - "Albino": { - "time": 10, - "res": 25, - "stat": [ - [ + "Gnawing Hunger", + "Aggressive Carnivore" + ], + "requires": "Born to the Fields", + "requires_expr": [ + "born to the fields" + ], + "key_leads": [ + "Below Setting", + "Society Subsetting" + ] + }, + "Scrub": { + "time": 3, + "res": 3, + "stat": [ + [ + -1, + "m" + ], + [ + -1, + "p" + ] + ], + "leads": [ + "Field", + "Society" + ], + "skills": [ + [ + 5, + "Inconspicuous", + "Soothing Platitudes", + "Kick Me-wise", + "Bully-wise", + "Nest-wise", + "Below-wise", + "Village-wise", + "Cat-wise" + ] + ], + "traits": [ + 3, + "Abused", + "Non-confrontational", + "Meek" + ], + "requires": "Born Below", + "requires_exp": [ + "born below" + ], + "key_leads": [ + "Field Setting", + "Society Subsetting" + ] + }, + "Diseased": { + "time": 3, + "res": 3, + "stat": [ + [ + -1, + "p" + ] + ], + "skills": [ + [ + 5, + "Survival", + "Foraging", + "Disease-wise", + "Lynch Mob-wise", + "Hospital-wise" + ] + ], + "traits": [ + 2, + "Contagious", + "Bitter" + ] + }, + "Hermit": { + "time": 10, + "res": 2, + "leads": [ + "Field", + "Society" + ], + "skills": [ + [ + 9, + "Philosophy", + "Astrology", + "Rhetoric", + "Oratory", + "Foraging", + "Books-wise", + "Lost Secrets-wise" + ] + ], + "traits": [ + 3, + "Philosophical", + "Boring" + ], + "key_leads": [ + "Field Setting", + "Society Subsetting" + ] + }, + "Bushwhacker": { + "time": 5, + "res": 5, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Field", + "Below", + "Society" + ], + "skills": [ + [ + 4, + "Weapon Of Choice", + "Intimidation", + "Stealthy", + "Bow", + "Ambush-wise" + ] + ], + "traits": [ 1, - "m" + "Desperate" + ], + "key_leads": [ + "Field Setting", + "Below Setting", + "Society Subsetting" + ] + }, + "Corsair": { + "time": 6, + "res": 15, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Field", + "Below", + "Society" ], - [ + "skills": [ + [ + 8, + "Rigging", + "Knots", + "Navigation", + "Mending", + "Appropriate Weapons", + "Intimidation", + "Ship-wise", + "Bay-wise" + ] + ], + "traits": [ 1, - "p" - ] - ], - "skills": [ - [ - 8, - "Astrology", - "Ugly Truth", - "Read", - "Write", - "Sorcery", - "Spirit Binding" - ] - ], - "traits": [ - 2, - "Albino", - "Feared", - "Gifted", - "Misunderstood" - ], - "note": "Choose one of Sorcery or Summoning, not both." - } - }, - "Society Subsetting": { - "Initiate": { - "time": 3, - "res": 2, - "leads": [ - "Exile" - ], - "skills": [ - [ - 3, - "Doctrine", - "Society-wise" - ] - ], - "traits": [ - 2, - "Broken Spirit" - ], - "key_leads": [ - "Exile Subsetting" - ] + "Ruthless", + "Sea Legs" + ], + "key_leads": [ + "Field Setting", + "Below Setting", + "Society Subsetting" + ] + }, + "Bandit King": { + "time": 7, + "res": 15, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Field", + "Below", + "Society" + ], + "skills": [ + [ + 6, + "Intimidation", + "Command", + "Sword", + "Bandit-wise", + "Caravan-wise" + ] + ], + "traits": [ + 2, + "Scheming", + "Daring" + ], + "requires": "Bushwhacker, Sheriff, or Bruiser", + "requires_expr": [ + "bushwhacker", + "sheriff", + "bruiser" + ], + "key_leads": [ + "Field Setting", + "Below Setting", + "Society Subsetting" + ] + }, + "Albino": { + "time": 10, + "res": 25, + "stat": [ + [ + 1, + "m" + ], + [ + 1, + "p" + ] + ], + "skills": [ + [ + 8, + "Astrology", + "Ugly Truth", + "Read", + "Write", + "Sorcery", + "Spirit Binding" + ] + ], + "traits": [ + 2, + "Albino", + "Feared", + "Gifted", + "Misunderstood" + ], + "note": "Choose one of Sorcery or Summoning, not both." + } }, - "Cultist": { - "time": 4, - "res": 4, - "stat": [ - [ + "Society Subsetting": { + "Initiate": { + "time": 3, + "res": 2, + "leads": [ + "Exile" + ], + "skills": [ + [ + 3, + "Doctrine", + "Society-wise" + ] + ], + "traits": [ + 2, + "Broken Spirit" + ], + "key_leads": [ + "Exile Subsetting" + ] + }, + "Cultist": { + "time": 4, + "res": 4, + "stat": [ + [ + 1, + "m" + ] + ], + "skills": [ + [ + 5, + "Rhetoric", + "Suasion", + "Cudgel", + "Conversion-wise" + ] + ], + "traits": [ 1, - "m" - ] - ], - "skills": [ - [ - 5, - "Rhetoric", - "Suasion", - "Cudgel", - "Conversion-wise" + "Zealot", + "Defensive" + ], + "requires": "Initiate", + "requires_expr": [ + "initiate" ] - ], - "traits": [ - 1, - "Zealot", - "Defensive" - ], - "requires": "Initiate", - "requires_expr": [ - "initiate" - ] - }, - "Shadow": { - "time": 6, - "res": 6, - "stat": [ - [ + }, + "Shadow": { + "time": 6, + "res": 6, + "stat": [ + [ + 1, + "p" + ] + ], + "skills": [ + [ + 6, + "Stealthy", + "Observation", + "Inconspicuous", + "Climbing", + "Tail-wise" + ] + ], + "traits": [ 1, - "p" - ] - ], - "skills": [ - [ - 6, - "Stealthy", - "Observation", - "Inconspicuous", - "Climbing", - "Tail-wise" - ] - ], - "traits": [ - 1, - "Cautious" - ], - "requires": "Initiate", - "requires_expr": [ - "initiate" - ] - }, - "Arsonist": { - "time": 6, - "res": 6, - "skills": [ - [ - 7, - "Firebuilding", - "Arson", - "Inconspicuous", - "Firebombs", - "Lock Pick", - "Arson-wise" + "Cautious" + ], + "requires": "Initiate", + "requires_expr": [ + "initiate" ] - ], - "traits": [ - 1, - "Pyromaniac" - ], - "requires": "Initiate", - "requires_expr": [ - "initiate" - ] - }, - "Murderer": { - "time": 6, - "res": 7, - "stat": [ - [ + }, + "Arsonist": { + "time": 6, + "res": 6, + "skills": [ + [ + 7, + "Firebuilding", + "Arson", + "Inconspicuous", + "Firebombs", + "Lock Pick", + "Arson-wise" + ] + ], + "traits": [ 1, - "p" - ] - ], - "skills": [ - [ - 8, - "Knives", - "Stealthy", - "Intimidation", - "Inconspicuous", - "Garrote", - "Anatomy", - "Crossbow", - "Murder-wise" - ] - ], - "traits": [ - 1, - "Murderous", - "Cold-hearted", - "Single-minded" - ], - "requires": "Initiate", - "requires_expr": [ - "initiate" - ] - }, - "Willard": { - "time": 5, - "res": 5, - "skills": [ - [ - 5, - "Animal Husbandry", - "Inconspicuous", - "Command", - "Ratiquette" + "Pyromaniac" + ], + "requires": "Initiate", + "requires_expr": [ + "initiate" ] - ], - "traits": [ - 2, - "Rat-squeak", - "Bitter", - "Weird" - ], - "requires": "Initiate", - "requires_expr": [ - "initiate" - ] - }, - "Perverter": { - "time": 8, - "res": 10, - "stat": [ - [ + }, + "Murderer": { + "time": 6, + "res": 7, + "stat": [ + [ + 1, + "p" + ] + ], + "skills": [ + [ + 8, + "Knives", + "Stealthy", + "Intimidation", + "Inconspicuous", + "Garrote", + "Anatomy", + "Crossbow", + "Murder-wise" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Field", - "Below", - "Exile" - ], - "skills": [ - [ - 6, - "Disguise", - "Preaching", - "Inconspicuous", - "Falsehood", - "Dupe-wise" + "Murderous", + "Cold-hearted", + "Single-minded" + ], + "requires": "Initiate", + "requires_expr": [ + "initiate" ] - ], - "traits": [ - 1, - "Scheming" - ], - "requires": "Cultist or Missionary", - "requires_expr": [ - "cultist", - "missionary" - ], - "key_leads": [ - "Field Setting", - "Below Setting", - "Exile Subsetting" - ] - }, - "Poisoner": { - "time": 6, - "res": 7, - "skills": [ - [ - 6, - "Disguise", - "Preaching", - "Inconspicuous", - "Falsehood", - "Dupe-wise" + }, + "Willard": { + "time": 5, + "res": 5, + "skills": [ + [ + 5, + "Animal Husbandry", + "Inconspicuous", + "Command", + "Ratiquette" + ] + ], + "traits": [ + 2, + "Rat-squeak", + "Bitter", + "Weird" + ], + "requires": "Initiate", + "requires_expr": [ + "initiate" ] - ], - "traits": [ - 1, - "Sadist", - "Nauseous" - ], - "requires": "Initiate", - "requires_expr": [ - "initiate" - ] - }, - "Guardian": { - "time": 6, - "res": 9, - "stat": [ - [ + }, + "Perverter": { + "time": 8, + "res": 10, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Field", + "Below", + "Exile" + ], + "skills": [ + [ + 6, + "Disguise", + "Preaching", + "Inconspicuous", + "Falsehood", + "Dupe-wise" + ] + ], + "traits": [ 1, - "p" - ] - ], - "skills": [ - [ - 8, - "Weapon Of Choice", - "Brawling", - "Armor Training", - "Shield Training", - "Intimidation" - ] - ], - "traits": [ - 2, - "Merciless", - "Loyal" - ], - "requires": "Initiate", - "requires_expr": [ - "initiate" - ] - }, - "Preacher": { - "time": 8, - "res": 15, - "stat": [ - [ + "Scheming" + ], + "requires": "Cultist or Missionary", + "requires_expr": [ + "cultist", + "missionary" + ], + "key_leads": [ + "Field Setting", + "Below Setting", + "Exile Subsetting" + ] + }, + "Poisoner": { + "time": 6, + "res": 7, + "skills": [ + [ + 6, + "Disguise", + "Preaching", + "Inconspicuous", + "Falsehood", + "Dupe-wise" + ] + ], + "traits": [ 1, - "m" - ] - ], - "skills": [ - [ - 6, - "Preaching", - "Conspicuous", - "Symbology", - "Obscure History" - ] - ], - "traits": [ - 2, - "Obsessed", - "Righteous" - ], - "requires": "Requires Initiate and either Brother/Sister or Cultist", - "requires_expr": [ - "+and", - [ + "Sadist", + "Nauseous" + ], + "requires": "Initiate", + "requires_expr": [ "initiate" + ] + }, + "Guardian": { + "time": 6, + "res": 9, + "stat": [ + [ + 1, + "p" + ] + ], + "skills": [ + [ + 8, + "Weapon Of Choice", + "Brawling", + "Armor Training", + "Shield Training", + "Intimidation" + ] + ], + "traits": [ + 2, + "Merciless", + "Loyal" ], - [ - "brother/sister", - "cultist" + "requires": "Initiate", + "requires_expr": [ + "initiate" ] - ] - }, - "Visionary": { - "time": 10, - "res": 30, - "stat": [ - [ - 1, - "m" + }, + "Preacher": { + "time": 8, + "res": 15, + "stat": [ + [ + 1, + "m" + ] + ], + "skills": [ + [ + 6, + "Preaching", + "Conspicuous", + "Symbology", + "Obscure History" + ] + ], + "traits": [ + 2, + "Obsessed", + "Righteous" + ], + "requires": "Requires Initiate and either Brother/Sister or Cultist", + "requires_expr": [ + "+and", + [ + "initiate" + ], + [ + "brother/sister", + "cultist" + ] ] - ], - "leads": [ - "Exile", - "Below" - ], - "skills": [ - [ - 13, - "Command", - "Astrology", - "Research", - "Interrogation", - "Torture", - "Observation", - "Poetry", - "Cult-wise", - "Inner Workings-wise", - "Undermining-wise" + }, + "Visionary": { + "time": 10, + "res": 30, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Exile", + "Below" + ], + "skills": [ + [ + 13, + "Command", + "Astrology", + "Research", + "Interrogation", + "Torture", + "Observation", + "Poetry", + "Cult-wise", + "Inner Workings-wise", + "Undermining-wise" + ] + ], + "traits": [ + 4, + "Megalomaniac", + "Imperious Demeanor", + "Visionary Faith", + "Dreamer" + ], + "requires": "Preacher", + "requires_expr": [ + "preacher" + ], + "key_leads": [ + "Exile Subsetting", + "Below Setting" ] - ], - "traits": [ - 4, - "Megalomaniac", - "Imperious Demeanor", - "Visionary Faith", - "Dreamer" - ], - "requires": "Preacher", - "requires_expr": [ - "preacher" - ], - "key_leads": [ - "Exile Subsetting", - "Below Setting" - ] + } } } } diff --git a/src/data/gold/lifepaths/wolf.json b/src/data/gold/lifepaths/wolf.json index c98a64b..6e462b8 100644 --- a/src/data/gold/lifepaths/wolf.json +++ b/src/data/gold/lifepaths/wolf.json @@ -1,951 +1,954 @@ { - "Wild Pack Setting": { - "Born To The Pack": { - "time": 1, - "res": 0, - "leads": [ - "Captive" - ], - "skills": [ - [ - 2, - "Howling" + "stock": "wolf", + "settings": { + "Wild Pack Setting": { + "Born To The Pack": { + "time": 1, + "res": 0, + "leads": [ + "Captive" ], - [ - 2, - "General" - ] - ], - "traits": [ - 2 - ], - "key_leads": [ - "Captive Subsetting" - ] - }, - "Yearling": { - "time": 1, - "res": 3, - "stat": [ - [ + "skills": [ + [ + 2, + "Howling" + ], + [ + 2, + "General" + ] + ], + "traits": [ + 2 + ], + "key_leads": [ + "Captive Subsetting" + ] + }, + "Yearling": { + "time": 1, + "res": 3, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Captive", + "Outcast" + ], + "skills": [ + [ + 8, + "Pack Etiquette", + "Stealthy", + "Wolfish Hunting", + "Tracking", + "Foraging", + "Brawling" + ] + ], + "traits": [ + 1 + ], + "requires": "Wolves taking this lifepath must be 1 year old.", + "requires_expr": [ + "+and", + [ + "+age_less_than", + 1.5 + ], + [ + "born to the pack", + "last wolf" + ] + ], + "key_leads": [ + "Captive Subsetting", + "Outcast Subsetting" + ] + }, + "Hunter": { + "time": 1, + "res": 3, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Captive", + "Outcast" + ], + "skills": [ + [ + 7, + "Wolfish Hunting", + "Hoof-wise", + "Intimidation", + "Brawling", + "Begging", + "Scent-wise" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Captive", - "Outcast" - ], - "skills": [ - [ - 8, - "Pack Etiquette", - "Stealthy", - "Wolfish Hunting", - "Tracking", - "Foraging", - "Brawling" - ] - ], - "traits": [ - 1 - ], - "requires": "Wolves taking this lifepath must be 1 year old.", - "requires_expr": [ - "+and", - [ - "+age_less_than", - 1.5 - ], - [ + "Submissive" + ], + "requires_expr": [ "born to the pack", "last wolf" - ] - ], - "key_leads": [ - "Captive Subsetting", - "Outcast Subsetting" - ] - }, - "Hunter": { - "time": 1, - "res": 3, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Captive", - "Outcast" - ], - "skills": [ - [ - 7, - "Wolfish Hunting", - "Hoof-wise", - "Intimidation", - "Brawling", - "Begging", - "Scent-wise" - ] - ], - "traits": [ - 1, - "Submissive" - ], - "requires_expr": [ - "born to the pack", - "last wolf" - ], - "key_leads": [ - "Captive Subsetting", - "Outcast Subsetting" - ] - }, - "Dominant": { - "time": 1, - "res": 6, - "stat": [ - [ - 1, - "m" ], - [ - 1, - "p" - ] - ], - "leads": [ - "Captive", - "Outcast" - ], - "skills": [ - [ - 5, - "Intimidation", - "Command", - "Nursing", - "Brawling" - ] - ], - "traits": [ - 1, - "Dominant" - ], - "requires": "Yearling, Aunt, Unce, or Last Wolf.", - "note": "Only female dominants of 3 years or older may take the Nursing skill.", - "requires_expr": [ - "yearling", - "aunt", - "uncle", - "last wolf" - ], - "key_leads": [ - "Captive Subsetting", - "Outcast Subsetting" - ] - }, - "Aunt": { - "time": 0.5, - "res": 3, - "stat": [ - [ + "key_leads": [ + "Captive Subsetting", + "Outcast Subsetting" + ] + }, + "Dominant": { + "time": 1, + "res": 6, + "stat": [ + [ + 1, + "m" + ], + [ + 1, + "p" + ] + ], + "leads": [ + "Captive", + "Outcast" + ], + "skills": [ + [ + 5, + "Intimidation", + "Command", + "Nursing", + "Brawling" + ] + ], + "traits": [ 1, - "pm" - ] - ], - "leads": [ - "Captive", - "Outcast" - ], - "skills": [ - [ - 4, - "Nursing", - "Pup-wise", - "Scavenging", - "Begging" - ] - ], - "traits": [ - 1, - "Submissive" - ], - "requires_expr": [ - "+and", - [ - "born to the pack", + "Dominant" + ], + "requires": "Yearling, Aunt, Unce, or Last Wolf.", + "note": "Only female dominants of 3 years or older may take the Nursing skill.", + "requires_expr": [ + "yearling", + "aunt", + "uncle", "last wolf" ], - [ - "+sex", - "female" - ] - ], - "key_leads": [ - "Captive Subsetting", - "Outcast Subsetting" - ] - }, - "Uncle": { - "time": 0.5, - "res": 3, - "stat": [ - [ + "key_leads": [ + "Captive Subsetting", + "Outcast Subsetting" + ] + }, + "Aunt": { + "time": 0.5, + "res": 3, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Captive", + "Outcast" + ], + "skills": [ + [ + 4, + "Nursing", + "Pup-wise", + "Scavenging", + "Begging" + ] + ], + "traits": [ 1, - "pm" - ] - ], - "leads": [ - "Captive", - "Outcast" - ], - "skills": [ - [ - 4, - "Rearing", - "Pup-wise", - "Scavenging", - "Begging" - ] - ], - "traits": [ - 1, - "Submissive" - ], - "requires_expr": [ - "+and", - [ - "born to the pack", - "last wolf" + "Submissive" ], - [ - "+sex", - "male" - ] - ], - "key_leads": [ - "Captive Subsetting", - "Outcast Subsetting" - ] - }, - "Elder": { - "time": 2, - "res": 3, - "stat": [ - [ + "requires_expr": [ + "+and", + [ + "born to the pack", + "last wolf" + ], + [ + "+sex", + "female" + ] + ], + "key_leads": [ + "Captive Subsetting", + "Outcast Subsetting" + ] + }, + "Uncle": { + "time": 0.5, + "res": 3, + "stat": [ + [ + 1, + "pm" + ] + ], + "leads": [ + "Captive", + "Outcast" + ], + "skills": [ + [ + 4, + "Rearing", + "Pup-wise", + "Scavenging", + "Begging" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Outcast" - ], - "skills": [ - [ - 7, - "Begging", - "Man-wise", - "Orc-wise", - "Elf-wise", - "Forest-wise" - ] - ], - "traits": [ - 1, - "Submissive" - ], - "requires_expr": [ - "+and", - [ - "born to the pack", - "last wolf" + "Submissive" ], - [ - "+age_greater_than", - 8.5 - ] - ], - "key_leads": [ - "Outcast Subsetting" - ] - }, - "Last Wolf": { - "time": 0.5, - "res": 2, - "stat": [ - [ + "requires_expr": [ + "+and", + [ + "born to the pack", + "last wolf" + ], + [ + "+sex", + "male" + ] + ], + "key_leads": [ + "Captive Subsetting", + "Outcast Subsetting" + ] + }, + "Elder": { + "time": 2, + "res": 3, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Outcast" + ], + "skills": [ + [ + 7, + "Begging", + "Man-wise", + "Orc-wise", + "Elf-wise", + "Forest-wise" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Captive", - "Outcast" - ], - "skills": [ - [ - 2, - "Begging", - "Pack Etiquette" - ] - ], - "traits": [ - 2, - "Submissive", - "Stained" - ], - "key_leads": [ - "Captive Subsetting", - "Outcast Subsetting" - ] - } - }, - "Slave To The Legion Setting": { - "Born To The Legion": { - "time": 1, - "res": 0, - "leads": [ - "Captive" - ], - "skills": [ - [ - 2, - "Howling" + "Submissive" ], - [ + "requires_expr": [ + "+and", + [ + "born to the pack", + "last wolf" + ], + [ + "+age_greater_than", + 8.5 + ] + ], + "key_leads": [ + "Outcast Subsetting" + ] + }, + "Last Wolf": { + "time": 0.5, + "res": 2, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Captive", + "Outcast" + ], + "skills": [ + [ + 2, + "Begging", + "Pack Etiquette" + ] + ], + "traits": [ 2, - "General" - ] - ], - "traits": [ - 1, - "Vile Language", - "Demented" - ], - "key_leads": [ - "Captive Subsetting" - ] - }, - "Caged And Beaten": { - "time": 0.5, - "res": 0, - "leads": [ - "Captive" - ], - "skills": [ - [ - 3, - "Pack Etiquette", - "Begging", - "Cage-wise" - ] - ], - "traits": [ - 2, - "Submissive", - "Tasting The Lash", - "Deranged" - ], - "key_leads": [ - "Captive Subsetting" - ] - }, - "Shadow-chaser": { - "time": 1, - "res": 2, - "stat": [ - [ - 1, - "p" - ] - ], - "skills": [ - [ - 8, - "Stealthy", - "Tracking", - "Trail-wise", - "Orc-wise", - "Scavenging", - "Intimidation", - "Rider Training", - "Begging" - ] - ], - "traits": [ - 1, - "Submissive", - "Tasting The Lash" - ] - }, - "Wayward": { - "time": 0.5, - "res": 2, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Outcast" - ], - "skills": [ - [ - 6, - "Wolfish Hunting", - "Foraging", - "Brawling", - "Stealthy", - "Howling", - "Escape Artist" - ] - ], - "traits": [ - 1 - ], - "requires": "Shadow-Chaser", - "requires_expr": [ - "shadow-chaser" - ], - "key_leads": [ - "Outcast Subsetting" - ] - }, - "Bitch": { - "time": 1, - "res": 4, - "skills": [ - [ - 5, - "Nursing", - "Rearing", - "Pup-wise", - "Scavenging", - "Begging" - ] - ], - "traits": [ - 1, - "Submissive" - ], - "requires": "Must be at least 3 years old.", - "requires_expr": [ - "+and", - [ - "+age_greater_than", - 2.5 - ], - [ - "+sex", - "female" - ] - ] - }, - "Howling Beast": { - "time": 1, - "res": 1, - "stat": [ - [ - 1, - "p" - ] - ], - "skills": [ - [ - 7, - "Rider Training", - "Mounted Combat", - "Savage Attack", - "Intimidation" - ] - ], - "traits": [ - 1, - "Howl Of Doom" - ], - "requires": "Shadow-Chaser", - "requires_expr": [ - "shadow-chaser" - ] - }, - "Black Destroyer": { - "time": 2, - "res": 2, - "stat": [ - [ - 1, - "m" + "Submissive", + "Stained" ], - [ - 1, - "p" + "key_leads": [ + "Captive Subsetting", + "Outcast Subsetting" ] - ], - "skills": [ - [ - 4, - "Rider Training", - "Mounted Combat", - "Savage Attack" - ] - ], - "traits": [ - 2, - "Intense Hatred", - "Great Cunning", - "Fearless", - "Cold-blooded", - "Brutality", - "Dominant", - "Submissive" - ], - "requires": "Howling Beast or Ebon Tyrant", - "requires_expr": [ - "howling beast", - "ebon tyrant" - ] + } }, - "Ebon Tyrant": { - "time": 2, - "res": 6, - "stat": [ - [ - 1, - "m" + "Slave To The Legion Setting": { + "Born To The Legion": { + "time": 1, + "res": 0, + "leads": [ + "Captive" ], - [ - 1, - "p" - ] - ], - "skills": [ - [ - 5, - "Conspicuous", - "Command", - "Skirmish Tactics", - "Strategy" - ] - ], - "traits": [ - 2, - "Dominant" - ], - "requires": "Shadow-Chaser or Black Destroyer", - "requires_expr": [ - "shadow-chaser", - "black destroyer" - ] - }, - "Dark Friend": { - "time": 3, - "res": 4, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Outcast" - ], - "skills": [ - [ - 5, - "Stealthy", - "Tracking", - "Brawling", - "Rituals-wise", - "Poisons-wise" - ] - ], - "traits": [ - 1, - "Obedient", - "Loyal", - "Fearless" - ], - "requires": "Caged and Beaten", - "requires_expr": [ - "caged and beaten" - ], - "key_leads": [ - "Outcast Subsetting" - ] - } - }, - "Outcast Subsetting": { - "Lone Wolf": { - "time": 1, - "res": 3, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Wild Pack", - "Captive", - "Spirit Hunter", - "Ghost Of The Deeping Wood" - ], - "skills": [ - [ - 4, - "Territory-wise", - "Pack-wise", - "Scavenging" - ] - ], - "traits": [ - 1, - "Wanderlust" - ], - "requires": "Yearling, Last Wolf, Captured, Wandering Lost, Ancient Journeyer, Wayward, or Dark Friend.", - "requires_expr": [ - "yearling", - "last wolf", - "captured and broken", - "wandering lost", - "ancient journeyer", - "wayward", - "dark friend" - ], - "key_leads": [ - "Wild Pack Setting", - "Captive Subsetting", - "Spirit Hunter Subsetting", - "Ghost Of The Deeping Wood Subsetting" - ] - }, - "Scavenger": { - "time": 1, - "res": 3, - "leads": [ - "Legion", - "Wild Pack", - "Captive" - ], - "skills": [ - [ - 5, - "Scent-wise", - "Village-wise", - "Dog-wise", - "Scavenging" - ] - ], - "traits": [ - 1, - "Wolfish Scavenger" - ], - "requires": "Lone Wolf, Captured and Broken, or Captured and Beaten", - "requires_expr": [ - "lone wolf", - "captured and broken", - "captured and broken" - ], - "key_leads": [ - "Slave To The Legion Setting", - "Wild Pack Setting", - "Captive Subsetting" - ] - } - }, - "Captive Subsetting": { - "Captured And Broken": { - "time": 0.5, - "res": 3, - "leads": [ - "Legion", - "Outcast" - ], - "skills": [ - [ - 3, - "Begging", - "Cage-wise", - "Man-wise" - ] - ], - "traits": [ - 3, - "Broken Wolf", - "Submissive" - ], - "key_leads": [ - "Slave To The Legion Setting", - "Outcast Subsetting" - ] - } - }, - "Spirit Hunter Subsetting": { - "Spirit-chaser": { - "time": 1, - "res": 3, - "stat": [ - [ - 1, - "p" - ] - ], - "leads": [ - "Outcast", - "Captive" - ], - "skills": [ - [ - 5, - "Primal Bark", - "Wolfish Hunting", - "The Way Of The First Hunter" - ] - ], - "traits": [ - 1 - ], - "requires": "Lone Wolf and the Chosen Wolf trait", - "requires_expr": [ - "+and", - [ - "lone wolf" - ], - [ - "+trait", - "chosen wolf" - ] - ], - "key_leads": [ - "Outcast Subsetting", - "Captive Subsetting" - ] - }, - "Spirit-howler": { - "time": 1, - "res": 4, - "stat": [ - [ + "skills": [ + [ + 2, + "Howling" + ], + [ + 2, + "General" + ] + ], + "traits": [ 1, - "pm" - ] - ], - "skills": [ - [ - 3, - "Ancestral Jaw" - ] - ], - "traits": [ - 1 - ], - "requires": "Spirit-Chaser", - "requires_expr": [ - "spirit-chaser" - ] - }, - "Spirit-hunter": { - "time": 2, - "res": 6, - "stat": [ - [ + "Vile Language", + "Demented" + ], + "key_leads": [ + "Captive Subsetting" + ] + }, + "Caged And Beaten": { + "time": 0.5, + "res": 0, + "leads": [ + "Captive" + ], + "skills": [ + [ + 3, + "Pack Etiquette", + "Begging", + "Cage-wise" + ] + ], + "traits": [ + 2, + "Submissive", + "Tasting The Lash", + "Deranged" + ], + "key_leads": [ + "Captive Subsetting" + ] + }, + "Shadow-chaser": { + "time": 1, + "res": 2, + "stat": [ + [ + 1, + "p" + ] + ], + "skills": [ + [ + 8, + "Stealthy", + "Tracking", + "Trail-wise", + "Orc-wise", + "Scavenging", + "Intimidation", + "Rider Training", + "Begging" + ] + ], + "traits": [ 1, - "m" + "Submissive", + "Tasting The Lash" + ] + }, + "Wayward": { + "time": 0.5, + "res": 2, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Outcast" + ], + "skills": [ + [ + 6, + "Wolfish Hunting", + "Foraging", + "Brawling", + "Stealthy", + "Howling", + "Escape Artist" + ] + ], + "traits": [ + 1 ], - [ + "requires": "Shadow-Chaser", + "requires_expr": [ + "shadow-chaser" + ], + "key_leads": [ + "Outcast Subsetting" + ] + }, + "Bitch": { + "time": 1, + "res": 4, + "skills": [ + [ + 5, + "Nursing", + "Rearing", + "Pup-wise", + "Scavenging", + "Begging" + ] + ], + "traits": [ 1, - "p" - ] - ], - "leads": [ - "Ghost Of The Deeping Wood" - ], - "skills": [ - [ - 3, - "Grandfather's Song" - ] - ], - "traits": [ - 1, - "Spirit Nose" - ], - "requires": "Spirit-Howler", - "requires_expr": [ - "spirit-howler" - ], - "key_leads": [ - "Ghost Of The Deeping Wood Subsetting" - ] - } - }, - "Ghost Of The Deeping Wood Subsetting": { - "Wandering Lost": { - "time": 0.5, - "res": 0, - "stat": [ - [ + "Submissive" + ], + "requires": "Must be at least 3 years old.", + "requires_expr": [ + "+and", + [ + "+age_greater_than", + 2.5 + ], + [ + "+sex", + "female" + ] + ] + }, + "Howling Beast": { + "time": 1, + "res": 1, + "stat": [ + [ + 1, + "p" + ] + ], + "skills": [ + [ + 7, + "Rider Training", + "Mounted Combat", + "Savage Attack", + "Intimidation" + ] + ], + "traits": [ 1, - "m" - ] - ], - "leads": [ - "Spirit Hunter", - "Outcast" - ], - "skills": [ - [ + "Howl Of Doom" + ], + "requires": "Shadow-Chaser", + "requires_expr": [ + "shadow-chaser" + ] + }, + "Black Destroyer": { + "time": 2, + "res": 2, + "stat": [ + [ + 1, + "m" + ], + [ + 1, + "p" + ] + ], + "skills": [ + [ + 4, + "Rider Training", + "Mounted Combat", + "Savage Attack" + ] + ], + "traits": [ 2, - "Nature Of All Things" - ] - ], - "traits": [ - 1 - ], - "requires": "Last Wolf and Lone Wolf", - "requires_expr": [ - "+and", - [ - "last wolf" + "Intense Hatred", + "Great Cunning", + "Fearless", + "Cold-blooded", + "Brutality", + "Dominant", + "Submissive" + ], + "requires": "Howling Beast or Ebon Tyrant", + "requires_expr": [ + "howling beast", + "ebon tyrant" + ] + }, + "Ebon Tyrant": { + "time": 2, + "res": 6, + "stat": [ + [ + 1, + "m" + ], + [ + 1, + "p" + ] + ], + "skills": [ + [ + 5, + "Conspicuous", + "Command", + "Skirmish Tactics", + "Strategy" + ] + ], + "traits": [ + 2, + "Dominant" + ], + "requires": "Shadow-Chaser or Black Destroyer", + "requires_expr": [ + "shadow-chaser", + "black destroyer" + ] + }, + "Dark Friend": { + "time": 3, + "res": 4, + "stat": [ + [ + 1, + "m" + ] ], - [ - "lone wolf" + "leads": [ + "Outcast" + ], + "skills": [ + [ + 5, + "Stealthy", + "Tracking", + "Brawling", + "Rituals-wise", + "Poisons-wise" + ] + ], + "traits": [ + 1, + "Obedient", + "Loyal", + "Fearless" + ], + "requires": "Caged and Beaten", + "requires_expr": [ + "caged and beaten" + ], + "key_leads": [ + "Outcast Subsetting" ] - ], - "key_leads": [ - "Spirit Hunter Subsetting", - "Outcast Subsetting" - ] + } }, - "Dire Haunt": { - "time": 1, - "res": 20, - "stat": [ - [ + "Outcast Subsetting": { + "Lone Wolf": { + "time": 1, + "res": 3, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Wild Pack", + "Captive", + "Spirit Hunter", + "Ghost Of The Deeping Wood" + ], + "skills": [ + [ + 4, + "Territory-wise", + "Pack-wise", + "Scavenging" + ] + ], + "traits": [ 1, - "m" + "Wanderlust" + ], + "requires": "Yearling, Last Wolf, Captured, Wandering Lost, Ancient Journeyer, Wayward, or Dark Friend.", + "requires_expr": [ + "yearling", + "last wolf", + "captured and broken", + "wandering lost", + "ancient journeyer", + "wayward", + "dark friend" + ], + "key_leads": [ + "Wild Pack Setting", + "Captive Subsetting", + "Spirit Hunter Subsetting", + "Ghost Of The Deeping Wood Subsetting" + ] + }, + "Scavenger": { + "time": 1, + "res": 3, + "leads": [ + "Legion", + "Wild Pack", + "Captive" ], - [ + "skills": [ + [ + 5, + "Scent-wise", + "Village-wise", + "Dog-wise", + "Scavenging" + ] + ], + "traits": [ 1, - "p" - ] - ], - "skills": [ - [ - 3, - "Tongue Of The Ancient One" + "Wolfish Scavenger" + ], + "requires": "Lone Wolf, Captured and Broken, or Captured and Beaten", + "requires_expr": [ + "lone wolf", + "captured and broken", + "captured and broken" + ], + "key_leads": [ + "Slave To The Legion Setting", + "Wild Pack Setting", + "Captive Subsetting" ] - ], - "traits": [ - 2 - ], - "requires": "Wandering Lost", - "requires_expr": [ - "wandering lost" - ] + } }, - "Ancient Journeyer": { - "time": 0.5, - "res": 0, - "stat": [ - [ - 1, - "m" - ] - ], - "leads": [ - "Spirit Hunter", - "Outcast" - ], - "skills": [ - [ + "Captive Subsetting": { + "Captured And Broken": { + "time": 0.5, + "res": 3, + "leads": [ + "Legion", + "Outcast" + ], + "skills": [ + [ + 3, + "Begging", + "Cage-wise", + "Man-wise" + ] + ], + "traits": [ 3, - "Ancient Ways" - ] - ], - "traits": [ - 1 - ], - "requires": "Last Wolf and Lone Wolf", - "requires_expr": [ - "+and", - [ - "last wolf" + "Broken Wolf", + "Submissive" ], - [ - "lone wolf" + "key_leads": [ + "Slave To The Legion Setting", + "Outcast Subsetting" ] - ], - "key_leads": [ - "Spirit Hunter Subsetting", - "Outcast Subsetting" - ] + } }, - "Fell Ancient": { - "time": 2, - "res": 15, - "stat": [ - [ - 1, - "m" + "Spirit Hunter Subsetting": { + "Spirit-chaser": { + "time": 1, + "res": 3, + "stat": [ + [ + 1, + "p" + ] + ], + "leads": [ + "Outcast", + "Captive" + ], + "skills": [ + [ + 5, + "Primal Bark", + "Wolfish Hunting", + "The Way Of The First Hunter" + ] + ], + "traits": [ + 1 + ], + "requires": "Lone Wolf and the Chosen Wolf trait", + "requires_expr": [ + "+and", + [ + "lone wolf" + ], + [ + "+trait", + "chosen wolf" + ] + ], + "key_leads": [ + "Outcast Subsetting", + "Captive Subsetting" + ] + }, + "Spirit-howler": { + "time": 1, + "res": 4, + "stat": [ + [ + 1, + "pm" + ] + ], + "skills": [ + [ + 3, + "Ancestral Jaw" + ] + ], + "traits": [ + 1 + ], + "requires": "Spirit-Chaser", + "requires_expr": [ + "spirit-chaser" + ] + }, + "Spirit-hunter": { + "time": 2, + "res": 6, + "stat": [ + [ + 1, + "m" + ], + [ + 1, + "p" + ] + ], + "leads": [ + "Ghost Of The Deeping Wood" + ], + "skills": [ + [ + 3, + "Grandfather's Song" + ] ], - [ + "traits": [ 1, - "p" - ] - ], - "skills": [ - [ - 3, - "Ancient Ways" + "Spirit Nose" + ], + "requires": "Spirit-Howler", + "requires_expr": [ + "spirit-howler" + ], + "key_leads": [ + "Ghost Of The Deeping Wood Subsetting" ] - ], - "traits": [ - 2, - "Reclusive", - "Calmly Paranoid", - "Odor Of Spirits" - ], - "requires": "Ancient Journeyer", - "requires_expr": [ - "ancient journeyer" - ] + } }, - "Ghost Of The Wood": { - "time": 2, - "res": 10, - "stat": [ - [ + "Ghost Of The Deeping Wood Subsetting": { + "Wandering Lost": { + "time": 0.5, + "res": 0, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Spirit Hunter", + "Outcast" + ], + "skills": [ + [ + 2, + "Nature Of All Things" + ] + ], + "traits": [ + 1 + ], + "requires": "Last Wolf and Lone Wolf", + "requires_expr": [ + "+and", + [ + "last wolf" + ], + [ + "lone wolf" + ] + ], + "key_leads": [ + "Spirit Hunter Subsetting", + "Outcast Subsetting" + ] + }, + "Dire Haunt": { + "time": 1, + "res": 20, + "stat": [ + [ + 1, + "m" + ], + [ + 1, + "p" + ] + ], + "skills": [ + [ + 3, + "Tongue Of The Ancient One" + ] + ], + "traits": [ + 2 + ], + "requires": "Wandering Lost", + "requires_expr": [ + "wandering lost" + ] + }, + "Ancient Journeyer": { + "time": 0.5, + "res": 0, + "stat": [ + [ + 1, + "m" + ] + ], + "leads": [ + "Spirit Hunter", + "Outcast" + ], + "skills": [ + [ + 3, + "Ancient Ways" + ] + ], + "traits": [ + 1 + ], + "requires": "Last Wolf and Lone Wolf", + "requires_expr": [ + "+and", + [ + "last wolf" + ], + [ + "lone wolf" + ] + ], + "key_leads": [ + "Spirit Hunter Subsetting", + "Outcast Subsetting" + ] + }, + "Fell Ancient": { + "time": 2, + "res": 15, + "stat": [ + [ + 1, + "m" + ], + [ + 1, + "p" + ] + ], + "skills": [ + [ + 3, + "Ancient Ways" + ] + ], + "traits": [ 2, - "m" - ] - ], - "skills": [ - [ - 6, - "Wolf-wise", - "Spirit-hunter-wise", - "Legion-wise", - "Path-wise", - "River-wise", - "Pack-wise" - ], - [ - 1, - "General" + "Reclusive", + "Calmly Paranoid", + "Odor Of Spirits" + ], + "requires": "Ancient Journeyer", + "requires_expr": [ + "ancient journeyer" + ] + }, + "Ghost Of The Wood": { + "time": 2, + "res": 10, + "stat": [ + [ + 2, + "m" + ] + ], + "skills": [ + [ + 6, + "Wolf-wise", + "Spirit-hunter-wise", + "Legion-wise", + "Path-wise", + "River-wise", + "Pack-wise" + ], + [ + 1, + "General" + ] + ], + "traits": [ + 2, + "Preternaturally Calm", + "Watchful", + "Piercing Gaze", + "Stink Of The Ancient" ] - ], - "traits": [ - 2, - "Preternaturally Calm", - "Watchful", - "Piercing Gaze", - "Stink Of The Ancient" - ] + } } } } diff --git a/src/lib/data/custom.rb b/src/lib/data/custom.rb index 0a2062b..7878dd6 100644 --- a/src/lib/data/custom.rb +++ b/src/lib/data/custom.rb @@ -3,23 +3,23 @@ require 'json' module Charred module Custom def load_custom(data) - Dir.glob("data/custom/**/*") { |file| - if File.file?(file) - case File.extname(file) - when "skills" - verbose_merge data[:skills], json_get(file) - when "traits" - verbose_merge data[:traits], json_get(file) - when "stock" - stock = Stock.new(json_get(file)) - data[:stocks][stock.key] = stock # This overwrites existing data... - when "lifepaths" - # - when "resources" - # - end - end - } + #Dir.glob("data/custom/**/*") { |file| + # if File.file?(file) + # case File.extname(file) + # when "skills" + # verbose_merge data[:skills], json_get(file) + # when "traits" + # verbose_merge data[:traits], json_get(file) + # when "stock" + # stock = Stock.new(json_get(file)) + # data[:stocks][stock.key] = stock # This overwrites existing data... + # when "lifepaths" + # # + # when "resources" + # # + # end + # end + #} # Dir.glob("data/custom/*/") { |dir| # stock_name = File.basename(dir) diff --git a/src/lib/data/dark_elf.rb b/src/lib/data/dark_elf.rb index 27fef1f..75f87c4 100644 --- a/src/lib/data/dark_elf.rb +++ b/src/lib/data/dark_elf.rb @@ -12,7 +12,8 @@ module Charred verbose_merge data[:traits], traits file = File.read('data/dark_elf/lifepaths.json') - lifepaths = JSON.parse(file) + contents = JSON.parse(file) + lifepaths = contents["settings"] file = File.read("data/dark_elf/resources.json") resources = JSON.parse(file) @@ -32,4 +33,4 @@ module Charred data[:lifepaths]['elf'] = elf end end -end \ No newline at end of file +end diff --git a/src/lib/data/gold.rb b/src/lib/data/gold.rb index 4c3bb07..aaca09b 100644 --- a/src/lib/data/gold.rb +++ b/src/lib/data/gold.rb @@ -18,7 +18,8 @@ module Charred gold_stocks.each do |stock| file = File.read("data/gold/lifepaths/#{stock}.json") - lifepaths[stock] = JSON.parse(file) + contents = JSON.parse(file) + lifepaths[stock] = contents["settings"] file = File.read("data/gold/resources/#{stock}.json") resources[stock] = JSON.parse(file) diff --git a/src/lib/data/troll.rb b/src/lib/data/troll.rb index 1f9b834..8f95701 100644 --- a/src/lib/data/troll.rb +++ b/src/lib/data/troll.rb @@ -13,7 +13,8 @@ module Charred verbose_merge data[:traits], traits file = File.read('data/troll/lifepaths.json') - lifepaths = JSON.parse(file) + contents = JSON.parse(file) + lifepaths = contents["settings"] data[:lifepaths]['troll'] = lifepaths file = File.read("data/troll/resources.json") diff --git a/src/lib/data/wizard.rb b/src/lib/data/wizard.rb index 1550898..b67e0df 100644 --- a/src/lib/data/wizard.rb +++ b/src/lib/data/wizard.rb @@ -4,7 +4,8 @@ module Charred module Wizard def load_wizard(data) file = File.read('data/wizard/lifepaths.json') - wizard_data = JSON.parse(file) + contents = JSON.parse(file) + wizard_data = contents["settings"] file = File.read('data/wizard/skills.json') wizard_skills = JSON.parse(file) @@ -116,4 +117,4 @@ module Charred data end end -end \ No newline at end of file +end -- 2.37.3 From 849b957a7b7eeb292b03c06d2960b2ff3a29ffdc Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Wed, 25 Jan 2023 20:13:19 -0600 Subject: [PATCH 26/45] Wrap (and update loading of) resources --- src/data/dark_elf/resources.json | 231 ++++---- src/data/gold/resources/dwarf.json | 307 +++++----- src/data/gold/resources/elf.json | 355 ++++++------ src/data/gold/resources/man.json | 871 +++++++++++++++-------------- src/data/gold/resources/orc.json | 425 +++++++------- src/data/gold/resources/roden.json | 281 +++++----- src/data/gold/resources/wolf.json | 87 +-- src/data/troll/resources.json | 117 ++-- src/lib/data/dark_elf.rb | 3 +- src/lib/data/gold.rb | 3 +- src/lib/data/troll.rb | 3 +- 11 files changed, 1355 insertions(+), 1328 deletions(-) diff --git a/src/data/dark_elf/resources.json b/src/data/dark_elf/resources.json index 07d2125..288104c 100644 --- a/src/data/dark_elf/resources.json +++ b/src/data/dark_elf/resources.json @@ -1,114 +1,117 @@ -[ - { - "name": "Bitter Poison", - "type": "gear", - "rp": 10 - }, - { - "name": "Spiteful Poison", - "type": "gear", - "rp": 20 - }, - { - "name": "Lock Picks", - "type": "gear", - "rp": 10 - }, - { - "name": "Long Knife", - "type": "gear", - "rp": 5 - }, - { - "name": "Barbed Javelins", - "type": "gear", - "rp": 3 - }, - { - "name": "Garrote", - "type": "gear", - "rp": 3 - }, - { - "name": "Caltrops", - "type": "gear", - "rp": 3 - }, - { - "name": "Tools Of The Trade", - "type": "gear", - "rp": 9 - }, - { - "name": "Cloak Of Darkness", - "type": "gear", - "rp": 30 - }, - { - "name": "Climbing Claws", - "type": "gear", - "rp": 5 - }, - { - "name": "Remote Refuge", - "type": "property", - "resources": [ - { - "name": "Wasteland", - "rp": 20 - }, - { - "name": "Isolated Manor And Moorland", - "rp": 50 - }, - { - "name": "Hidden Fortress", - "rp": 100 - }, - { - "name": "Dark Forest, Cove Or Lonely Mountain", - "rp": 150 - }, - { - "name": "Safe House", - "rp": 25 - } - ] - }, - { - "name": "Morlin Armor", - "type": "gear", - "resources": [ - { - "name": "Light Mail", - "rp": 30 - }, - { - "name": "Heavy Mail", - "rp": 40 - }, - { - "name": "Plated Mail", - "rp": 100 - } - ] - }, - { - "name": "Morlin Weapons", - "type": "gear", - "resources": [ - { - "name": "+1 speed", - "rp": 15 - }, - { - "name": "+1 VA", - "rp": 15 - }, - { - "name": "+1 Power", - "rp": 30 - } - ] - } -] \ No newline at end of file +{ + "stock": "elf", + "resources": [ + { + "name": "Bitter Poison", + "type": "gear", + "rp": 10 + }, + { + "name": "Spiteful Poison", + "type": "gear", + "rp": 20 + }, + { + "name": "Lock Picks", + "type": "gear", + "rp": 10 + }, + { + "name": "Long Knife", + "type": "gear", + "rp": 5 + }, + { + "name": "Barbed Javelins", + "type": "gear", + "rp": 3 + }, + { + "name": "Garrote", + "type": "gear", + "rp": 3 + }, + { + "name": "Caltrops", + "type": "gear", + "rp": 3 + }, + { + "name": "Tools Of The Trade", + "type": "gear", + "rp": 9 + }, + { + "name": "Cloak Of Darkness", + "type": "gear", + "rp": 30 + }, + { + "name": "Climbing Claws", + "type": "gear", + "rp": 5 + }, + { + "name": "Remote Refuge", + "type": "property", + "resources": [ + { + "name": "Wasteland", + "rp": 20 + }, + { + "name": "Isolated Manor And Moorland", + "rp": 50 + }, + { + "name": "Hidden Fortress", + "rp": 100 + }, + { + "name": "Dark Forest, Cove Or Lonely Mountain", + "rp": 150 + }, + { + "name": "Safe House", + "rp": 25 + } + ] + }, + { + "name": "Morlin Armor", + "type": "gear", + "resources": [ + { + "name": "Light Mail", + "rp": 30 + }, + { + "name": "Heavy Mail", + "rp": 40 + }, + { + "name": "Plated Mail", + "rp": 100 + } + ] + }, + { + "name": "Morlin Weapons", + "type": "gear", + "resources": [ + { + "name": "+1 speed", + "rp": 15 + }, + { + "name": "+1 VA", + "rp": 15 + }, + { + "name": "+1 Power", + "rp": 30 + } + ] + } + ] +} diff --git a/src/data/gold/resources/dwarf.json b/src/data/gold/resources/dwarf.json index 83aba51..2dedb85 100644 --- a/src/data/gold/resources/dwarf.json +++ b/src/data/gold/resources/dwarf.json @@ -1,152 +1,155 @@ -[ - { - "name": "Shoddy Arms", - "rp": 5, - "type": "gear" - }, - { - "name": "Dwarven Arms", - "rp": 20, - "type": "gear" - }, - { - "name": "Shoddy Crossbow", - "rp": 6, - "type": "gear" - }, - { - "name": "Dwarven Arbalest", - "rp": 20, - "type": "gear" - }, - { - "name": "Dwarven-made Light Mail", - "rp": 9, - "type": "gear" - }, - { - "name": "Dwarven-made Heavy Mail", - "rp": 10, - "type": "gear" - }, - { - "name": "Dwarven-made Plated Mail", - "rp": 20, - "type": "gear" - }, - { - "name": "Dwarven Mail", - "rp": 100, - "type": "gear" - }, - { - "name": "Forge Mask", - "rp": 40, - "type": "gear" - }, - { - "name": "Dwarven Shield", - "rp": 20, - "type": "gear" - }, - { - "name": "Riding Mount Or Pack Animal", - "rp": 8, - "type": "gear" - }, - { - "name": "Clothes", - "rp": 1, - "type": "gear" - }, - { - "name": "Traveling Gear", - "rp": 1, - "type": "gear" - }, - { - "name": "Sturdy Shoes", - "rp": 1, - "type": "gear" - }, - { - "name": "Finery", - "rp": 5, - "type": "gear" - }, - { - "name": "Chronicles", - "rp": 15, - "type": "gear" - }, - { - "name": "Keg O' Nog", - "rp": 20, - "type": "gear" - }, - { - "name": "Small Dwarven House", - "rp": 10, - "type": "property" - }, - { - "name": "Large Dwarven House", - "rp": 15, - "type": "property" - }, - { - "name": "A Dwarven Hall", - "rp": 30, - "type": "property" - }, - { - "name": "A Graybeard's Hold", - "rp": 40, - "type": "property" - }, - { - "name": "An Engineer's Hold", - "rp": 45, - "type": "property" - }, - { - "name": "A Master Artificer's Hold", - "rp": 60, - "type": "property" - }, - { - "name": "A Warden's Hold", - "rp": 75, - "type": "property" - }, - { - "name": "A High Captain's Hold", - "rp": 90, - "type": "property" - }, - { - "name": "A Prince's Hold", - "rp": 105, - "type": "property" - }, - { - "name": "A Workshop", - "rp": 60, - "type": "property" - }, - { - "name": "Dwarven Tools", - "rp": 10, - "type": "gear" - }, - { - "name": "Shoddy Tools", - "rp": 5, - "type": "gear" - }, - { - "name": "Carts And Baggage", - "rp": 15, - "type": "gear" - } -] \ No newline at end of file +{ + "stock": "dwarf", + "resources": [ + { + "name": "Shoddy Arms", + "rp": 5, + "type": "gear" + }, + { + "name": "Dwarven Arms", + "rp": 20, + "type": "gear" + }, + { + "name": "Shoddy Crossbow", + "rp": 6, + "type": "gear" + }, + { + "name": "Dwarven Arbalest", + "rp": 20, + "type": "gear" + }, + { + "name": "Dwarven-made Light Mail", + "rp": 9, + "type": "gear" + }, + { + "name": "Dwarven-made Heavy Mail", + "rp": 10, + "type": "gear" + }, + { + "name": "Dwarven-made Plated Mail", + "rp": 20, + "type": "gear" + }, + { + "name": "Dwarven Mail", + "rp": 100, + "type": "gear" + }, + { + "name": "Forge Mask", + "rp": 40, + "type": "gear" + }, + { + "name": "Dwarven Shield", + "rp": 20, + "type": "gear" + }, + { + "name": "Riding Mount Or Pack Animal", + "rp": 8, + "type": "gear" + }, + { + "name": "Clothes", + "rp": 1, + "type": "gear" + }, + { + "name": "Traveling Gear", + "rp": 1, + "type": "gear" + }, + { + "name": "Sturdy Shoes", + "rp": 1, + "type": "gear" + }, + { + "name": "Finery", + "rp": 5, + "type": "gear" + }, + { + "name": "Chronicles", + "rp": 15, + "type": "gear" + }, + { + "name": "Keg O' Nog", + "rp": 20, + "type": "gear" + }, + { + "name": "Small Dwarven House", + "rp": 10, + "type": "property" + }, + { + "name": "Large Dwarven House", + "rp": 15, + "type": "property" + }, + { + "name": "A Dwarven Hall", + "rp": 30, + "type": "property" + }, + { + "name": "A Graybeard's Hold", + "rp": 40, + "type": "property" + }, + { + "name": "An Engineer's Hold", + "rp": 45, + "type": "property" + }, + { + "name": "A Master Artificer's Hold", + "rp": 60, + "type": "property" + }, + { + "name": "A Warden's Hold", + "rp": 75, + "type": "property" + }, + { + "name": "A High Captain's Hold", + "rp": 90, + "type": "property" + }, + { + "name": "A Prince's Hold", + "rp": 105, + "type": "property" + }, + { + "name": "A Workshop", + "rp": 60, + "type": "property" + }, + { + "name": "Dwarven Tools", + "rp": 10, + "type": "gear" + }, + { + "name": "Shoddy Tools", + "rp": 5, + "type": "gear" + }, + { + "name": "Carts And Baggage", + "rp": 15, + "type": "gear" + } + ] +} diff --git a/src/data/gold/resources/elf.json b/src/data/gold/resources/elf.json index 47761f1..5287899 100644 --- a/src/data/gold/resources/elf.json +++ b/src/data/gold/resources/elf.json @@ -1,176 +1,179 @@ -[ - { - "name": "Run Of The Mill Bow", - "type": "gear", - "rp": 5 - }, - { - "name": "Run Of The Mill Arms", - "type": "gear", - "rp": 5 - }, - { - "name": "Reinforced Leather", - "type": "gear", - "rp": 3 - }, - { - "name": "Light Mail", - "type": "gear", - "rp": 6 - }, - { - "name": "Heavy Mail", - "type": "gear", - "rp": 10 - }, - { - "name": "Plated Mail", - "type": "gear", - "rp": 20 - }, - { - "name": "Elven Armor", - "type": "gear", - "resources": [ - { - "name": "Gambeson", - "rp": 9 - }, - { - "name": "Reinforced Leather", - "resources": null, - "rp": 20 - }, - { - "name": "Light Mail", - "resources": null, - "rp": 30 - }, - { - "name": "Heavy Mail", - "rp": 40 - }, - { - "name": "Plated Mail", - "rp": 75 - } - ] - }, - { - "name": "Elven Arms", - "type": "gear", - "rp": 15 - }, - { - "name": "Elven Bow", - "type": "gear", - "rp": 25 - }, - { - "name": "Elven Cloak", - "type": "gear", - "rp": 30 - }, - { - "name": "Elven Steed", - "type": "gear", - "rp": 8 - }, - { - "name": "Elven Clothes", - "type": "gear", - "rp": 2 - }, - { - "name": "Elven Shoes", - "type": "gear", - "rp": 1 - }, - { - "name": "Elven Finery", - "type": "gear", - "rp": 5 - }, - { - "name": "Elven Rope", - "type": "gear", - "rp": 12 - }, - { - "name": "Elven Bread", - "type": "gear", - "rp": 10 - }, - { - "name": "Elven Mirrorwine", - "type": "gear", - "rp": 8 - }, - { - "name": "Starlight", - "type": "gear", - "rp": 50 - }, - { - "name": "Tome Of Lore", - "type": "gear", - "rp": 20 - }, - { - "name": "Elven Instrument", - "type": "gear", - "rp": 6 - }, - { - "name": "Personal Effects", - "type": "gear", - "rp": 1 - }, - { - "name": "Elven Smithy", - "type": "property", - "rp": 50 - }, - { - "name": "Artisan's Shop", - "type": "property", - "rp": 60 - }, - { - "name": "Skill Tools", - "type": "gear", - "rp": 9 - }, - { - "name": "Elven Ship", - "type": "gear", - "rp": 80 - }, - { - "name": "Elven Land", - "type": "property", - "resources": [ - { - "name": "Pastoral", - "rp": 20 - }, - { - "name": "Large Country Manor And Land", - "rp": 50 - }, - { - "name": "Palace", - "rp": 100 - }, - { - "name": "A Forest, Bay Or Mountain", - "rp": 150 - }, - { - "name": "Apartment In The Citadel", - "rp": 25 - } - ] - } -] \ No newline at end of file +{ + "stock": "elf", + "resources": [ + { + "name": "Run Of The Mill Bow", + "type": "gear", + "rp": 5 + }, + { + "name": "Run Of The Mill Arms", + "type": "gear", + "rp": 5 + }, + { + "name": "Reinforced Leather", + "type": "gear", + "rp": 3 + }, + { + "name": "Light Mail", + "type": "gear", + "rp": 6 + }, + { + "name": "Heavy Mail", + "type": "gear", + "rp": 10 + }, + { + "name": "Plated Mail", + "type": "gear", + "rp": 20 + }, + { + "name": "Elven Armor", + "type": "gear", + "resources": [ + { + "name": "Gambeson", + "rp": 9 + }, + { + "name": "Reinforced Leather", + "resources": null, + "rp": 20 + }, + { + "name": "Light Mail", + "resources": null, + "rp": 30 + }, + { + "name": "Heavy Mail", + "rp": 40 + }, + { + "name": "Plated Mail", + "rp": 75 + } + ] + }, + { + "name": "Elven Arms", + "type": "gear", + "rp": 15 + }, + { + "name": "Elven Bow", + "type": "gear", + "rp": 25 + }, + { + "name": "Elven Cloak", + "type": "gear", + "rp": 30 + }, + { + "name": "Elven Steed", + "type": "gear", + "rp": 8 + }, + { + "name": "Elven Clothes", + "type": "gear", + "rp": 2 + }, + { + "name": "Elven Shoes", + "type": "gear", + "rp": 1 + }, + { + "name": "Elven Finery", + "type": "gear", + "rp": 5 + }, + { + "name": "Elven Rope", + "type": "gear", + "rp": 12 + }, + { + "name": "Elven Bread", + "type": "gear", + "rp": 10 + }, + { + "name": "Elven Mirrorwine", + "type": "gear", + "rp": 8 + }, + { + "name": "Starlight", + "type": "gear", + "rp": 50 + }, + { + "name": "Tome Of Lore", + "type": "gear", + "rp": 20 + }, + { + "name": "Elven Instrument", + "type": "gear", + "rp": 6 + }, + { + "name": "Personal Effects", + "type": "gear", + "rp": 1 + }, + { + "name": "Elven Smithy", + "type": "property", + "rp": 50 + }, + { + "name": "Artisan's Shop", + "type": "property", + "rp": 60 + }, + { + "name": "Skill Tools", + "type": "gear", + "rp": 9 + }, + { + "name": "Elven Ship", + "type": "gear", + "rp": 80 + }, + { + "name": "Elven Land", + "type": "property", + "resources": [ + { + "name": "Pastoral", + "rp": 20 + }, + { + "name": "Large Country Manor And Land", + "rp": 50 + }, + { + "name": "Palace", + "rp": 100 + }, + { + "name": "A Forest, Bay Or Mountain", + "rp": 150 + }, + { + "name": "Apartment In The Citadel", + "rp": 25 + } + ] + } + ] +} diff --git a/src/data/gold/resources/man.json b/src/data/gold/resources/man.json index 3636eba..abc7adc 100644 --- a/src/data/gold/resources/man.json +++ b/src/data/gold/resources/man.json @@ -1,434 +1,437 @@ -[ - { - "name": "Arms", - "type": "gear", - "resources": [ - { - "name": "Poor Quality", - "rp": 3 - }, - { - "name": "Run Of The Mill Quality", - "rp": 5 - }, - { - "name": "Superior Quality", - "rp": 20 - } - ] - }, - { - "name": "Missile Weapons", - "type": "gear", - "resources": [ - { - "name": "Throwing Weapons", - "resources": [ - { - "name": "Poor Quality", - "rp": 2 - }, - { - "name": "Run Of The Mill Quality", - "rp": 3 - }, - { - "name": "Superior Quality", - "rp": 9 - } - ] - }, - { - "name": "Hunting Bow", - "resources": [ - { - "name": "Poor Quality", - "rp": 3 - }, - { - "name": "Run Of The Mill Quality", - "rp": 5 - }, - { - "name": "Superior Quality", - "rp": 15 - } - ] - }, - { - "name": "Great Bow", - "resources": [ - { - "name": "Poor Quality", - "rp": 5 - }, - { - "name": "Run Of The Mill Quality", - "rp": 10 - }, - { - "name": "Superior Quality", - "rp": 30 - } - ] - }, - { - "name": "Crossbow", - "resources": [ - { - "name": "Poor Quality", - "rp": 4 - }, - { - "name": "Run Of The Mill Quality", - "rp": 7 - }, - { - "name": "Superior Quality", - "rp": 21 - } - ] - }, - { - "name": "Heavy Crossbow", - "resources": [ - { - "name": "Poor Quality", - "rp": 6 - }, - { - "name": "Run Of The Mill Quality", - "rp": 12 - }, - { - "name": "Superior Quality", - "rp": 36 - } - ] - }, - { - "name": "Pistol", - "resources": [ - { - "name": "Poor Quality", - "rp": 8 - }, - { - "name": "Run Of The Mill Quality", - "rp": 15 - }, - { - "name": "Superior Quality", - "rp": 45 - } - ] - }, - { - "name": "Arquebus", - "resources": [ - { - "name": "Poor Quality", - "rp": 10 - }, - { - "name": "Run Of The Mill Quality", - "rp": 20 - }, - { - "name": "Superior Quality", - "rp": 60 - } - ] - } - ] - }, - { - "name": "Armor", - "type": "gear", - "resources": [ - { - "name": "Gambeson", - "resources": [ - { - "name": "Poor Quality", - "rp": 2 - }, - { - "name": "Run Of The Mill Quality", - "rp": 3 - }, - { - "name": "Superior Quality", - "rp": 12 - } - ] - }, - { - "name": "Reinforced Leather", - "resources": [ - { - "name": "Poor Quality", - "rp": 3 - }, - { - "name": "Run Of The Mill Quality", - "rp": 6 - }, - { - "name": "Superior Quality", - "rp": 24 - } - ] - }, - { - "name": "Light Mail", - "resources": [ - { - "name": "Poor Quality", - "rp": 5 - }, - { - "name": "Run Of The Mill Quality", - "rp": 10 - }, - { - "name": "Superior Quality", - "rp": 40 - } - ] - }, - { - "name": "Heavy Mail", - "resources": [ - { - "name": "Poor Quality", - "rp": 8 - }, - { - "name": "Run Of The Mill Quality", - "rp": 15 - }, - { - "name": "Superior Quality", - "rp": 60 - } - ] - }, - { - "name": "Plated Mail", - "resources": [ - { - "name": "Poor Quality", - "rp": 10 - }, - { - "name": "Run Of The Mill Quality", - "rp": 20 - }, - { - "name": "Superior Quality", - "rp": 80 - } - ] - }, - { - "name": "Full Plated Mail", - "resources": [ - { - "name": "Poor Quality", - "rp": 25 - }, - { - "name": "Run Of The Mill Quality", - "rp": 50 - }, - { - "name": "Superior Quality", - "rp": 200 - } - ] - } - ] - }, - { - "name": "Riding Mount Or Pack Animal", - "rp": 5, - "type": "gear" - }, - { - "name": "Warhorse", - "rp": 12, - "type": "gear" - }, - { - "name": "Clothes", - "rp": 1, - "type": "gear" - }, - { - "name": "Traveling Gear", - "rp": 1, - "type": "gear" - }, - { - "name": "Shoes", - "rp": 1, - "type": "gear" - }, - { - "name": "Personal Effects", - "rp": 1, - "type": "gear" - }, - { - "name": "Finery", - "rp": 5, - "type": "gear" - }, - { - "name": "Cash", - "rp": 6, - "type": "gear" - }, - { - "name": "Skill Toolkit", - "rp": 8, - "type": "gear" - }, - { - "name": "Workshop", - "rp": 20, - "type": "property" - }, - { - "name": "Companion Animal", - "rp": 3, - "type": "gear" - }, - { - "name": "Herd Of Animals", - "rp": 20, - "type": "property" - }, - { - "name": "Rent", - "rp": 5, - "type": "property" - }, - { - "name": "Property", - "type": "property", - "resources": [ - { - "name": "A Leaky Shack", - "rp": 1 - }, - { - "name": "A Small Cottage", - "rp": 3 - }, - { - "name": "A House", - "rp": 10 - }, - { - "name": "A \"Cottage Industry\" Like A Weaver", - "rp": 10 - }, - { - "name": "A Villa Or Farm", - "rp": 15 - }, - { - "name": "A Small Business", - "rp": 20 - }, - { - "name": "Moderate-sized Business", - "rp": 30 - }, - { - "name": "A Manor Or Small Estate", - "rp": 40 - }, - { - "name": "An Urban Hotel", - "rp": 40 - }, - { - "name": "A Well-paid Position (Like Mayor)", - "rp": 45 - }, - { - "name": "A Successful Small Business", - "rp": 60 - }, - { - "name": "A Large Business", - "rp": 60 - }, - { - "name": "A Keep", - "rp": 60 - }, - { - "name": "A Fortress", - "rp": 75 - }, - { - "name": "A Moderate-sized Estate", - "rp": 75 - }, - { - "name": "A Castle With Attendant Town", - "rp": 90 - }, - { - "name": "A Large Estate", - "rp": 90 - }, - { - "name": "A Palace", - "rp": 105 - }, - { - "name": "A Government Position In A Prosperous Town", - "rp": 105 - } - ] - }, - { - "name": "Boat", - "type": "property", - "resources": [ - { - "name": "A Rowboat Or Skiff", - "rp": 5 - }, - { - "name": "A Longboat", - "rp": 10 - }, - { - "name": "A Junk", - "rp": 15 - }, - { - "name": "A Felucca", - "rp": 30 - }, - { - "name": "A Carrack", - "rp": 60 - }, - { - "name": "A Caravel", - "rp": 75 - }, - { - "name": "Treasure Ship", - "rp": 105 - } - ] - } -] \ No newline at end of file +{ + "stock": "man", + "resources": [ + { + "name": "Arms", + "type": "gear", + "resources": [ + { + "name": "Poor Quality", + "rp": 3 + }, + { + "name": "Run Of The Mill Quality", + "rp": 5 + }, + { + "name": "Superior Quality", + "rp": 20 + } + ] + }, + { + "name": "Missile Weapons", + "type": "gear", + "resources": [ + { + "name": "Throwing Weapons", + "resources": [ + { + "name": "Poor Quality", + "rp": 2 + }, + { + "name": "Run Of The Mill Quality", + "rp": 3 + }, + { + "name": "Superior Quality", + "rp": 9 + } + ] + }, + { + "name": "Hunting Bow", + "resources": [ + { + "name": "Poor Quality", + "rp": 3 + }, + { + "name": "Run Of The Mill Quality", + "rp": 5 + }, + { + "name": "Superior Quality", + "rp": 15 + } + ] + }, + { + "name": "Great Bow", + "resources": [ + { + "name": "Poor Quality", + "rp": 5 + }, + { + "name": "Run Of The Mill Quality", + "rp": 10 + }, + { + "name": "Superior Quality", + "rp": 30 + } + ] + }, + { + "name": "Crossbow", + "resources": [ + { + "name": "Poor Quality", + "rp": 4 + }, + { + "name": "Run Of The Mill Quality", + "rp": 7 + }, + { + "name": "Superior Quality", + "rp": 21 + } + ] + }, + { + "name": "Heavy Crossbow", + "resources": [ + { + "name": "Poor Quality", + "rp": 6 + }, + { + "name": "Run Of The Mill Quality", + "rp": 12 + }, + { + "name": "Superior Quality", + "rp": 36 + } + ] + }, + { + "name": "Pistol", + "resources": [ + { + "name": "Poor Quality", + "rp": 8 + }, + { + "name": "Run Of The Mill Quality", + "rp": 15 + }, + { + "name": "Superior Quality", + "rp": 45 + } + ] + }, + { + "name": "Arquebus", + "resources": [ + { + "name": "Poor Quality", + "rp": 10 + }, + { + "name": "Run Of The Mill Quality", + "rp": 20 + }, + { + "name": "Superior Quality", + "rp": 60 + } + ] + } + ] + }, + { + "name": "Armor", + "type": "gear", + "resources": [ + { + "name": "Gambeson", + "resources": [ + { + "name": "Poor Quality", + "rp": 2 + }, + { + "name": "Run Of The Mill Quality", + "rp": 3 + }, + { + "name": "Superior Quality", + "rp": 12 + } + ] + }, + { + "name": "Reinforced Leather", + "resources": [ + { + "name": "Poor Quality", + "rp": 3 + }, + { + "name": "Run Of The Mill Quality", + "rp": 6 + }, + { + "name": "Superior Quality", + "rp": 24 + } + ] + }, + { + "name": "Light Mail", + "resources": [ + { + "name": "Poor Quality", + "rp": 5 + }, + { + "name": "Run Of The Mill Quality", + "rp": 10 + }, + { + "name": "Superior Quality", + "rp": 40 + } + ] + }, + { + "name": "Heavy Mail", + "resources": [ + { + "name": "Poor Quality", + "rp": 8 + }, + { + "name": "Run Of The Mill Quality", + "rp": 15 + }, + { + "name": "Superior Quality", + "rp": 60 + } + ] + }, + { + "name": "Plated Mail", + "resources": [ + { + "name": "Poor Quality", + "rp": 10 + }, + { + "name": "Run Of The Mill Quality", + "rp": 20 + }, + { + "name": "Superior Quality", + "rp": 80 + } + ] + }, + { + "name": "Full Plated Mail", + "resources": [ + { + "name": "Poor Quality", + "rp": 25 + }, + { + "name": "Run Of The Mill Quality", + "rp": 50 + }, + { + "name": "Superior Quality", + "rp": 200 + } + ] + } + ] + }, + { + "name": "Riding Mount Or Pack Animal", + "rp": 5, + "type": "gear" + }, + { + "name": "Warhorse", + "rp": 12, + "type": "gear" + }, + { + "name": "Clothes", + "rp": 1, + "type": "gear" + }, + { + "name": "Traveling Gear", + "rp": 1, + "type": "gear" + }, + { + "name": "Shoes", + "rp": 1, + "type": "gear" + }, + { + "name": "Personal Effects", + "rp": 1, + "type": "gear" + }, + { + "name": "Finery", + "rp": 5, + "type": "gear" + }, + { + "name": "Cash", + "rp": 6, + "type": "gear" + }, + { + "name": "Skill Toolkit", + "rp": 8, + "type": "gear" + }, + { + "name": "Workshop", + "rp": 20, + "type": "property" + }, + { + "name": "Companion Animal", + "rp": 3, + "type": "gear" + }, + { + "name": "Herd Of Animals", + "rp": 20, + "type": "property" + }, + { + "name": "Rent", + "rp": 5, + "type": "property" + }, + { + "name": "Property", + "type": "property", + "resources": [ + { + "name": "A Leaky Shack", + "rp": 1 + }, + { + "name": "A Small Cottage", + "rp": 3 + }, + { + "name": "A House", + "rp": 10 + }, + { + "name": "A \"Cottage Industry\" Like A Weaver", + "rp": 10 + }, + { + "name": "A Villa Or Farm", + "rp": 15 + }, + { + "name": "A Small Business", + "rp": 20 + }, + { + "name": "Moderate-sized Business", + "rp": 30 + }, + { + "name": "A Manor Or Small Estate", + "rp": 40 + }, + { + "name": "An Urban Hotel", + "rp": 40 + }, + { + "name": "A Well-paid Position (Like Mayor)", + "rp": 45 + }, + { + "name": "A Successful Small Business", + "rp": 60 + }, + { + "name": "A Large Business", + "rp": 60 + }, + { + "name": "A Keep", + "rp": 60 + }, + { + "name": "A Fortress", + "rp": 75 + }, + { + "name": "A Moderate-sized Estate", + "rp": 75 + }, + { + "name": "A Castle With Attendant Town", + "rp": 90 + }, + { + "name": "A Large Estate", + "rp": 90 + }, + { + "name": "A Palace", + "rp": 105 + }, + { + "name": "A Government Position In A Prosperous Town", + "rp": 105 + } + ] + }, + { + "name": "Boat", + "type": "property", + "resources": [ + { + "name": "A Rowboat Or Skiff", + "rp": 5 + }, + { + "name": "A Longboat", + "rp": 10 + }, + { + "name": "A Junk", + "rp": 15 + }, + { + "name": "A Felucca", + "rp": 30 + }, + { + "name": "A Carrack", + "rp": 60 + }, + { + "name": "A Caravel", + "rp": 75 + }, + { + "name": "Treasure Ship", + "rp": 105 + } + ] + } + ] +} diff --git a/src/data/gold/resources/orc.json b/src/data/gold/resources/orc.json index 4885ff2..6ce6cfb 100644 --- a/src/data/gold/resources/orc.json +++ b/src/data/gold/resources/orc.json @@ -1,211 +1,214 @@ -[ - { - "name": "Rags", - "rp": 1, - "type": "gear" - }, - { - "name": "Traveling Gear", - "rp": 3, - "type": "gear" - }, - { - "name": "Hobnailed Boots", - "rp": 1, - "type": "gear" - }, - { - "name": "Orc Arms", - "type": "gear", - "resources": [ - { - "name": "Poor Quality", - "rp": 3 - }, - { - "name": "Run Of The Mill Quality", - "rp": 5 - } - ] - }, - { - "name": "Armor", - "type": "gear", - "resources": [ - { - "name": "Hides", - "resources": [ - { - "name": "Poor Quality", - "rp": 1 - } - ] - }, - { - "name": "Reinforced Hides", - "resources": [ - { - "name": "Poor Quality", - "rp": 3 - } - ] - }, - { - "name": "Reinforced Leather", - "resources": [ - { - "name": "Run Of The Mill Quality", - "rp": 8 - }, - { - "name": "Superior Quality", - "rp": 25 - } - ] - }, - { - "name": "Light Mail", - "resources": [ - { - "name": "Poor Quality", - "rp": 5 - }, - { - "name": "Run Of The Mill Quality", - "rp": 12 - } - ] - }, - { - "name": "Heavy Mail", - "resources": [ - { - "name": "Poor Quality", - "rp": 8 - }, - { - "name": "Run Of The Mill Quality", - "rp": 20 - } - ] - } - ] - }, - { - "name": "Missile Weapons", - "type": "gear", - "resources": [ - { - "name": "Bow", - "resources": [ - { - "name": "Poor Quality", - "rp": 3 - }, - { - "name": "Run Of The Mill Quality", - "rp": 5 - } - ] - }, - { - "name": "Crossbow", - "resources": [ - { - "name": "Poor Quality", - "rp": 4 - }, - { - "name": "Run Of The Mill Quality", - "rp": 6 - } - ] - }, - { - "name": "Iron-cased Bombs", - "resources": null, - "rp": 10 - } - ] - }, - { - "name": "Black Iron Helmet", - "rp": 5, - "type": "gear" - }, - { - "name": "Black Iron Shield", - "rp": 4, - "type": "gear" - }, - { - "name": "Riding Mount Or Pack Animal", - "rp": 5, - "type": "gear" - }, - { - "name": "Great Wolf Mount", - "rp": 15, - "type": "gear" - }, - { - "name": "Whip", - "rp": 2, - "type": "gear" - }, - { - "name": "Poison", - "rp": 5, - "type": "gear" - }, - { - "name": "Brazen Horn", - "rp": 9, - "type": "gear" - }, - { - "name": "Clan Banner", - "rp": 9, - "type": "gear" - }, - { - "name": "Skill Tools", - "rp": 9, - "type": "gear" - }, - { - "name": "Riding Harness For Wolf", - "rp": 5, - "type": "gear" - }, - { - "name": "Servant's Black Robes", - "rp": 1, - "type": "gear" - }, - { - "name": "Servant's Leather Apron", - "rp": 1, - "type": "gear" - }, - { - "name": "Ceremonial Knives", - "rp": 3, - "type": "gear" - }, - { - "name": "Ceremonial Axe Or Sword", - "rp": 7, - "type": "gear" - }, - { - "name": "Servant's Tools Of The Trade", - "rp": 7, - "type": "gear" - }, - { - "name": "Poisoner's Toolkit", - "rp": 7, - "type": "gear" - } -] \ No newline at end of file +{ + "stock": "orc", + "resources": [ + { + "name": "Rags", + "rp": 1, + "type": "gear" + }, + { + "name": "Traveling Gear", + "rp": 3, + "type": "gear" + }, + { + "name": "Hobnailed Boots", + "rp": 1, + "type": "gear" + }, + { + "name": "Orc Arms", + "type": "gear", + "resources": [ + { + "name": "Poor Quality", + "rp": 3 + }, + { + "name": "Run Of The Mill Quality", + "rp": 5 + } + ] + }, + { + "name": "Armor", + "type": "gear", + "resources": [ + { + "name": "Hides", + "resources": [ + { + "name": "Poor Quality", + "rp": 1 + } + ] + }, + { + "name": "Reinforced Hides", + "resources": [ + { + "name": "Poor Quality", + "rp": 3 + } + ] + }, + { + "name": "Reinforced Leather", + "resources": [ + { + "name": "Run Of The Mill Quality", + "rp": 8 + }, + { + "name": "Superior Quality", + "rp": 25 + } + ] + }, + { + "name": "Light Mail", + "resources": [ + { + "name": "Poor Quality", + "rp": 5 + }, + { + "name": "Run Of The Mill Quality", + "rp": 12 + } + ] + }, + { + "name": "Heavy Mail", + "resources": [ + { + "name": "Poor Quality", + "rp": 8 + }, + { + "name": "Run Of The Mill Quality", + "rp": 20 + } + ] + } + ] + }, + { + "name": "Missile Weapons", + "type": "gear", + "resources": [ + { + "name": "Bow", + "resources": [ + { + "name": "Poor Quality", + "rp": 3 + }, + { + "name": "Run Of The Mill Quality", + "rp": 5 + } + ] + }, + { + "name": "Crossbow", + "resources": [ + { + "name": "Poor Quality", + "rp": 4 + }, + { + "name": "Run Of The Mill Quality", + "rp": 6 + } + ] + }, + { + "name": "Iron-cased Bombs", + "resources": null, + "rp": 10 + } + ] + }, + { + "name": "Black Iron Helmet", + "rp": 5, + "type": "gear" + }, + { + "name": "Black Iron Shield", + "rp": 4, + "type": "gear" + }, + { + "name": "Riding Mount Or Pack Animal", + "rp": 5, + "type": "gear" + }, + { + "name": "Great Wolf Mount", + "rp": 15, + "type": "gear" + }, + { + "name": "Whip", + "rp": 2, + "type": "gear" + }, + { + "name": "Poison", + "rp": 5, + "type": "gear" + }, + { + "name": "Brazen Horn", + "rp": 9, + "type": "gear" + }, + { + "name": "Clan Banner", + "rp": 9, + "type": "gear" + }, + { + "name": "Skill Tools", + "rp": 9, + "type": "gear" + }, + { + "name": "Riding Harness For Wolf", + "rp": 5, + "type": "gear" + }, + { + "name": "Servant's Black Robes", + "rp": 1, + "type": "gear" + }, + { + "name": "Servant's Leather Apron", + "rp": 1, + "type": "gear" + }, + { + "name": "Ceremonial Knives", + "rp": 3, + "type": "gear" + }, + { + "name": "Ceremonial Axe Or Sword", + "rp": 7, + "type": "gear" + }, + { + "name": "Servant's Tools Of The Trade", + "rp": 7, + "type": "gear" + }, + { + "name": "Poisoner's Toolkit", + "rp": 7, + "type": "gear" + } + ] +} diff --git a/src/data/gold/resources/roden.json b/src/data/gold/resources/roden.json index a5344c2..a9266cc 100644 --- a/src/data/gold/resources/roden.json +++ b/src/data/gold/resources/roden.json @@ -1,139 +1,142 @@ -[ - { - "name": "Arms", - "rp": 5, - "type": "gear" - }, - { - "name": "Roden Throwing Blades", - "rp": 15, - "type": "gear" - }, - { - "name": "Wooden Shield", - "rp": 2, - "type": "gear" - }, - { - "name": "Armor", - "type": "gear", - "resources": [ - { - "name": "Gambeson", - "rp": 5 - }, - { - "name": "Reinforced Leather", - "rp": 10 - }, - { - "name": "Light Mail", - "rp": 15 - }, - { - "name": "Heavy Mail", - "rp": 20 - } - ] - }, - { - "name": "Property", - "type": "property", - "resources": [ - { - "name": "Rat's Nest Property", - "resources": [ - { - "name": "Den", - "rp": 7 - }, - { - "name": "Nest", - "rp": 10 - }, - { - "name": "Apiary", - "rp": 10 - }, - { - "name": "Fields", - "rp": 15 - } - ] - } - ] - }, - { - "name": "Workshop", - "type": "property", - "rp": 20 - }, - { - "name": "Animal Herd", - "type": "property", - "rp": 10 - }, - { - "name": "Clothes", - "type": "gear", - "rp": 1 - }, - { - "name": "Traveling Gear", - "type": "gear", - "rp": 1 - }, - { - "name": "Shoes", - "type": "gear", - "rp": 3 - }, - { - "name": "Tool Kit", - "type": "gear", - "rp": 9 - }, - { - "name": "Firebombs", - "type": "gear", - "rp": 20 - }, - { - "name": "Robes Of The Ordained", - "type": "gear", - "rp": 1 - }, - { - "name": "Honeyed Oatcakes", - "type": "gear", - "rp": 5 - }, - { - "name": "Dandewine", - "type": "gear", - "rp": 5 - }, - { - "name": "Blood Blossom", - "type": "gear", - "rp": 5 - }, - { - "name": "Visionary Cult", - "type": "affiliation", - "resources": [ - { - "name": "1d Cult", - "rp": 10 - }, - { - "name": "2d Cult", - "rp": 25 - }, - { - "name": "3d Cult", - "rp": 50 - } - ] - } -] \ No newline at end of file +{ + "stock": "roden", + "resources": [ + { + "name": "Arms", + "rp": 5, + "type": "gear" + }, + { + "name": "Roden Throwing Blades", + "rp": 15, + "type": "gear" + }, + { + "name": "Wooden Shield", + "rp": 2, + "type": "gear" + }, + { + "name": "Armor", + "type": "gear", + "resources": [ + { + "name": "Gambeson", + "rp": 5 + }, + { + "name": "Reinforced Leather", + "rp": 10 + }, + { + "name": "Light Mail", + "rp": 15 + }, + { + "name": "Heavy Mail", + "rp": 20 + } + ] + }, + { + "name": "Property", + "type": "property", + "resources": [ + { + "name": "Rat's Nest Property", + "resources": [ + { + "name": "Den", + "rp": 7 + }, + { + "name": "Nest", + "rp": 10 + }, + { + "name": "Apiary", + "rp": 10 + }, + { + "name": "Fields", + "rp": 15 + } + ] + } + ] + }, + { + "name": "Workshop", + "type": "property", + "rp": 20 + }, + { + "name": "Animal Herd", + "type": "property", + "rp": 10 + }, + { + "name": "Clothes", + "type": "gear", + "rp": 1 + }, + { + "name": "Traveling Gear", + "type": "gear", + "rp": 1 + }, + { + "name": "Shoes", + "type": "gear", + "rp": 3 + }, + { + "name": "Tool Kit", + "type": "gear", + "rp": 9 + }, + { + "name": "Firebombs", + "type": "gear", + "rp": 20 + }, + { + "name": "Robes Of The Ordained", + "type": "gear", + "rp": 1 + }, + { + "name": "Honeyed Oatcakes", + "type": "gear", + "rp": 5 + }, + { + "name": "Dandewine", + "type": "gear", + "rp": 5 + }, + { + "name": "Blood Blossom", + "type": "gear", + "rp": 5 + }, + { + "name": "Visionary Cult", + "type": "affiliation", + "resources": [ + { + "name": "1d Cult", + "rp": 10 + }, + { + "name": "2d Cult", + "rp": 25 + }, + { + "name": "3d Cult", + "rp": 50 + } + ] + } + ] +} diff --git a/src/data/gold/resources/wolf.json b/src/data/gold/resources/wolf.json index e51c10a..5c5863e 100644 --- a/src/data/gold/resources/wolf.json +++ b/src/data/gold/resources/wolf.json @@ -1,42 +1,45 @@ -[ - { - "name": "Territory", - "type": "property", - "resources": [ - { - "name": "Barren", - "rp": 5 - }, - { - "name": "Wild Grounds", - "rp": 10 - }, - { - "name": "Plentiful Range", - "rp": 15 - } - ] - }, - { - "name": "Armor", - "type": "gear", - "resources": [ - { - "name": "Plated Leather Chanfron", - "rp": 3 - }, - { - "name": "Leather Collar", - "rp": 2 - }, - { - "name": "Plated Body Armor", - "rp": 6 - }, - { - "name": "Leather Greaves And Cuissarts", - "rp": 2 - } - ] - } -] \ No newline at end of file +{ + "stock": "wolf", + "resources": [ + { + "name": "Territory", + "type": "property", + "resources": [ + { + "name": "Barren", + "rp": 5 + }, + { + "name": "Wild Grounds", + "rp": 10 + }, + { + "name": "Plentiful Range", + "rp": 15 + } + ] + }, + { + "name": "Armor", + "type": "gear", + "resources": [ + { + "name": "Plated Leather Chanfron", + "rp": 3 + }, + { + "name": "Leather Collar", + "rp": 2 + }, + { + "name": "Plated Body Armor", + "rp": 6 + }, + { + "name": "Leather Greaves And Cuissarts", + "rp": 2 + } + ] + } + ] +} diff --git a/src/data/troll/resources.json b/src/data/troll/resources.json index 8a83186..6c39cb8 100644 --- a/src/data/troll/resources.json +++ b/src/data/troll/resources.json @@ -1,57 +1,60 @@ -[ - { - "name": "Rags", - "type": "gear", - "rp": 1 - }, - { - "name": "Troll Shoes", - "type": "gear", - "rp": 1 - }, - { - "name": "Sack", - "type": "gear", - "rp": 1 - }, - { - "name": "Chest or Footlocker", - "type": "gear", - "rp": 3 - }, - { - "name": "Trophies", - "type": "gear", - "rp": 3 - }, - { - "name": "Shiny Trophies", - "type": "gear", - "rp": 7 - }, - { - "name": "Pile of Rocks", - "type": "gear", - "rp": 2 - }, - { - "name": "Troll Lash", - "type": "gear", - "rp": 5 - }, - { - "name": "Mattock", - "type": "gear", - "rp": 10 - }, - { - "name": "Black Iron Shield", - "type": "gear", - "rp": 5 - }, - { - "name": "Cave Hole", - "type": "property", - "rp": 5 - } -] \ No newline at end of file +{ + "stock": "troll", + "resources": [ + { + "name": "Rags", + "type": "gear", + "rp": 1 + }, + { + "name": "Troll Shoes", + "type": "gear", + "rp": 1 + }, + { + "name": "Sack", + "type": "gear", + "rp": 1 + }, + { + "name": "Chest or Footlocker", + "type": "gear", + "rp": 3 + }, + { + "name": "Trophies", + "type": "gear", + "rp": 3 + }, + { + "name": "Shiny Trophies", + "type": "gear", + "rp": 7 + }, + { + "name": "Pile of Rocks", + "type": "gear", + "rp": 2 + }, + { + "name": "Troll Lash", + "type": "gear", + "rp": 5 + }, + { + "name": "Mattock", + "type": "gear", + "rp": 10 + }, + { + "name": "Black Iron Shield", + "type": "gear", + "rp": 5 + }, + { + "name": "Cave Hole", + "type": "property", + "rp": 5 + } + ] +} diff --git a/src/lib/data/dark_elf.rb b/src/lib/data/dark_elf.rb index 75f87c4..e8d288e 100644 --- a/src/lib/data/dark_elf.rb +++ b/src/lib/data/dark_elf.rb @@ -16,7 +16,8 @@ module Charred lifepaths = contents["settings"] file = File.read("data/dark_elf/resources.json") - resources = JSON.parse(file) + contents = JSON.parse(file) + resources = contents["resources"] data[:resources]['elf'] += resources elf = data[:lifepaths]['elf'] diff --git a/src/lib/data/gold.rb b/src/lib/data/gold.rb index aaca09b..8d715ab 100644 --- a/src/lib/data/gold.rb +++ b/src/lib/data/gold.rb @@ -22,7 +22,8 @@ module Charred lifepaths[stock] = contents["settings"] file = File.read("data/gold/resources/#{stock}.json") - resources[stock] = JSON.parse(file) + contents = JSON.parse(file) + resources[stock] = contents["resources"] file = File.read("data/gold/stocks/#{stock}.json") stocks[stock] = Stock.new(JSON.parse(file)) diff --git a/src/lib/data/troll.rb b/src/lib/data/troll.rb index 8f95701..68ec966 100644 --- a/src/lib/data/troll.rb +++ b/src/lib/data/troll.rb @@ -18,7 +18,8 @@ module Charred data[:lifepaths]['troll'] = lifepaths file = File.read("data/troll/resources.json") - resources = JSON.parse(file) + contents = JSON.parse(file) + resources = contents["resources"] data[:resources]['troll'] = resources file = File.read("data/troll/stock.json") -- 2.37.3 From a98115c647147098d06c9e2084e13cbfb23700a9 Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Sat, 4 Feb 2023 13:53:39 -0600 Subject: [PATCH 27/45] Use Fetch API and thenify BurningData --- src/public/js/burning-service.js | 116 +++++++++++++++---------------- 1 file changed, 55 insertions(+), 61 deletions(-) diff --git a/src/public/js/burning-service.js b/src/public/js/burning-service.js index 242aaab..fe7761b 100644 --- a/src/public/js/burning-service.js +++ b/src/public/js/burning-service.js @@ -1,4 +1,4 @@ - +var DEBUG = true; /**** Class Settings (Angular Service) ****/ function Settings() { this.enforceLifepathReqts = true; @@ -218,13 +218,14 @@ function CharacterStorageService($http) { /* Load character names from server */ this.loadCharacterNames = function(){ - $http.get("/list_chars/user1", {'timeout': 3000} ). - success(function(data,status,headers,config){ + fetch("/list_chars/user1") + .then((response) => response.json()) + .then((data) => { myself.characterIdAndNames = data; console.log("Loaded saved character names"); - }). - error(function(data,status,headers,config){ - console.log("Error: Loading saved character names from server failed: HTTP code " + status + ": " + data); + }) + .catch((error) => { + console.log("Error: Loading saved character names from server failed: "+error); }); } @@ -305,24 +306,25 @@ function BurningDataService($http) { // Log events this.registerEvent("stocksLoaded", function() { console.log("Stocks fetched from server: ", Object.keys(myself.stocks)) - // DEBUG: - // console.log("Stocks fetched from server: ", myself.stocks) + if(DEBUG) + console.log("Stocks fetched from server: ", myself.stocks) }); this.registerEvent("skillsLoaded", function() { console.log("Loaded " + Object.keys(myself.skills).length + " skills."); - // DEBUG: - // console.log("Loaded skills: ", myself.skills); + if(DEBUG) + console.log("Loaded skills: ", myself.skills); }); this.registerEvent("traitsLoaded", function() { console.log("Loaded " + Object.keys(myself.traits).length + " traits."); - // DEBUG: - // console.log("Loaded traits: ", myself.traits); + if(DEBUG) + console.log("Loaded traits: ", myself.traits); }); - $http.get("/stocks", {'timeout': 3000}). - success(function(data,status,headers,config){ - // DEBUG: - // console.log(data); + fetch("/stocks") + .then((response) => response.json()) + .then((data) => { + if(DEBUG) + console.log("Loaded stock data: "+data); myself.stocks = data; for (var stock of Object.keys(data)) { myself.startingStatPts[stock] = new StartingStatPoints(myself.stocks[stock].starting_stats); @@ -330,68 +332,60 @@ function BurningDataService($http) { myself.defineStockEvent(stock, "resourcesLoaded"); } myself.triggerEvent("stocksLoaded"); - }). - error(function(data,status,headers,config){ - console.log("Error: Getting stocks from server failed: HTTP code " + status + ": " + data); + }) + .catch((error) => { + console.log("Error: Getting stocks from server failed: "+error); + }); + + /* Load skills from server */ + fetch("/skills") + .then((response) => response.json()) + .then((data) => { + myself.skills = data; + myself.triggerEvent("skillsLoaded"); + }) + .catch((error) => { + console.log("Error: Getting skills from server failed: "+error); + }); + + /* Load traits from server */ + fetch("/traits") + .then((response) => response.json()) + .then((data) => { + myself.traits = data; + myself.triggerEvent("traitsLoaded"); + }) + .catch((error) => { + console.log("Error: Getting traits from server failed: "+error); }); /* Load lifepaths from server */ this.loadLifepathsForStock = function(stock){ - $http.get("/lifepaths/" + stock, {'timeout': 3000} ). - success(function(data,status,headers,config){ + fetch("/lifepaths/" + stock) + .then((response) => response.json()) + .then((data) => { myself.lifepaths[stock] = data; myself.triggerStockEvent(stock, "lifepathsLoaded"); console.log("Loaded "+stock+" lifepaths. " + Object.keys(myself.lifepaths[stock]).length + " settings"); - }). - error(function(data,status,headers,config){ - console.log("Error: Getting "+stock+" lifepaths from server failed: HTTP code " + status + ": " + data); + }) + .catch((error) => { + console.log("Error: Getting "+stock+" lifepaths from server failed: "+error); }); } /* Load resources from server */ this.loadResourcesForStock = function(stock){ - $http.get("/resources/" + stock, {'timeout': 3000} ). - success(function(data,status,headers,config){ + fetch("/resources/" + stock) + .then((response) => response.json()) + .then((data) => { myself.resources[stock] = data; myself.triggerStockEvent(stock, "resourcesLoaded"); console.log("Loaded "+stock+" resources. "); - }). - error(function(data,status,headers,config){ - console.log("Error: Getting "+stock+" stat points from server failed: HTTP code " + status + ": " + data); + }) + .catch((error) => { + console.log("Error: Getting "+stock+" stat points from server failed: "+error); }); } - - - /* Load skills from server */ - $http.get("/skills", {'timeout': 3000} ). - success(function(data,status,headers,config){ - myself.skills = data; - myself.triggerEvent("skillsLoaded"); - }). - error(function(data,status,headers,config){ - console.log("Error: Getting skills from server failed: HTTP code " + status + ": " + data); - }); - - /* Load traits from server */ - $http.get("/traits", {'timeout': 3000} ). - success(function(data,status,headers,config){ - myself.traits = data; - myself.triggerEvent("traitsLoaded"); - }). - error(function(data,status,headers,config){ - console.log("Error: Getting traits from server failed: HTTP code " + status + ": " + data); - }); - // DEBUG: - // setTimeout(() => testStockLoading(myself), (2 * 1000)); -} - -function testStockLoading(dataService) { - console.log(dataService); - for (var stock in dataService.stocks) { - console.log(stock); - dataService.loadLifepathsForStock(stock); - dataService.loadResourcesForStock(stock); - } } /**** End BurningDataService ****/ -- 2.37.3 From 42ffa31a3f2cdf1db49865d03691c4218fcd0dca Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Sat, 4 Feb 2023 14:00:49 -0600 Subject: [PATCH 28/45] Remove debug logging It would need to be refactored anyway --- src/public/js/burning-service.js | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/src/public/js/burning-service.js b/src/public/js/burning-service.js index fe7761b..1b5d619 100644 --- a/src/public/js/burning-service.js +++ b/src/public/js/burning-service.js @@ -300,26 +300,6 @@ function BurningDataService($http) { } - - var myself = this; - - // Log events - this.registerEvent("stocksLoaded", function() { - console.log("Stocks fetched from server: ", Object.keys(myself.stocks)) - if(DEBUG) - console.log("Stocks fetched from server: ", myself.stocks) - }); - this.registerEvent("skillsLoaded", function() { - console.log("Loaded " + Object.keys(myself.skills).length + " skills."); - if(DEBUG) - console.log("Loaded skills: ", myself.skills); - }); - this.registerEvent("traitsLoaded", function() { - console.log("Loaded " + Object.keys(myself.traits).length + " traits."); - if(DEBUG) - console.log("Loaded traits: ", myself.traits); - }); - fetch("/stocks") .then((response) => response.json()) .then((data) => { -- 2.37.3 From 0782b4465ea5c6de286fa73776cb3db4e8fbd2f3 Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Sat, 4 Feb 2023 14:32:48 -0600 Subject: [PATCH 29/45] Debug behaviour should default to false Ideally overrides to this don't get committed, should find a better way to toggle it. --- src/public/js/burning-service.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/public/js/burning-service.js b/src/public/js/burning-service.js index 1b5d619..7498921 100644 --- a/src/public/js/burning-service.js +++ b/src/public/js/burning-service.js @@ -1,4 +1,4 @@ -var DEBUG = true; +var DEBUG = false; /**** Class Settings (Angular Service) ****/ function Settings() { this.enforceLifepathReqts = true; -- 2.37.3 From 30f477a2e00077b7c4612edad1a5cf819fb19691 Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Sat, 4 Feb 2023 15:40:42 -0600 Subject: [PATCH 30/45] Replace BurningData events with Promise handlers --- src/public/js/burning-service.js | 76 +++++++++++--------------------- src/public/js/burning.js | 26 ++++++----- 2 files changed, 40 insertions(+), 62 deletions(-) diff --git a/src/public/js/burning-service.js b/src/public/js/burning-service.js index 7498921..4891833 100644 --- a/src/public/js/burning-service.js +++ b/src/public/js/burning-service.js @@ -237,6 +237,10 @@ function CharacterStorageService($http) { /**** Class BurningDataService (Angular Service) ****/ // This service is used to load the lifepaths, skills, traits, etc. from the server. function BurningDataService($http) { + + // Used to reference the object from within functions and callbacks + var myself = this; + /* JSON Data structure representing lifepaths. The structure is: stock: setting_name: @@ -264,43 +268,10 @@ function BurningDataService($http) { // A hash of StartingStatPoints objects keyed by stock. this.startingStatPts = {}; - this.events = { - stocksLoaded: { triggered : false, callbacks : [] }, - traitsLoaded: { triggered : false, callbacks : [] }, - skillsLoaded: { triggered : false, callbacks : [] }, - } - - this.registerEvent = function(eventName, callback){ - if(this.events[eventName].triggered) - callback(); - this.events[eventName].callbacks.push(callback); - } - this.triggerEvent = function(eventName) { - myself.events[eventName].triggered = true; - for(var callback of myself.events[eventName].callbacks) { - callback(); - } - } + /* Loading of stocks, skills, and traits begins on initializing the service - this.stockEvents = {}; - this.defineStockEvent = function(stockName, eventName) { - if(!(stockName in myself.stockEvents)) myself.stockEvents[stockName] = {}; - myself.stockEvents[stockName][eventName] = { triggered : false, callbacks : [] } ; - } - this.registerStockEvent = function(stockName, eventName, callback){ - if(myself.stockEvents[stockName][eventName].triggered) - callback(); - myself.stockEvents[stockName][eventName].callbacks.push(callback); - } - this.triggerStockEvent = function(stockName, eventName) { - myself.stockEvents[stockName][eventName].triggered = true; - for(var callback of myself.stockEvents[stockName][eventName].callbacks) { - callback(); - } - } - - - fetch("/stocks") + /* Load stocks from server */ + this.whenStocksLoaded = fetch("/stocks") .then((response) => response.json()) .then((data) => { if(DEBUG) @@ -308,64 +279,67 @@ function BurningDataService($http) { myself.stocks = data; for (var stock of Object.keys(data)) { myself.startingStatPts[stock] = new StartingStatPoints(myself.stocks[stock].starting_stats); - myself.defineStockEvent(stock, "lifepathsLoaded"); - myself.defineStockEvent(stock, "resourcesLoaded"); } - myself.triggerEvent("stocksLoaded"); }) .catch((error) => { console.log("Error: Getting stocks from server failed: "+error); }); /* Load skills from server */ - fetch("/skills") + this.whenSkillsLoaded = fetch("/skills") .then((response) => response.json()) .then((data) => { myself.skills = data; - myself.triggerEvent("skillsLoaded"); + if(DEBUG) + console.log("Loaded skill data: "+data); }) .catch((error) => { console.log("Error: Getting skills from server failed: "+error); }); /* Load traits from server */ - fetch("/traits") + this.whenTraitsLoaded = fetch("/traits") .then((response) => response.json()) .then((data) => { myself.traits = data; - myself.triggerEvent("traitsLoaded"); + if(DEBUG) + console.log("Loaded trait data: "+data); }) .catch((error) => { console.log("Error: Getting traits from server failed: "+error); }); + /* Lifepaths and resources defer until their stock is selected */ + + this.whenLifePathsLoadedForStock = {}; /* Load lifepaths from server */ this.loadLifepathsForStock = function(stock){ - fetch("/lifepaths/" + stock) + return myself.whenLifePathsLoadedForStock[stock] = fetch("/lifepaths/" + stock) .then((response) => response.json()) .then((data) => { myself.lifepaths[stock] = data; - myself.triggerStockEvent(stock, "lifepathsLoaded"); - console.log("Loaded "+stock+" lifepaths. " + Object.keys(myself.lifepaths[stock]).length + " settings"); + if(DEBUG) + console.log("Loaded "+stock+" lifepaths. " + Object.keys(myself.lifepaths[stock]).length + " settings"); }) .catch((error) => { console.log("Error: Getting "+stock+" lifepaths from server failed: "+error); }); - } + }; /* Load resources from server */ + this.whenResourcesLoadedForStock = {}; this.loadResourcesForStock = function(stock){ - fetch("/resources/" + stock) + return myself.whenResourcesLoadedForStock[stock] = fetch("/resources/" + stock) .then((response) => response.json()) .then((data) => { myself.resources[stock] = data; - myself.triggerStockEvent(stock, "resourcesLoaded"); - console.log("Loaded "+stock+" resources. "); + if(DEBUG) + console.log("Loaded "+stock+" resources. "); }) .catch((error) => { console.log("Error: Getting "+stock+" stat points from server failed: "+error); }); - } + }; } /**** End BurningDataService ****/ diff --git a/src/public/js/burning.js b/src/public/js/burning.js index d2515e4..e51b17a 100644 --- a/src/public/js/burning.js +++ b/src/public/js/burning.js @@ -349,7 +349,6 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo return result; } - $scope.onGenderChange = function(){ if ($scope.name.length == 0) { $scope.generateName(); @@ -359,19 +358,21 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo $scope.onStockChange = function(){ if(!$scope.stock) return; - if(!$scope.stockSelected) { + + if(!$scope.stockSelected) { // Removes 'select a stock' after the first selection $scope.stocks.shift(); $scope.stockSelected = true; } - var oldName = $scope.name; - if(!burningData.lifepaths[$scope.stock]) { - burningData.loadLifepathsForStock($scope.stock); - } + + let loadPromises = []; if(!burningData.resources[$scope.stock]) { - burningData.loadResourcesForStock($scope.stock); + loadPromises.push(burningData.loadResourcesForStock($scope.stock)); + } + if(!burningData.lifepaths[$scope.stock]) { + loadPromises.push(burningData.loadLifepathsForStock($scope.stock)); } - // TODO: technically a bug — only want this registered once per stock... - burningData.registerStockEvent($scope.stock, "lifepathsLoaded", function () { + Promise.all(loadPromises).then(() => { + var oldName = $scope.name; // Make a blank character sheet $scope.initialize($scope.stock); @@ -383,6 +384,8 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo calculateSettingNames($scope, burningData); calculateCurrentSettingLifepathNames($scope, burningData); calculateSpecialTraitsForDisplay($scope, burningData); + calculateGearSelectionLists($scope, burningData); + calculatePropertySelectionLists($scope, burningData); }); } @@ -409,10 +412,11 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo calculateUnspentSkillPoints($scope); } - burningData.registerEvent("stocksLoaded", function() { - $scope.stocks = [{ name: "Select a stock" }] + burningData.whenStocksLoaded.then(() => { + $scope.stocks = [{ name: "Select a stock" }]; $scope.stocks = $scope.stocks.concat(Object.values(burningData.stocks)); $scope.stockSelected = false; + $scope.$digest(); }); $scope.$on('$locationChangeStart', function(event, nextUrl, currentUrl) { -- 2.37.3 From c8adc19846952ba6d534ab4ba4a0bb3b468fab4b Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Sat, 4 Feb 2023 16:21:21 -0600 Subject: [PATCH 31/45] Load stock data on stock change or char upload Extracts the loading logic to a common method returning a promise, both places 'then' the promise. --- src/public/js/burning-serialize.js | 47 +++++++++++++++--------------- src/public/js/burning.js | 24 ++++++++------- 2 files changed, 38 insertions(+), 33 deletions(-) diff --git a/src/public/js/burning-serialize.js b/src/public/js/burning-serialize.js index 484b1cb..684ef23 100644 --- a/src/public/js/burning-serialize.js +++ b/src/public/js/burning-serialize.js @@ -1,8 +1,8 @@ function loadCurrentCharacterFromStruct($scope, charStruct, burningData, appropriateWeapons){ - $scope.name = charStruct.name; - $scope.gender = charStruct.gender; - $scope.stock = charStruct.stock; - + $scope.name = charStruct.name; + $scope.gender = charStruct.gender; + $scope.stock = charStruct.stock; + $scope.ensureStockLoaded($scope.stock).then(() => { // Appropriate weapons must be loaded before calculateLifepathSkills is called. if(serverSettings.storageType != 'server'){ appropriateWeapons.appropriateWeapons = charStruct.approp_weapons; @@ -15,8 +15,8 @@ function loadCurrentCharacterFromStruct($scope, charStruct, burningData, appropr var selectedLifepaths = []; for(var i = 0; i < charStruct.lifepaths.length; i++){ var lp = charStruct.lifepaths[i]; - // lp[0] is setting name, lp[1] is lifepath name. - // lp[2] is brutalLifeDOF, lp[3] is brutalLifeTraitName, + // lp[0] is setting name, lp[1] is lifepath name. + // lp[2] is brutalLifeDOF, lp[3] is brutalLifeTraitName, // lp[4] is lifepath time, if it's variable and the user selected a value // lp[5] is the replacement skill for 'Weapon Of Choice' if it's present. // lp[6] is the replacement stat array, if present. This is needed if the @@ -128,19 +128,19 @@ function loadCurrentCharacterFromStruct($scope, charStruct, burningData, appropr // Load Resources $scope.gear = {}; - for(var i = 0; i < charStruct.gear.length; i++){ + for(var i = 0; i < charStruct.gear.length; i++){ var gear = charStruct.gear[i]; $scope.gear[gear.desc] = new DisplayGear(gear.desc, gear.cost); } $scope.property = {}; - for(var i = 0; i < charStruct.property.length; i++){ + for(var i = 0; i < charStruct.property.length; i++){ var property = charStruct.property[i]; $scope.property[property.desc] = new DisplayGear(property.desc, property.cost); } - + $scope.relationships = {}; - for(var i = 0; i < charStruct.relationships.length; i++){ + for(var i = 0; i < charStruct.relationships.length; i++){ var rel = charStruct.relationships[i]; $scope.relationships[rel.desc] = new DisplayRelationship( rel.desc, @@ -154,13 +154,13 @@ function loadCurrentCharacterFromStruct($scope, charStruct, burningData, appropr } $scope.affiliations = {}; - for(var i = 0; i < charStruct.affiliations.length; i++){ + for(var i = 0; i < charStruct.affiliations.length; i++){ var affil = charStruct.affiliations[i]; $scope.affiliations[affil.desc] = new DisplayAffiliation(affil.desc, affil.importance); } $scope.reputations = {}; - for(var i = 0; i < charStruct.reputations.length; i++){ + for(var i = 0; i < charStruct.reputations.length; i++){ var rep = charStruct.reputations[i]; $scope.reputations[rep.desc] = new DisplayReputation(rep.desc, rep.importance); } @@ -173,14 +173,15 @@ function loadCurrentCharacterFromStruct($scope, charStruct, burningData, appropr $scope.attributeModifierQuestionResults = loadAttributeModifierQuestionResultsFromSave($scope, charStruct.attr_mod_questions); $scope.brutalLifeWithdrawn = charStruct.brutal_life_withdrawn; - + $scope.$digest(); + }); } function convertCurrentCharacterToStruct($scope, appropriateWeapons) { // To serialize: // - Serialized version // - Character name - // - Stock + // - Stock // - Gender // - A list Lifepath names, with setting: [setting, lifepath] // - How many points were spent on which stat @@ -225,10 +226,10 @@ function convertCurrentCharacterToStruct($scope, appropriateWeapons) { var displayStat = $scope.stats[i]; stats.push({ - "name" : displayStat.name, - "shade" : displayStat.shade, - "mentalPoints" : displayStat.mentalPointsSpent, - "physicalPoints" : displayStat.physicalPointsSpent, + "name" : displayStat.name, + "shade" : displayStat.shade, + "mentalPoints" : displayStat.mentalPointsSpent, + "physicalPoints" : displayStat.physicalPointsSpent, "eitherPoints" : displayStat.eitherPointsSpent }); } @@ -277,7 +278,7 @@ function convertCurrentCharacterToStruct($scope, appropriateWeapons) { } var res = serializeResource( $scope.gear, function(display){ - return { + return { "cost" : display.cost, "desc" : display.desc }; @@ -285,7 +286,7 @@ function convertCurrentCharacterToStruct($scope, appropriateWeapons) { chardata.gear = res; var res = serializeResource( $scope.property, function(display){ - return { + return { "cost" : display.cost, "desc" : display.desc }; @@ -293,7 +294,7 @@ function convertCurrentCharacterToStruct($scope, appropriateWeapons) { chardata.property = res; var res = serializeResource( $scope.relationships, function(display){ - return { + return { "desc" : display.desc, "importance" : display.importance, "isImmedFam" : display.isImmedFam, @@ -306,7 +307,7 @@ function convertCurrentCharacterToStruct($scope, appropriateWeapons) { chardata.relationships = res; var res = serializeResource( $scope.affiliations, function(display){ - return { + return { "desc" : display.desc, "importance" : display.importance }; @@ -314,7 +315,7 @@ function convertCurrentCharacterToStruct($scope, appropriateWeapons) { chardata.affiliations = res; var res = serializeResource( $scope.reputations, function(display){ - return { + return { "desc" : display.desc, "importance" : display.importance }; diff --git a/src/public/js/burning.js b/src/public/js/burning.js index e51b17a..573aaed 100644 --- a/src/public/js/burning.js +++ b/src/public/js/burning.js @@ -364,14 +364,7 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo $scope.stockSelected = true; } - let loadPromises = []; - if(!burningData.resources[$scope.stock]) { - loadPromises.push(burningData.loadResourcesForStock($scope.stock)); - } - if(!burningData.lifepaths[$scope.stock]) { - loadPromises.push(burningData.loadLifepathsForStock($scope.stock)); - } - Promise.all(loadPromises).then(() => { + $scope.ensureStockLoaded($scope.stock).then(() => { var oldName = $scope.name; // Make a blank character sheet $scope.initialize($scope.stock); @@ -386,9 +379,21 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo calculateSpecialTraitsForDisplay($scope, burningData); calculateGearSelectionLists($scope, burningData); calculatePropertySelectionLists($scope, burningData); + $scope.$digest(); }); } + $scope.ensureStockLoaded = function(stock) { + let loadPromises = []; + if(!burningData.lifepaths[stock]) { + loadPromises.push(burningData.loadLifepathsForStock(stock)); + } + if(!burningData.resources[stock]) { + loadPromises.push(burningData.loadResourcesForStock(stock)); + } + return Promise.all(loadPromises); + }; + $scope.onSettingChange = function(){ calculateCurrentSettingLifepathNames($scope, burningData); @@ -413,8 +418,7 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo } burningData.whenStocksLoaded.then(() => { - $scope.stocks = [{ name: "Select a stock" }]; - $scope.stocks = $scope.stocks.concat(Object.values(burningData.stocks)); + $scope.stocks = [{ name: "Select a stock" }, ...Object.values(burningData.stocks)]; $scope.stockSelected = false; $scope.$digest(); }); -- 2.37.3 From 0b3e725c85f7c01967bddb136473f77e01aac43e Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Thu, 23 Feb 2023 19:07:21 -0600 Subject: [PATCH 32/45] Actually implement custom stock loading... --- src/lib/data/custom.rb | 63 +++++++++++++++--------------------------- 1 file changed, 23 insertions(+), 40 deletions(-) diff --git a/src/lib/data/custom.rb b/src/lib/data/custom.rb index 7878dd6..a64abd9 100644 --- a/src/lib/data/custom.rb +++ b/src/lib/data/custom.rb @@ -3,46 +3,29 @@ require 'json' module Charred module Custom def load_custom(data) - #Dir.glob("data/custom/**/*") { |file| - # if File.file?(file) - # case File.extname(file) - # when "skills" - # verbose_merge data[:skills], json_get(file) - # when "traits" - # verbose_merge data[:traits], json_get(file) - # when "stock" - # stock = Stock.new(json_get(file)) - # data[:stocks][stock.key] = stock # This overwrites existing data... - # when "lifepaths" - # # - # when "resources" - # # - # end - # end - #} - # Dir.glob("data/custom/*/") { |dir| - # stock_name = File.basename(dir) - - # if File.readable?("dir/skills.json") - # skills = json_get("dir/skills.json") - # verbose_merge data[:skills], skills - # end - - # if File.readable?("dir/traits.json") - # traits = json_get("dir/traits.json") - # verbose_merge data[:traits], traits - # end - - # if File.readable?("dir/lifepaths.json") - # lifepaths = json_get("dir/lifepaths.json") - # data[:lifepaths][stock_name] = lifepaths - # end - - # if File.readable?("dir/resources.json") - # resources = json_get("dir/resources.json") - # data[:resources][stock_name] = resources - # end - # } + Dir.glob("data/custom/**/*") { |file| + if File.file?(file) + case File.extname(file) + when ".skills" + verbose_merge data[:skills], json_get(file) + when ".traits" + verbose_merge data[:traits], json_get(file) + when ".stock" + stock = Stock.new(json_get(file)) + if(data[:stocks][stock.key]) + verbose_merge data[:stocks][stock.key], stock + else + data[:stocks][stock.key] = stock + end + when ".lifepaths" + contents = json_get(file) + verbose_merge data[:lifepaths][contents.stock], contents.settings + when ".resources" + contents = json_get(file) + verbose_merge data[:resources][contents.stock], contents.settings + end + end + } end end end -- 2.37.3 From 6e7c8237a70fd88e5a1b7ec92fd9c8277cc0f340 Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Thu, 23 Feb 2023 19:21:03 -0600 Subject: [PATCH 33/45] Define put_or_merge --- src/lib/data.rb | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/lib/data.rb b/src/lib/data.rb index 53d2dea..5b8fa56 100644 --- a/src/lib/data.rb +++ b/src/lib/data.rb @@ -45,6 +45,14 @@ module Charred end end + def put_or_merge(dict, key, value) + if(dict[key]) + verbose_merge dict[key], value + else + dict[key] = value + end + end + def lifepath_requirements(expr) if expr.is_a? Numeric [] -- 2.37.3 From 2fd4b625ce0d6368166318c452a71969bb78f303 Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Thu, 23 Feb 2023 19:21:16 -0600 Subject: [PATCH 34/45] Fix custom stock loading using put_or_merge --- src/lib/data/custom.rb | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/lib/data/custom.rb b/src/lib/data/custom.rb index a64abd9..c357ee5 100644 --- a/src/lib/data/custom.rb +++ b/src/lib/data/custom.rb @@ -12,17 +12,13 @@ module Charred verbose_merge data[:traits], json_get(file) when ".stock" stock = Stock.new(json_get(file)) - if(data[:stocks][stock.key]) - verbose_merge data[:stocks][stock.key], stock - else - data[:stocks][stock.key] = stock - end + put_or_merge data[:stocks], stock.key, stock when ".lifepaths" contents = json_get(file) - verbose_merge data[:lifepaths][contents.stock], contents.settings + put_or_merge data[:lifepaths], contents["stock"], contents["settings"] when ".resources" contents = json_get(file) - verbose_merge data[:resources][contents.stock], contents.settings + put_or_merge data[:resources], contents["stock"], contents["resources"] end end } -- 2.37.3 From c7306cbacf0e0bb766f5c3fcd3863ad0f498283f Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Thu, 23 Feb 2023 20:00:31 -0600 Subject: [PATCH 35/45] Add data for a test stock To use, has to be copied into the data/custom directory --- tests/data/custom/test.lifepaths | 133 +++++++++++++++++++++++++++++++ tests/data/custom/test.resources | 25 ++++++ tests/data/custom/test.skills | 39 +++++++++ tests/data/custom/test.stock | 95 ++++++++++++++++++++++ tests/data/custom/test.traits | 55 +++++++++++++ 5 files changed, 347 insertions(+) create mode 100644 tests/data/custom/test.lifepaths create mode 100644 tests/data/custom/test.resources create mode 100644 tests/data/custom/test.skills create mode 100644 tests/data/custom/test.stock create mode 100644 tests/data/custom/test.traits diff --git a/tests/data/custom/test.lifepaths b/tests/data/custom/test.lifepaths new file mode 100644 index 0000000..384ab4b --- /dev/null +++ b/tests/data/custom/test.lifepaths @@ -0,0 +1,133 @@ +{ + "stock": "test", + "settings": { + "Test Setting": { + "Born Test": { + "time": 7, + "res": 5, + "skills": [ + [ + 1, + "General" + ] + ], + "traits": [ + 2 + ], + "leads": [ + "Nowhere" + ], + "key_leads": [ + "Nowhere Setting" + ] + }, + "A thing": { + "time": 5, + "res": 2, + "stat": [ + [ + 2, + "p" + ] + ], + "skills": [ + [ + 4, + "Testing", + "Forest-wise", + "Stealthy" + ] + ], + "traits": [ + 1 + ], + "leads": [ + "Nowhere" + ], + "key_leads": [ + "Nowhere Setting" + ] + } + }, + "Nowhere Setting": { + "Born Nothing": { + "time": 0, + "res": 0, + "skills": [ + ], + "traits": [ + ], + "leads": [ + ], + "key_leads": [ + ] + }, + "Not A Thing": { + "time": 15, + "res": 1, + "stat": [ + [ + 1, + "pm" + ] + ], + "skills": [ + [ + 2, + "Nothinging", + "Voiding" + ] + ], + "traits": [ + 3 + ], + "leads": [ + "Somewhere" + ], + "key_leads": [ + "Somewhere Subsetting" + ] + } + }, + "Somewhere Subsetting": { + "Something Special": { + "time": 30, + "res": 21, + "stat": [ + [ + 1, + "m" + ],[ + 1, + "p" + ],[ + 1, + "pm" + ] + ], + "skills": [ + [ + 7, + "Specializing", + "Soothing", + "History", + "Sorcery", + "Spirit Binding", + "Harming" + ] + ], + "traits": [ + 3, + "Stubborn", + "Shy" + ], + "leads": [ + "Nowhere" + ], + "key_leads": [ + "Nowhere Setting" + ] + } + } + } +} diff --git a/tests/data/custom/test.resources b/tests/data/custom/test.resources new file mode 100644 index 0000000..6897d35 --- /dev/null +++ b/tests/data/custom/test.resources @@ -0,0 +1,25 @@ +{ + "stock": "test", + "resources": [ + { + "name": "Rags", + "type": "gear", + "rp": 1 + }, + { + "name": "Riches", + "type": "gear", + "rp": 50 + }, + { + "name": "A firey soul", + "type": "gear", + "rp": 3 + }, + { + "name": "Chest or Footlocker", + "type": "gear", + "rp": 3 + } + ] +} diff --git a/tests/data/custom/test.skills b/tests/data/custom/test.skills new file mode 100644 index 0000000..d95490d --- /dev/null +++ b/tests/data/custom/test.skills @@ -0,0 +1,39 @@ +{ + "Testing": { + "stock": "testish", + "roots": [ + "Perception" + ] + }, + "Nothinging": { + "stock": "testish", + "roots": [ + "Will", + "Agility" + ] + }, + "Voiding": { + "stock": "testish", + "roots": [ + "Speed" + ] + }, + "Specializing": { + "stock": "testish", + "roots": [ + "Forte" + ] + }, + "Soothing": { + "stock": "testish", + "roots": [ + "Power" + ] + }, + "Harming": { + "stock": "testish", + "roots": [ + "Will" + ] + } +} diff --git a/tests/data/custom/test.stock b/tests/data/custom/test.stock new file mode 100644 index 0000000..9ad4d47 --- /dev/null +++ b/tests/data/custom/test.stock @@ -0,0 +1,95 @@ +{ + "key": "test", + "name": "Test", + "stride": 9, + "adjective": "testish", + "common_traits": [ + "Trait 1", + "testy", + "Trait #3", + "Night Eyed (Test)" + ], + "starting_stats": + [ + { + "range": [ + 1, + 10 + ], + "m": 1, + "p": 2 + }, + { + "range": [ + 11, + 20 + ], + "m": 2, + "p": 4 + }, + { + "range": [ + 21, + 30 + ], + "m": 3, + "p": 6 + }, + { + "range": [ + 31, + 40 + ], + "m": 4, + "p": 8 + }, + { + "range": [ + 41, + 50 + ], + "m": 5, + "p": 10 + }, + { + "range": [ + 51, + 60 + ], + "m": 6, + "p": 12 + }, + { + "range": [ + 61, + 70 + ], + "m": 7, + "p": 14 + }, + { + "range": [ + 71, + 80 + ], + "m": 8, + "p": 16 + }, + { + "range": [ + 81, + 90 + ], + "m": 9, + "p": 18 + }, + { + "range": [ + 91, + 100 + ], + "m": 10, + "p": 20 + } + ] +} diff --git a/tests/data/custom/test.traits b/tests/data/custom/test.traits new file mode 100644 index 0000000..7220e46 --- /dev/null +++ b/tests/data/custom/test.traits @@ -0,0 +1,55 @@ +{ + "Trait 1": { + "cost": 0, + "type": "die", + "restrict": [ + "testish", + "common" + ], + "desc": "" + }, + "testy": { + "cost": 0, + "type": "die", + "restrict": [ + "testish", + "common" + ], + "desc": "" + }, + "Trait #3": { + "cost": 0, + "type": "die", + "restrict": [ + "testish", + "common" + ], + "desc": "" + }, + "Night Eyed (Test)": { + "cost": 1, + "type": "die", + "restrict": [ + "testish", + "common" + ], + "desc": "The test version" + }, + "Shy": { + "cost": 1, + "type": "character", + "restrict": [ + "testish", + "lifepath" + ] + }, + "Special": { + "cost": 3, + "type": "die", + "restrict": [ + "testish", + "special" + ], + "desc": "Snowflake" + } +} -- 2.37.3 From 00e3f569fe13ada1a94e19aa95a487514b8bdb20 Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Tue, 28 Feb 2023 19:59:45 -0600 Subject: [PATCH 36/45] Increase information in burning-service debugging --- src/public/js/burning-service.js | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/src/public/js/burning-service.js b/src/public/js/burning-service.js index 4891833..fb37d93 100644 --- a/src/public/js/burning-service.js +++ b/src/public/js/burning-service.js @@ -274,8 +274,10 @@ function BurningDataService($http) { this.whenStocksLoaded = fetch("/stocks") .then((response) => response.json()) .then((data) => { - if(DEBUG) - console.log("Loaded stock data: "+data); + if(DEBUG) { + console.log("Loaded stock data:"); + console.log(data); + } myself.stocks = data; for (var stock of Object.keys(data)) { myself.startingStatPts[stock] = new StartingStatPoints(myself.stocks[stock].starting_stats); @@ -290,8 +292,10 @@ function BurningDataService($http) { .then((response) => response.json()) .then((data) => { myself.skills = data; - if(DEBUG) - console.log("Loaded skill data: "+data); + if(DEBUG) { + console.log("Loaded skill data:"); + console.log(data); + } }) .catch((error) => { console.log("Error: Getting skills from server failed: "+error); @@ -302,8 +306,10 @@ function BurningDataService($http) { .then((response) => response.json()) .then((data) => { myself.traits = data; - if(DEBUG) - console.log("Loaded trait data: "+data); + if(DEBUG) { + console.log("Loaded trait data:"); + console.log(data); + } }) .catch((error) => { console.log("Error: Getting traits from server failed: "+error); @@ -318,8 +324,10 @@ function BurningDataService($http) { .then((response) => response.json()) .then((data) => { myself.lifepaths[stock] = data; - if(DEBUG) - console.log("Loaded "+stock+" lifepaths. " + Object.keys(myself.lifepaths[stock]).length + " settings"); + if(DEBUG) { + console.log("Loaded "+stock+" lifepaths:"); + console.log(data); + } }) .catch((error) => { console.log("Error: Getting "+stock+" lifepaths from server failed: "+error); @@ -333,11 +341,13 @@ function BurningDataService($http) { .then((response) => response.json()) .then((data) => { myself.resources[stock] = data; - if(DEBUG) - console.log("Loaded "+stock+" resources. "); + if(DEBUG) { + console.log("Loaded "+stock+" resources:"); + console.log(data); + } }) .catch((error) => { - console.log("Error: Getting "+stock+" stat points from server failed: "+error); + console.log("Error: Getting "+stock+" resources from server failed: "+error); }); }; } -- 2.37.3 From 582379787f84c4625bc4a98b9e3f92ed2e92fa57 Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Wed, 1 Mar 2023 02:27:24 -0600 Subject: [PATCH 37/45] Introduce deep_merge Allows data files to make incremental changes without overwriting everything. --- Gemfile | 3 ++- Gemfile.lock | 2 ++ src/lib/data.rb | 10 ++-------- src/lib/data/custom.rb | 6 +++--- 4 files changed, 9 insertions(+), 12 deletions(-) diff --git a/Gemfile b/Gemfile index 5228531..7385070 100644 --- a/Gemfile +++ b/Gemfile @@ -5,7 +5,8 @@ gem 'sinatra' gem 'sinatra-contrib' gem 'prawn', '2.2.2' gem 'prawn-templates', '0.1.1' +gem 'deep_merge', '~> 1.2', '>= 1.2.1' group :development do gem 'rerun' -end \ No newline at end of file +end diff --git a/Gemfile.lock b/Gemfile.lock index 3c6664b..8c87068 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -5,6 +5,7 @@ GEM afm (0.2.2) backports (3.15.0) daemons (1.3.1) + deep_merge (1.2.2) eventmachine (1.2.7) ffi (1.11.1) hashery (2.1.2) @@ -60,6 +61,7 @@ PLATFORMS ruby DEPENDENCIES + deep_merge (~> 1.2, >= 1.2.1) prawn (= 2.2.2) prawn-templates (= 0.1.1) rerun diff --git a/src/lib/data.rb b/src/lib/data.rb index 5b8fa56..75c2ef3 100644 --- a/src/lib/data.rb +++ b/src/lib/data.rb @@ -1,3 +1,5 @@ +require 'deep_merge' + require_relative 'data/gold' require_relative 'data/wizard' require_relative 'data/dark_elf' @@ -45,14 +47,6 @@ module Charred end end - def put_or_merge(dict, key, value) - if(dict[key]) - verbose_merge dict[key], value - else - dict[key] = value - end - end - def lifepath_requirements(expr) if expr.is_a? Numeric [] diff --git a/src/lib/data/custom.rb b/src/lib/data/custom.rb index c357ee5..b548a71 100644 --- a/src/lib/data/custom.rb +++ b/src/lib/data/custom.rb @@ -12,13 +12,13 @@ module Charred verbose_merge data[:traits], json_get(file) when ".stock" stock = Stock.new(json_get(file)) - put_or_merge data[:stocks], stock.key, stock + data[:stocks].deep_merge!({ stock.key => stock }) when ".lifepaths" contents = json_get(file) - put_or_merge data[:lifepaths], contents["stock"], contents["settings"] + data[:lifepaths].deep_merge!({ contents["stock"] => contents["settings"]}) when ".resources" contents = json_get(file) - put_or_merge data[:resources], contents["stock"], contents["resources"] + data[:resources].deep_merge!({ contents["stock"] => contents["resources"]}) end end } -- 2.37.3 From 071ebe801d3f593c98e9d51d081714d6e714539a Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Wed, 1 Mar 2023 02:34:37 -0600 Subject: [PATCH 38/45] Use ko_deep_merge for incremental data removal --- src/lib/data/custom.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/data/custom.rb b/src/lib/data/custom.rb index b548a71..3ac96a3 100644 --- a/src/lib/data/custom.rb +++ b/src/lib/data/custom.rb @@ -15,10 +15,10 @@ module Charred data[:stocks].deep_merge!({ stock.key => stock }) when ".lifepaths" contents = json_get(file) - data[:lifepaths].deep_merge!({ contents["stock"] => contents["settings"]}) + data[:lifepaths].ko_deep_merge!({ contents["stock"] => contents["settings"]}) when ".resources" contents = json_get(file) - data[:resources].deep_merge!({ contents["stock"] => contents["resources"]}) + data[:resources].ko_deep_merge!({ contents["stock"] => contents["resources"]}) end end } -- 2.37.3 From 2d6d5347988149999bd636b4110f7511d61264eb Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Sat, 11 Mar 2023 13:08:39 -0600 Subject: [PATCH 39/45] Denote intended release of 3.0 --- src/public/js/server_settings.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/public/js/server_settings.js b/src/public/js/server_settings.js index cd41c5b..31c6368 100644 --- a/src/public/js/server_settings.js +++ b/src/public/js/server_settings.js @@ -1,5 +1,5 @@ var serverSettings = { - 'versionString' : '2.3.0', - 'storageType' : 'client', + 'versionString' : '3.0.0-pre-release-custom-stocks', + 'storageType' : 'client', 'displayAttrMath' : 'false' } -- 2.37.3 From bac1626f31a9132ed74386b0f3787c21af61499e Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Mon, 6 Mar 2023 22:16:11 -0600 Subject: [PATCH 40/45] Add 'born' field to born lifepaths --- src/data/gold/lifepaths/dwarf.json | 12 ++++++++---- src/data/gold/lifepaths/elf.json | 6 ++++-- src/data/gold/lifepaths/man.json | 12 +++++++++--- src/data/gold/lifepaths/orc.json | 6 ++++-- src/data/gold/lifepaths/roden.json | 6 ++++-- src/data/gold/lifepaths/wolf.json | 6 ++++-- src/data/troll/lifepaths.json | 9 ++++++--- src/data/wizard/lifepaths.json | 1 + 8 files changed, 40 insertions(+), 18 deletions(-) diff --git a/src/data/gold/lifepaths/dwarf.json b/src/data/gold/lifepaths/dwarf.json index 4bda8c6..171ca96 100644 --- a/src/data/gold/lifepaths/dwarf.json +++ b/src/data/gold/lifepaths/dwarf.json @@ -19,7 +19,8 @@ ], "key_leads": [ "Guilder Setting" - ] + ], + "born": true }, "Tender": { "time": 20, @@ -348,7 +349,8 @@ ], "key_leads": [ "Clansman Setting" - ] + ], + "born": true }, "Wordbearer": { "time": 15, @@ -649,7 +651,8 @@ ], "key_leads": [ "Clansman Setting" - ] + ], + "born": true }, "Ardent": { "time": 21, @@ -931,7 +934,8 @@ "key_leads": [ "Guilder Setting", "Artificer Setting" - ] + ], + "born": true }, "Abecedart": { "time": 20, diff --git a/src/data/gold/lifepaths/elf.json b/src/data/gold/lifepaths/elf.json index c416ed8..46abc40 100644 --- a/src/data/gold/lifepaths/elf.json +++ b/src/data/gold/lifepaths/elf.json @@ -24,7 +24,8 @@ ], "key_leads": [ "Citadel Setting" - ] + ], + "born": true }, "Rider": { "time": 20, @@ -1178,7 +1179,8 @@ "key_leads": [ "Wilderlands Setting", "Citadel Setting" - ] + ], + "born": true }, "Student": { "time": 25, diff --git a/src/data/gold/lifepaths/man.json b/src/data/gold/lifepaths/man.json index b8f5da6..662b57d 100644 --- a/src/data/gold/lifepaths/man.json +++ b/src/data/gold/lifepaths/man.json @@ -25,7 +25,8 @@ "Professional Soldier Subsetting", "Seafaring Setting", "Religious Subsetting" - ] + ], + "born": true }, "Farmer": { "time": 8, @@ -701,6 +702,7 @@ }, "Villager Setting": { "Village Born": { + "born": true, "time": 10, "res": 4, "leads": [ @@ -2408,6 +2410,7 @@ }, "City Dweller Setting": { "City Born": { + "born": true, "time": 12, "res": 10, "leads": [ @@ -5136,7 +5139,8 @@ "Professional Soldier Subsetting", "Seafaring Setting", "Religious Subsetting" - ] + ], + "born": true }, "Bastard": { "time": 6, @@ -7617,7 +7621,8 @@ "key_leads": [ "Professional Soldier Subsetting", "Outcast Subsetting" - ] + ], + "born": true }, "Ditch Digging": { "time": 4, @@ -9874,6 +9879,7 @@ }, "Seafaring Setting": { "Son Of A Gun": { + "born": true, "time": 8, "res": 3, "leads": [ diff --git a/src/data/gold/lifepaths/orc.json b/src/data/gold/lifepaths/orc.json index 0ccb6f8..7639288 100644 --- a/src/data/gold/lifepaths/orc.json +++ b/src/data/gold/lifepaths/orc.json @@ -27,7 +27,8 @@ "key_leads": [ "Black Legion Subsetting", "Servant Of The Dark Blood Subsetting" - ] + ], + "born": true }, "Cattle Slave": { "time": 5, @@ -427,7 +428,8 @@ ], "key_leads": [ "Servant Of The Dark Blood Subsetting" - ] + ], + "born": true }, "The Rites": { "time": 3, diff --git a/src/data/gold/lifepaths/roden.json b/src/data/gold/lifepaths/roden.json index 4b58bde..8931935 100644 --- a/src/data/gold/lifepaths/roden.json +++ b/src/data/gold/lifepaths/roden.json @@ -20,7 +20,8 @@ ], "key_leads": [ "Society Subsetting" - ] + ], + "born": true }, "Hand": { "time": 3, @@ -567,7 +568,8 @@ ], "key_leads": [ "Society Subsetting" - ] + ], + "born": true }, "Pinky": { "time": 2, diff --git a/src/data/gold/lifepaths/wolf.json b/src/data/gold/lifepaths/wolf.json index 6e462b8..ff723ba 100644 --- a/src/data/gold/lifepaths/wolf.json +++ b/src/data/gold/lifepaths/wolf.json @@ -23,7 +23,8 @@ ], "key_leads": [ "Captive Subsetting" - ] + ], + "born": true }, "Yearling": { "time": 1, @@ -329,7 +330,8 @@ ], "key_leads": [ "Captive Subsetting" - ] + ], + "born": true }, "Caged And Beaten": { "time": 0.5, diff --git a/src/data/troll/lifepaths.json b/src/data/troll/lifepaths.json index 1ff511c..f24e7e2 100644 --- a/src/data/troll/lifepaths.json +++ b/src/data/troll/lifepaths.json @@ -19,7 +19,8 @@ ], "key_leads": [ "Pit Setting" - ] + ], + "born": true }, "Bogey": { "time": 7, @@ -249,7 +250,8 @@ ], "key_leads": [ "Pit Setting" - ] + ], + "born": true }, "Dweller": { "time": 4, @@ -384,7 +386,8 @@ "key_leads": [ "Pit Setting", "Cavedweller Setting" - ] + ], + "born": true }, "Tortured": { "time": 3, diff --git a/src/data/wizard/lifepaths.json b/src/data/wizard/lifepaths.json index 2fede98..ef2ab22 100644 --- a/src/data/wizard/lifepaths.json +++ b/src/data/wizard/lifepaths.json @@ -3,6 +3,7 @@ "settings": { "Special Gifted Lifepaths": { "Gifted Child": { + "born": true, "time": 9, "res": 4, "leads": [ -- 2.37.3 From e9361b625b045bad5ce3bdc4d13733b560d3738e Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Mon, 6 Mar 2023 22:23:01 -0600 Subject: [PATCH 41/45] Check for born using property instead of name --- src/public/js/burning.js | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/public/js/burning.js b/src/public/js/burning.js index b855e18..a9dda43 100644 --- a/src/public/js/burning.js +++ b/src/public/js/burning.js @@ -2006,13 +2006,6 @@ function calculatePTGS($scope) { } -function isBornLifepath(lifepathName) { - return lifepathName.indexOf("Born") >= 0 || - lifepathName == "Son Of A Gun" || - lifepathName == "Gifted Child"; -} - - function calculateCurrentSettingLifepathNames($scope, burningData){ var currentSettingLifepathNames = null; @@ -2024,7 +2017,7 @@ function calculateCurrentSettingLifepathNames($scope, burningData){ if ( $scope.selectedLifepaths.length == 0 ){ // Only "Born" lifepaths are allowed for(var i = 0; i < all.length; i++){ - if ( isBornLifepath(all[i]) ){ + if ( burningData.lifepaths[$scope.stock][$scope.currentSetting][all[i]].born ){ currentSettingLifepathNames.push(all[i]); } } @@ -2034,7 +2027,7 @@ function calculateCurrentSettingLifepathNames($scope, burningData){ for(var j = 0; j < lifepathNames.length; j++){ var lifepathName = lifepathNames[j]; - if ( isBornLifepath(lifepathName) ) + if ( burningData.lifepaths[$scope.stock][$scope.currentSetting][lifepathName].born ) continue; var rexpr = burningData.lifepaths[$scope.stock][$scope.currentSetting][lifepathName].requires_expr -- 2.37.3 From 63a8e05401507e7bf13a790bccab731eb9007177 Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Fri, 10 Mar 2023 23:33:40 -0600 Subject: [PATCH 42/45] Check subsetting based on new born property Also cleans up a lot of filtering logic --- src/public/js/burning.js | 56 +++++++++++----------------------------- 1 file changed, 15 insertions(+), 41 deletions(-) diff --git a/src/public/js/burning.js b/src/public/js/burning.js index a9dda43..8d32214 100644 --- a/src/public/js/burning.js +++ b/src/public/js/burning.js @@ -1937,56 +1937,30 @@ function calculateAge($scope){ $scope.age = age; } +function isSubsetting(setting) { return !Object.values(setting).some((lp) => lp.born); } + function calculateSettingNames($scope, burningData){ - var settingNames = null; + let stockSettings = burningData.lifepaths[$scope.stock]; + $scope.settingNames = Object.keys(stockSettings); var lastCurrentSetting = $scope.currentSetting; - if ( ! $scope.enforceLifepathReqts ) { - // Display all settings and subsettings - settingNames = []; - for(key in burningData.lifepaths[$scope.stock]){ - settingNames.push(key); - } - } - else if ( $scope.selectedLifepaths.length == 0 ){ - // All settings are allowed. Subsettings have no Born lifepath so don't include them. - settingNames = []; - for(key in burningData.lifepaths[$scope.stock]){ - if( key.toLowerCase().indexOf("subsetting") < 0 ){ - settingNames.push(key); - } + if ($scope.enforceLifepathReqts){ + if ( $scope.selectedLifepaths.length == 0 ){ + // All settings are allowed. Subsettings have no Born lifepath so don't include them. + $scope.settingNames = $scope.settingNames.filter(s => !isSubsetting(stockSettings[s])); } - } - else { - // Only settings that are leads from the last lifepath are allowed - var lastLifepath = $scope.selectedLifepaths[$scope.selectedLifepaths.length-1]; - settingNames = []; - var all = Object.keys(burningData.lifepaths[$scope.stock]); - for(var i = 0; i < all.length; i++){ - //console.log("calculateSettingNames: checking if '"+all[i]+"' is allowed"); - var setting = all[i]; - - if ( lastLifepath.setting == setting ){ - settingNames.push(setting); - continue; - } - - if ( lastLifepath.leads ){ - for(var j = 0; j < lastLifepath.keyLeads.length; j++){ - var lead = lastLifepath.keyLeads[j]; - //console.log("calculateSettingNames: checking lead: '"+lead+"' is allowed"); + else { + // Only settings that are leads from the last lifepath are allowed + var lastLifepath = $scope.selectedLifepaths[$scope.selectedLifepaths.length-1]; - if( setting == lead ){ - settingNames.push(setting); - } - } - } + // Doing this filtering instead of something like [lastLifepath.setting, ...lastLifepath.leads] + // accomplishes two things: only presents settings present in this server and maintains relative order. + $scope.settingNames = $scope.settingNames.filter(s => s == lastLifepath.setting + || (lastLifepath.leads && lastLifepath.leads.includes(s))); } } - $scope.settingNames = settingNames; - var currentSettingNeedsUpdate = true; for(var i = 0; i < $scope.settingNames.length; i++){ if( $scope.settingNames[i] == lastCurrentSetting){ -- 2.37.3 From 52ec9d5db7ed68c3ee38481127ab894613d0a416 Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Sat, 11 Mar 2023 13:00:51 -0600 Subject: [PATCH 43/45] Fix settings logic --- src/public/js/burning.js | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/public/js/burning.js b/src/public/js/burning.js index 8d32214..090a550 100644 --- a/src/public/js/burning.js +++ b/src/public/js/burning.js @@ -1954,20 +1954,14 @@ function calculateSettingNames($scope, burningData){ // Only settings that are leads from the last lifepath are allowed var lastLifepath = $scope.selectedLifepaths[$scope.selectedLifepaths.length-1]; - // Doing this filtering instead of something like [lastLifepath.setting, ...lastLifepath.leads] - // accomplishes two things: only presents settings present in this server and maintains relative order. + // Doing this filtering instead of [lastLifepath.setting, ...lastLifepath.keyLeads] for two reasons: + // only presents settings present in this server and maintains relative order. $scope.settingNames = $scope.settingNames.filter(s => s == lastLifepath.setting - || (lastLifepath.leads && lastLifepath.leads.includes(s))); + || (Array.isArray(lastLifepath.keyLeads) && lastLifepath.keyLeads.includes(s))); } } - var currentSettingNeedsUpdate = true; - for(var i = 0; i < $scope.settingNames.length; i++){ - if( $scope.settingNames[i] == lastCurrentSetting){ - currentSettingNeedsUpdate = false; - break; - } - } + var currentSettingNeedsUpdate = !$scope.settingNames.includes(lastCurrentSetting); if ( currentSettingNeedsUpdate && $scope.settingNames.length > 0 ){ $scope.currentSetting = $scope.settingNames[0]; -- 2.37.3 From 55e8b907b97508d265aeecab565d4aef4da205f4 Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Sun, 3 Sep 2023 10:55:17 -0500 Subject: [PATCH 44/45] 3.0.0 Changelog draft --- CHANGELOG.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 213aee3..675d2a1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,16 @@ and this project adheres to [Semantic Versioning](semver). - Custom upload for your own data files - Updates to Roden and Great Wolves files (currently the data comes from Monster Burner and not Codex) +## [3.0.0] - [TBD] +### Added +- Custom stocks can now be added to a server +- Stock data moved from code to dedicated data file +- Data files split into stock, lifepath, skills, and traits files, with designated extensions +- "Born" lifepaths with arbitrary names + +### Fixed +- Spite shade calculation + ## [2.3.0] - 2019-07-28 ### Added - Display emotional attribute traits on PDF @@ -59,4 +69,4 @@ and this project adheres to [Semantic Versioning](semver). [changelog]: https://keepachangelog.com/en/1.0.0/ -[semver]: https://semver.org/spec/v2.0.0.html \ No newline at end of file +[semver]: https://semver.org/spec/v2.0.0.html -- 2.37.3 From 381c65d44d677b1651996659080231f8c63faa87 Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Sun, 3 Sep 2023 11:05:11 -0500 Subject: [PATCH 45/45] Version bump for 3.0.0 release --- CHANGELOG.md | 2 +- src/public/js/server_settings.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 675d2a1..a5f4f44 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,7 @@ and this project adheres to [Semantic Versioning](semver). - Custom upload for your own data files - Updates to Roden and Great Wolves files (currently the data comes from Monster Burner and not Codex) -## [3.0.0] - [TBD] +## [3.0.0] - 2023-09-03 ### Added - Custom stocks can now be added to a server - Stock data moved from code to dedicated data file diff --git a/src/public/js/server_settings.js b/src/public/js/server_settings.js index 31c6368..c845460 100644 --- a/src/public/js/server_settings.js +++ b/src/public/js/server_settings.js @@ -1,5 +1,5 @@ var serverSettings = { - 'versionString' : '3.0.0-pre-release-custom-stocks', + 'versionString' : '3.0.0', 'storageType' : 'client', 'displayAttrMath' : 'false' } -- 2.37.3