drpedia_lite 0.0.10 → 0.0.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/Builder.rb +5 -1
- data/lib/RawReader.rb +57 -15
- data/lib/Validator.rb +34 -2
- data/lib/input/input.txt +57 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 358ad75f9e4734dff6d4a472ab2f64a49f774c4d
|
4
|
+
data.tar.gz: 610ea0637481581fffe2ff0bc8f393b78584d3c0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 665d5e323f6cd5b045f4bcbb565a6fa63ecdc9c3f6bbeb83ad17dbe4794754f0a5d6dfe4d8c52e6f46063e121d61d88e7032d1c833d4a9976aa262be00cbb81d
|
7
|
+
data.tar.gz: d0b195d516f122590288d53f9cb3a549f22e0abcadac4532a86e66fc18979f1b7bce4889d98e34afcad1fa898e8630c9a476e5e0a1db15fac8c6a0dd7e70e021
|
data/lib/Builder.rb
CHANGED
@@ -10,7 +10,9 @@ class Builder
|
|
10
10
|
skill_group: raw_reader.skill_group,
|
11
11
|
skill_cat: raw_reader.skill_cat,
|
12
12
|
strains: raw_reader.strains,
|
13
|
-
professions: raw_reader.professions
|
13
|
+
professions: raw_reader.professions,
|
14
|
+
strain_stats: raw_reader.strain_stats,
|
15
|
+
strain_specs: raw_reader.strain_specs
|
14
16
|
|
15
17
|
File.open(File.join(base_output_path, 'strains.json'), 'w') { |f| f.write raw_reader.strains.to_a.to_json }
|
16
18
|
File.open(File.join(base_output_path, 'professions.json'), 'w') { |f| f.write raw_reader.professions.to_a.to_json }
|
@@ -18,5 +20,7 @@ class Builder
|
|
18
20
|
File.open(File.join(base_output_path, 'skill_cat.json'), 'w') { |f| f.write raw_reader.skill_cat.to_json }
|
19
21
|
File.open(File.join(base_output_path, 'skill_group.json'), 'w') { |f| f.write raw_reader.skill_group.to_json }
|
20
22
|
File.open(File.join(base_output_path, 'skill_list.json'), 'w') { |f| f.write raw_reader.skill_list.to_json }
|
23
|
+
File.open(File.join(base_output_path, 'strain_stats.json'), 'w') { |f| f.write raw_reader.strain_stats.to_json }
|
24
|
+
File.open(File.join(base_output_path, 'strain_specs.json'), 'w') { |f| f.write raw_reader.strain_specs.to_json }
|
21
25
|
end
|
22
26
|
end
|
data/lib/RawReader.rb
CHANGED
@@ -1,16 +1,19 @@
|
|
1
1
|
require 'set'
|
2
2
|
|
3
3
|
class RawReader
|
4
|
-
attr_reader :skill_list, :skill_cat, :strains, :professions, :strain_restrictions, :skill_group
|
4
|
+
attr_reader :skill_list, :skill_cat, :strains, :professions, :strain_restrictions, :skill_group, :strain_stats, :strain_specs
|
5
5
|
STATE_TRANSITION = {
|
6
|
-
:undef
|
7
|
-
:innate
|
8
|
-
:
|
9
|
-
:
|
10
|
-
:
|
11
|
-
:
|
12
|
-
:
|
13
|
-
:
|
6
|
+
:undef => { pattern: /== Advantage Skill ==/, next: :innate },
|
7
|
+
:innate => { pattern: /== Disadvantage Skill ==/, next: :strain_disadv },
|
8
|
+
:strain_disadv => { pattern: /== Innate Skill Prerequisite ==/, next: :innate_preq },
|
9
|
+
:innate_preq => { pattern: /== Strain Profession Restriction ==/, next: :strain_rtrs },
|
10
|
+
:strain_rtrs => { pattern: /== Strain Stats ==/, next: :strain_stats },
|
11
|
+
:strain_stats => { pattern: /== Strain Specific Skills ==/, next: :strain_specs },
|
12
|
+
:strain_specs => { pattern: /== Open Skill ==/, next: :open },
|
13
|
+
:open => { pattern: /==/, next: :profession },
|
14
|
+
:profession => { pattern: /== Skill Group ==/, next: :skill_group },
|
15
|
+
:skill_group => { pattern: /== Skill List ==/, next: :list },
|
16
|
+
:list => { pattern: /./, next: :list }
|
14
17
|
}
|
15
18
|
|
16
19
|
def initialize filepath:
|
@@ -20,6 +23,8 @@ class RawReader
|
|
20
23
|
@strains = Set.new
|
21
24
|
@strain_restrictions = Hash.new
|
22
25
|
@skill_group = Hash.new
|
26
|
+
@strain_specs = Hash.new
|
27
|
+
@strain_stats = Hash.new
|
23
28
|
@professions = Set.new
|
24
29
|
|
25
30
|
begin
|
@@ -40,6 +45,7 @@ private
|
|
40
45
|
def post_process_sets
|
41
46
|
@skill_cat.each do |_junk, data|
|
42
47
|
data[:innate] = data[:innate].to_a
|
48
|
+
data[:innate_disadvantage] = data[:innate_disadvantage].to_a
|
43
49
|
end
|
44
50
|
end
|
45
51
|
|
@@ -79,8 +85,11 @@ private
|
|
79
85
|
|
80
86
|
case state
|
81
87
|
when :innate then process_innate_skills line: line
|
88
|
+
when :strain_disadv then process_innate_skills line: line, disadvantage: true
|
82
89
|
when :innate_preq then process_innate_preqs line: line
|
83
90
|
when :strain_rtrs then process_strain_restrictions line: line
|
91
|
+
when :strain_stats then process_strain_stats line: line
|
92
|
+
when :strain_specs then process_strain_specs line: line
|
84
93
|
when :open then process_open_skills line: line
|
85
94
|
when :profession then process_profession_skills line: line, profession: profession
|
86
95
|
when :skill_group then process_skill_group line: line
|
@@ -88,12 +97,12 @@ private
|
|
88
97
|
end
|
89
98
|
end
|
90
99
|
|
91
|
-
def process_innate_skills line:
|
100
|
+
def process_innate_skills line:, disadvantage: false
|
92
101
|
innate_skill = line.split(/:/)
|
93
102
|
strain = innate_skill[0].to_sym
|
94
103
|
skills = innate_skill[1].split(/,/)
|
95
104
|
|
96
|
-
smart_insert strain: strain, skills: skills
|
105
|
+
smart_insert strain: strain, skills: skills, disadvantage: disadvantage
|
97
106
|
end
|
98
107
|
|
99
108
|
def process_innate_preqs line:
|
@@ -120,6 +129,33 @@ private
|
|
120
129
|
end
|
121
130
|
end
|
122
131
|
|
132
|
+
def process_strain_specs line:
|
133
|
+
clusters = line.split(/:/)
|
134
|
+
right_cluster = clusters[1].split(/\|/)
|
135
|
+
|
136
|
+
strain = clusters[0].strip.to_sym
|
137
|
+
adv = Array.new
|
138
|
+
dis = Array.new
|
139
|
+
right_cluster[0].split(/\,/).each { |x| adv.push(x.strip.to_sym )}
|
140
|
+
right_cluster[1].split(/\,/).each { |x| dis.push(x.strip.to_sym )}
|
141
|
+
|
142
|
+
@strain_specs[strain] = {
|
143
|
+
advantages: adv,
|
144
|
+
disadvantages: dis
|
145
|
+
}
|
146
|
+
end
|
147
|
+
|
148
|
+
def process_strain_stats line:
|
149
|
+
clusters = line.split(/:/)
|
150
|
+
right_cluster = clusters[1].split(/\,/)
|
151
|
+
|
152
|
+
@strain_stats[clusters[0].strip.to_sym] = {
|
153
|
+
hp: right_cluster[0].strip.to_i,
|
154
|
+
mp: right_cluster[1].strip.to_i,
|
155
|
+
infection: right_cluster[2].strip.to_i
|
156
|
+
}
|
157
|
+
end
|
158
|
+
|
123
159
|
def process_skill_group line:
|
124
160
|
@skill_group[line.strip.to_sym] = Hash.new
|
125
161
|
end
|
@@ -172,7 +208,7 @@ private
|
|
172
208
|
end
|
173
209
|
end
|
174
210
|
|
175
|
-
def smart_insert strain: nil, skills: nil, open_skills: nil, profession_skills: nil
|
211
|
+
def smart_insert strain: nil, skills: nil, open_skills: nil, profession_skills: nil, disadvantage: false
|
176
212
|
if strain and skills
|
177
213
|
@strains.add strain
|
178
214
|
skills.each do |_skill|
|
@@ -180,9 +216,15 @@ private
|
|
180
216
|
skill = _skill.strip.to_sym
|
181
217
|
@skill_cat[skill] ||= Hash.new
|
182
218
|
@skill_cat[skill][:innate] ||= Set.new
|
183
|
-
|
184
|
-
|
185
|
-
|
219
|
+
@skill_cat[skill][:innate_disadvantage] ||= Set.new
|
220
|
+
|
221
|
+
if !disadvantage
|
222
|
+
skill_cat_innate = @skill_cat[skill][:innate]
|
223
|
+
skill_cat_innate.add strain.to_sym
|
224
|
+
else
|
225
|
+
skill_cat_innate = @skill_cat[skill][:innate_disadvantage]
|
226
|
+
skill_cat_innate.add strain.to_sym
|
227
|
+
end
|
186
228
|
end
|
187
229
|
elsif open_skills
|
188
230
|
@skill_cat[open_skills[:skill]] ||= Hash.new
|
data/lib/Validator.rb
CHANGED
@@ -2,15 +2,25 @@ require 'test/unit/assertions'
|
|
2
2
|
|
3
3
|
class Validator
|
4
4
|
include Test::Unit::Assertions
|
5
|
-
def initialize skill_list:,
|
5
|
+
def initialize skill_list:,
|
6
|
+
skill_group:,
|
7
|
+
skill_cat:,
|
8
|
+
strains:,
|
9
|
+
professions:,
|
10
|
+
strain_stats:,
|
11
|
+
strain_specs:
|
6
12
|
@skill_list = skill_list
|
7
13
|
@skill_group = skill_group
|
8
14
|
@skill_cat = skill_cat
|
9
15
|
@strains = strains
|
10
16
|
@professions = professions
|
17
|
+
@strain_stats = strain_stats
|
18
|
+
@strain_specs = strain_specs
|
11
19
|
|
12
20
|
validate_non_empty
|
13
21
|
validate_skill_name_matches
|
22
|
+
validate_stats
|
23
|
+
validate_strain_specs
|
14
24
|
end
|
15
25
|
|
16
26
|
private
|
@@ -21,6 +31,28 @@ private
|
|
21
31
|
assert(@professions.length > 0, "Empty professions")
|
22
32
|
end
|
23
33
|
|
34
|
+
def validate_strain_specs
|
35
|
+
cumulative_strain_specs = Hash.new
|
36
|
+
|
37
|
+
@strain_specs.each do |strain, specs|
|
38
|
+
is_in_strain?(strain)
|
39
|
+
specs[:advantages].concat(specs[:disadvantages]).each do |spec|
|
40
|
+
assert(cumulative_strain_specs[spec] == nil,
|
41
|
+
"Duplicate strain-specific skill: [#{strain}] [#{spec}]")
|
42
|
+
|
43
|
+
cumulative_strain_specs[spec] = true
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def validate_stats
|
49
|
+
@strain_stats.each do |strain, stats|
|
50
|
+
is_in_strain?(strain)
|
51
|
+
assert(stats.keys.sort == [:hp, :mp, :infection].sort,
|
52
|
+
"Strain stats must contain HP, MP and Infection")
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
24
56
|
def validate_skill_name_matches
|
25
57
|
mismatches = Array.new
|
26
58
|
@skill_cat.each do |skill_name, sdata|
|
@@ -32,7 +64,7 @@ private
|
|
32
64
|
|
33
65
|
sdata.each do |stype, stdata|
|
34
66
|
case stype
|
35
|
-
when :innate
|
67
|
+
when :innate, :innate_disadvantage
|
36
68
|
stdata.each do |strain|
|
37
69
|
is_in_strain?(strain)
|
38
70
|
end
|
data/lib/input/input.txt
CHANGED
@@ -21,11 +21,68 @@ Unborn of Teixiptla: Melee Weapon - Two Handed, Psionic Skill - Basic, Throwing
|
|
21
21
|
Vegasians: Backstab, Black Market Connections, Cheat, Entertain, Lie, Literacy
|
22
22
|
Yorker: Barricade, Bomb Awareness, Chase, Entertain, Interfere, Melee Weapon - Standard
|
23
23
|
|
24
|
+
== Disadvantage Skill ==
|
25
|
+
Natural Ones: Bolt Action
|
26
|
+
|
24
27
|
== Innate Skill Prerequisite ==
|
25
28
|
Iron Slaves: Iron Fists: Brawling
|
26
29
|
|
27
30
|
== Strain Profession Restriction ==
|
31
|
+
Baywalkers: Sawbones, Primitive, Thug
|
32
|
+
Diesel Jocks: Farmer, Politician, Publican
|
33
|
+
Lascarians: Charlatan, Entertainer, Gambler, Hook-Up, Merchant, Officer, Politician, Ring Leader
|
28
34
|
Mericans: Martial Artist, Spy
|
35
|
+
The Red Star: Caravan Driver, Charlatan, Entertainer, Gambler, Priest
|
36
|
+
Semper Mort: Pugilist
|
37
|
+
Unborn of Teixiptla: Engineer, Mad Scientist, Psionist
|
38
|
+
Vegasians: Guard, Gun Slinger, Martial Artist, Officer
|
39
|
+
Yorker: Charlatan, Officer, Politician
|
40
|
+
|
41
|
+
== Strain Stats ==
|
42
|
+
Baywalkers: 8, 10, 4
|
43
|
+
Diesel Jocks: 10, 10, 3
|
44
|
+
Full Dead: 20, 10, 1
|
45
|
+
Genjian: 6, 6, 5
|
46
|
+
Iron Slaves: 7, 4, 4
|
47
|
+
Lascarians: 10, 5, 5
|
48
|
+
Mericans: 13, 10, 2
|
49
|
+
Nation of Accensor: 8, 8, 5
|
50
|
+
Natural Ones: 10, 6, 4
|
51
|
+
Pure Blood: 6, 12, 3
|
52
|
+
Reclaimers: 8, 13, 2
|
53
|
+
The Red Star: 6, 6, 6
|
54
|
+
Remnants: 5, 5, 6
|
55
|
+
Retrogrades: 10, 10, 4
|
56
|
+
Rovers: 8, 8, 4
|
57
|
+
Saltwise: 13, 8, 3
|
58
|
+
Semper Mort: 10, 10, 3
|
59
|
+
Solestros: 6, 6, 4
|
60
|
+
Unborn of Teixiptla: 4, 4, 7
|
61
|
+
Vegasians: 5, 10, 5
|
62
|
+
Yorker: 15, 5, 4
|
63
|
+
|
64
|
+
== Strain Specific Skills ==
|
65
|
+
Baywalkers: Fast Learner, Old Wounds | Toxic Shock, A Tale of Two Cities, Too Clever
|
66
|
+
Diesel Jocks: Need of Food | Road Bound, Endless Miles of Road
|
67
|
+
Full Dead: Gnaw, Legion | One of Us, Grave Mind, Diverse Background
|
68
|
+
Genjian: Social Observer, Know Your Enemy | The Long Walk, Honor Bound
|
69
|
+
Iron Slaves: Able Helper, Strong Back | Bioluminescent, Humble Roots
|
70
|
+
Lascarians: Cannibalism | Light Sensitivity, Savage Culture
|
71
|
+
Mericans: Merican Mob | Social Pariah, Yeeee-Haaaaw!
|
72
|
+
Nation of Accensor: Meditation, Blessed Life | Code of Ethics, First In Last Out
|
73
|
+
Natural Ones: Natural Aim | Shun the Boomstick, Xenophobic, Backward
|
74
|
+
Pure Blood: Investment | Weakness to Radiation, Peacocks
|
75
|
+
Reclaimers: Dead Nerves | Selective Breeding
|
76
|
+
The Red Star: Collective Pride | Reject Free Enterprise, Opiate of the Masses
|
77
|
+
Remnants: Dabbler | Rootless, Love Me, Not Like the Others
|
78
|
+
Retrogrades: Half-Life | Rot Face, Unfriendly Face
|
79
|
+
Rovers: Bond of Salt | Word of Bond
|
80
|
+
Saltwise: Oceanic Masters, Water Breathers | Ocean Bound, Debts Owed
|
81
|
+
Semper Mort: Hunter's Claws, Mortal Bonds, Blood is the Life | Curse of Slumber, Predator's Need, Twisted Hands
|
82
|
+
Solestros: Middle Manager | Second in Command, Glass Ceiling
|
83
|
+
Unborn of Teixiptla: Undead Hearts | Limited Potential, Called to the Grave
|
84
|
+
Vegasians: Meat Market, Coward's Way Out (AKA Buddy Fucker) | Born Coward, Bad Rap, Shady Dealers
|
85
|
+
Yorker: Pissed-Off Yorker | Commitment Issues, Angry Streak, Mean Streets
|
29
86
|
|
30
87
|
== Open Skill ==
|
31
88
|
Avoid 9
|