-
Notifications
You must be signed in to change notification settings - Fork 17
/
wizard.rb
119 lines (99 loc) · 3.88 KB
/
wizard.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
require 'json'
module Charred
module Wizard
def load_wizard(data)
file = File.read('data/wizard/lifepaths.json')
wizard_data = JSON.parse(file)
file = File.read('data/wizard/skills.json')
wizard_skills = JSON.parse(file)
verbose_merge data[:skills], wizard_skills
file = File.read('data/wizard/traits.json')
wizard_traits = JSON.parse(file)
verbose_merge data[:traits], wizard_traits
man = data[:lifepaths]['man']
man['College of Magic Setting'] = wizard_data['College of Magic Setting']
man['Death Cult Setting'] = wizard_data['Death Cult Setting']
data[:lifepaths]['orc']['Servant Of The Dark Blood Subsetting'].merge!(wizard_data['Servant Of The Dark Blood Subsetting'])
[
'Peasant Setting',
'Villager Setting',
'City Dweller Setting',
'Noble Court Subsetting',
'Outcast Subsetting'
].each do |setting|
man[setting].merge!(wizard_data[setting])
end
[
'Peasant Setting',
'Villager Setting',
'City Dweller Setting',
'Seafaring Setting',
'Servitude And Captive Setting'
].each do |setting|
man[setting].merge!({
'Gifted Child' => wizard_data['Special Gifted Lifepaths']['Gifted Child']
})
end
[
'Noble Court Subsetting',
'Religious Subsetting',
'Outcast Subsetting',
'Professional Soldier Subsetting'
].each do |setting|
man[setting].merge!({
'Apt Pupil' => wizard_data['Special Gifted Lifepaths']['Apt Pupil']
})
end
leads_short = {
'College of Magic Setting' => 'College',
'Death Cult Setting' => 'Death',
}
# backfill leads
leads_short.keys.each do |wiz_set|
wizard_data[wiz_set].keys.each do |wiz_lp|
lifepath = wizard_data[wiz_set][wiz_lp]
next if !lifepath['requires_expr']
requirements = self.lifepath_requirements(lifepath['requires_expr'])
requirements.each do |req|
setting = nil
req_lp = req
setting, req_lp = req.split(':') if req.include? ':'
man.keys.each do |man_set|
next if wiz_set.downcase == man_set.downcase
next if setting && setting != man_set.downcase
man[man_set].keys.each do |man_lp|
next if req_lp != man_lp.downcase
#puts "adding #{wiz_set}:#{wiz_lp} lead to #{man_set}:#{man_lp}"
man[man_set][man_lp]['key_leads'] |= [wiz_set]
man[man_set][man_lp]['leads'] |= [leads_short[wiz_set]]
end
end
end
end
end
# backfill Neophyte Sorcerer and Arcane Devotee connections
man.keys.each do |man_set|
man[man_set].keys.each do |man_lp|
requirements = self.lifepath_requirements(man[man_set][man_lp]["requires_expr"])
requirements.collect! { |req| req.include?(':') ? req.split(":")[1].downcase : req.downcase }
if requirements.include? "neophyte sorcerer"
if man[man_set][man_lp]["requires_expr"].include? "neophyte sorcerer"
man[man_set][man_lp]["requires_expr"] |= ["apt pupil", "wizard's apprentice", "junior student"]
else
puts "warning, could not add neophyte sorcerer connection to deep requirements array at #{man_set}:#{man_lp}"
end
end
if requirements.include? "arcane devotee"
if man[man_set][man_lp]["requires_expr"].include? "arcane devotee"
man[man_set][man_lp]["requires_expr"] |= ["junior student"]
else
puts "warning, could not add arcane devotee connection to deep requirements array at #{man_set}:#{man_lp}"
end
end
end
end
data[:lifepaths]['man'] = man
data
end
end
end