gloomhaven 1.0.7.1 → 1.0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +7 -1
- data/changelog.md +4 -0
- data/config/characters.yml +62 -17
- data/gloomhaven.gemspec +1 -0
- data/lib/gloomhaven/deck.rb +3 -0
- data/lib/gloomhaven/player.rb +23 -7
- data/lib/gloomhaven/version.rb +1 -1
- data/lib/gloomhaven.rb +3 -1
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b9a9c6115b2132fd750f361c54257be7fb60eeeaec8c8a2e8c03f17f12d58a0f
|
4
|
+
data.tar.gz: dd2fd656988020b324b62276c29080d0c1fc06e14f32eeb0f811c6e1729d0f2b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 881c7920a31728ba1a9aeb43a0ff6558bb1f03696af946a3486e310cf5e8508fe0f342f884b1afe8d172196e43c02550879c225c39157be89657fc9ea3a80392
|
7
|
+
data.tar.gz: 2ee41842565711ddbea09bcf82ead6de444a9a7dfc25ceca5a50e648f4f078448716a37c99048b26580a810588d0e0cbce8edddbcd8f64d49109df4c08b5ffb8
|
data/Gemfile.lock
CHANGED
@@ -1,13 +1,18 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
gloomhaven (1.0.
|
4
|
+
gloomhaven (1.0.8.0)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
|
+
coderay (1.1.2)
|
9
10
|
diff-lcs (1.3)
|
10
11
|
docile (1.3.2)
|
12
|
+
method_source (0.9.2)
|
13
|
+
pry (0.12.2)
|
14
|
+
coderay (~> 1.1.0)
|
15
|
+
method_source (~> 0.9.0)
|
11
16
|
rake (13.0.1)
|
12
17
|
rspec (3.9.0)
|
13
18
|
rspec-core (~> 3.9.0)
|
@@ -33,6 +38,7 @@ PLATFORMS
|
|
33
38
|
DEPENDENCIES
|
34
39
|
bundler (~> 2.0)
|
35
40
|
gloomhaven!
|
41
|
+
pry
|
36
42
|
rake (~> 13.0)
|
37
43
|
rspec (~> 3.0)
|
38
44
|
simplecov (~> 0.18.4)
|
data/changelog.md
CHANGED
data/config/characters.yml
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
---
|
2
|
-
|
2
|
+
-
|
3
|
+
name: Beast Tyrant
|
4
|
+
spoiler_name: Two Mini
|
5
|
+
number: 17
|
3
6
|
perks:
|
4
7
|
remove_two_minus_one_cards: 1
|
5
8
|
replace_one_minus_one_card_with_one_plus_one_card: 3
|
@@ -9,7 +12,10 @@ beast_tyrant:
|
|
9
12
|
add_two_rolling_heal_plus_one_cards: 3
|
10
13
|
add_two_rolling_nature_cards: 1
|
11
14
|
ignore_negative_scenario_effects: 1
|
12
|
-
|
15
|
+
-
|
16
|
+
name: Berserker
|
17
|
+
spoiler_name: Lightning Bolt
|
18
|
+
number: 12
|
13
19
|
perks:
|
14
20
|
remove_two_minus_one_cards: 1
|
15
21
|
remove_four_plus_zero_cards: 1
|
@@ -21,7 +27,9 @@ berserker:
|
|
21
27
|
add_two_rolling_heal_plus_one_cards: 1
|
22
28
|
add_one_plus_two_fire_card: 2
|
23
29
|
ignore_negative_item_effects: 1
|
24
|
-
|
30
|
+
-
|
31
|
+
name: Brute
|
32
|
+
number: 1
|
25
33
|
perks:
|
26
34
|
remove_two_minus_one_cards: 1
|
27
35
|
replace_one_minus_one_card_with_one_plus_one_card: 1
|
@@ -34,7 +42,9 @@ brute:
|
|
34
42
|
add_one_rolling_add_target_card: 2
|
35
43
|
add_one_plus_one_shield_one_self_card: 1
|
36
44
|
ignore_negative_item_effects_and_add_one_plus_one_card: 1
|
37
|
-
|
45
|
+
-
|
46
|
+
name: Cragheart
|
47
|
+
number: 5
|
38
48
|
perks:
|
39
49
|
remove_four_plus_zero_cards: 1
|
40
50
|
replace_one_minus_one_card_with_one_plus_one_card: 3
|
@@ -46,7 +56,10 @@ cragheart:
|
|
46
56
|
add_two_rolling_air_cards: 1
|
47
57
|
ignore_negative_item_effects: 1
|
48
58
|
ignore_negative_scenario_effects: 1
|
49
|
-
|
59
|
+
-
|
60
|
+
name: Doomstalker
|
61
|
+
spoiler_name: Angry Face
|
62
|
+
number: 14
|
50
63
|
perks:
|
51
64
|
remove_two_minus_one_cards: 2
|
52
65
|
replace_two_plus_zero_cards_with_two_plus_one_cards: 3
|
@@ -58,7 +71,10 @@ doomstalker:
|
|
58
71
|
add_one_plus_zero_stun_card: 1
|
59
72
|
add_one_rolling_add_target_card: 2
|
60
73
|
ignore_negative_scenario_effects: 1
|
61
|
-
|
74
|
+
-
|
75
|
+
name: Elementalist
|
76
|
+
spoiler_name: Triforce
|
77
|
+
number: 16
|
62
78
|
perks:
|
63
79
|
remove_two_minus_one_cards: 2
|
64
80
|
replace_one_minus_one_card_with_one_plus_one_card: 1
|
@@ -73,7 +89,9 @@ elementalist:
|
|
73
89
|
add_one_plus_one_wound_card: 1
|
74
90
|
add_one_plus_zero_stun_card: 1
|
75
91
|
add_one_plus_zero_add_target_card: 1
|
76
|
-
|
92
|
+
-
|
93
|
+
name: Mindthief
|
94
|
+
number: 6
|
77
95
|
perks:
|
78
96
|
remove_two_minus_one_cards: 2
|
79
97
|
remove_four_plus_zero_cards: 1
|
@@ -87,7 +105,10 @@ mindthief:
|
|
87
105
|
add_one_rolling_stun_card: 1
|
88
106
|
add_one_rolling_disarm_card_and_one_rolling_muddle_card: 1
|
89
107
|
ignore_negative_scenario_effects: 1
|
90
|
-
|
108
|
+
-
|
109
|
+
name: Nightshroud
|
110
|
+
spoiler_name: Eclipse/Moon
|
111
|
+
number: 10
|
91
112
|
perks:
|
92
113
|
remove_two_minus_one_cards: 2
|
93
114
|
remove_four_plus_zero_cards: 1
|
@@ -99,7 +120,10 @@ nightshroud:
|
|
99
120
|
add_two_rolling_curse_cards: 2
|
100
121
|
add_one_rolling_add_target_card: 1
|
101
122
|
ignore_negative_scenario_effects_and_add_two_plus_one_cards: 1
|
102
|
-
|
123
|
+
-
|
124
|
+
name: Plagueherald
|
125
|
+
spoiler_name: Cthulu
|
126
|
+
number: 11
|
103
127
|
perks:
|
104
128
|
replace_one_minus_two_card_with_one_plus_zero_card: 1
|
105
129
|
replace_one_minus_one_card_with_one_plus_one_card: 2
|
@@ -111,7 +135,10 @@ plagueherald:
|
|
111
135
|
add_two_rolling_immobilize_cards: 1
|
112
136
|
add_one_rolling_stun_card: 2
|
113
137
|
ignore_negative_scenario_effects_and_add_one_plus_one_card: 1
|
114
|
-
|
138
|
+
-
|
139
|
+
name: Quartermaster
|
140
|
+
spoiler_name: Three Spears
|
141
|
+
number: 8
|
115
142
|
perks:
|
116
143
|
remove_two_minus_one_cards: 2
|
117
144
|
remove_four_plus_zero_cards: 1
|
@@ -123,7 +150,10 @@ quartermaster:
|
|
123
150
|
add_one_rolling_add_target_card: 1
|
124
151
|
add_one_plus_zero_refresh_an_item_card: 3
|
125
152
|
ignore_negative_item_effects_and_add_two_plus_one_cards: 1
|
126
|
-
|
153
|
+
-
|
154
|
+
name: Sawbones
|
155
|
+
spoiler_name: Saw
|
156
|
+
number: 15
|
127
157
|
perks:
|
128
158
|
remove_two_minus_one_cards: 2
|
129
159
|
remove_four_plus_zero_cards: 1
|
@@ -134,7 +164,9 @@ sawbones:
|
|
134
164
|
add_one_rolling_stun_card: 1
|
135
165
|
add_one_rolling_heal_plus_three_card: 2
|
136
166
|
add_one_plus_zero_refresh_an_item_card: 1
|
137
|
-
|
167
|
+
-
|
168
|
+
name: Scoundrel
|
169
|
+
number: 4
|
138
170
|
perks:
|
139
171
|
remove_two_minus_one_cards: 2
|
140
172
|
remove_four_plus_zero_cards: 1
|
@@ -147,7 +179,10 @@ scoundrel:
|
|
147
179
|
add_two_rolling_muddle_cards: 1
|
148
180
|
add_one_rolling_invisible_card: 1
|
149
181
|
ignore_negative_scenario_effects: 1
|
150
|
-
|
182
|
+
-
|
183
|
+
name: Soothsinger
|
184
|
+
spoiler_name: Music Note
|
185
|
+
number: 13
|
151
186
|
perks:
|
152
187
|
remove_two_minus_one_cards: 2
|
153
188
|
remove_one_minus_two_card: 1
|
@@ -161,7 +196,9 @@ soothsinger:
|
|
161
196
|
replace_one_minus_one_card_with_one_plus_zero_stun_card: 1
|
162
197
|
add_three_rolling_plus_one_cards: 1
|
163
198
|
add_two_rolling_curse_cards: 2
|
164
|
-
|
199
|
+
-
|
200
|
+
name: Spellweaver
|
201
|
+
number: 3
|
165
202
|
perks:
|
166
203
|
remove_four_plus_zero_cards: 1
|
167
204
|
replace_one_minus_one_card_with_one_plus_one_card: 2
|
@@ -174,7 +211,10 @@ spellweaver:
|
|
174
211
|
add_one_plus_two_ice_card: 2
|
175
212
|
add_one_rolling_nature_and_one_rolling_air_card: 1
|
176
213
|
add_one_rolling_light_and_one_rolling_dark_card: 1
|
177
|
-
|
214
|
+
-
|
215
|
+
name: Summoner
|
216
|
+
spoiler_name: Concentric Circles
|
217
|
+
number: 9
|
178
218
|
perks:
|
179
219
|
remove_two_minus_one_cards: 1
|
180
220
|
replace_one_minus_two_card_with_one_plus_zero_card: 1
|
@@ -186,7 +226,10 @@ summoner:
|
|
186
226
|
add_one_rolling_fire_and_one_rolling_air_card: 1
|
187
227
|
add_one_rolling_dark_and_one_rolling_nature_card: 1
|
188
228
|
ignore_negative_scenario_effects_and_add_two_plus_one_cards: 1
|
189
|
-
|
229
|
+
-
|
230
|
+
name: Sunkeeper
|
231
|
+
spoiler_name: Sun
|
232
|
+
number: 7
|
190
233
|
perks:
|
191
234
|
remove_two_minus_one_cards: 2
|
192
235
|
remove_four_plus_zero_cards: 1
|
@@ -199,7 +242,9 @@ sunkeeper:
|
|
199
242
|
add_two_rolling_shield_1_self_cards: 1
|
200
243
|
ignore_negative_item_effects_and_add_two_plus_one_cards: 1
|
201
244
|
ignore_negative_scenario_effects: 1
|
202
|
-
|
245
|
+
-
|
246
|
+
name: Tinkerer
|
247
|
+
number: 2
|
203
248
|
perks:
|
204
249
|
remove_two_minus_one_cards: 2
|
205
250
|
replace_one_minus_two_card_with_one_plus_zero_card: 1
|
data/gloomhaven.gemspec
CHANGED
data/lib/gloomhaven/deck.rb
CHANGED
@@ -41,11 +41,14 @@ module Gloomhaven
|
|
41
41
|
end
|
42
42
|
|
43
43
|
##
|
44
|
+
# Shuffles the deck if trying to draw without any cards left in pile.
|
44
45
|
# Removes the top card from the deck, adds it to the @drawn_cards array (unless it's a bless/curse)
|
45
46
|
# Returns the drawn card.
|
46
47
|
# Ex: Deck.new.draw
|
47
48
|
# => #<Card >
|
48
49
|
def draw
|
50
|
+
shuffle! if @cards.empty?
|
51
|
+
|
49
52
|
card = @cards.shift
|
50
53
|
@drawn_cards << card unless card.bless? || card.curse?
|
51
54
|
card
|
data/lib/gloomhaven/player.rb
CHANGED
@@ -4,16 +4,16 @@ module Gloomhaven
|
|
4
4
|
attr_reader :character_class, :name, :deck
|
5
5
|
attr_accessor :gold, :items, :perks, :xp
|
6
6
|
|
7
|
-
def initialize(options = {
|
7
|
+
def initialize(options = {})
|
8
8
|
validate!(options)
|
9
9
|
|
10
10
|
@character_class = options[:character_class].downcase
|
11
11
|
@deck = Deck.new
|
12
12
|
@name = options[:name]
|
13
|
-
@gold = 0
|
13
|
+
@gold = options[:gold] || 0
|
14
|
+
@xp = options[:xp] || 0
|
14
15
|
@items = []
|
15
16
|
@perks = []
|
16
|
-
@xp = 0
|
17
17
|
end
|
18
18
|
|
19
19
|
def add_perk!(perk)
|
@@ -26,8 +26,12 @@ module Gloomhaven
|
|
26
26
|
|
27
27
|
private
|
28
28
|
|
29
|
+
def character
|
30
|
+
CHARACTERS.detect { |character| character['name'].downcase == character_class.downcase }
|
31
|
+
end
|
32
|
+
|
29
33
|
def character_class_perks
|
30
|
-
|
34
|
+
character['perks'].keys
|
31
35
|
end
|
32
36
|
|
33
37
|
def existing_perk_count(perk)
|
@@ -35,7 +39,7 @@ module Gloomhaven
|
|
35
39
|
end
|
36
40
|
|
37
41
|
def character_perk_limit(perk)
|
38
|
-
|
42
|
+
character['perks'][perk.key]
|
39
43
|
end
|
40
44
|
|
41
45
|
def update_attack_modifier_deck_from!(perk)
|
@@ -46,19 +50,31 @@ module Gloomhaven
|
|
46
50
|
def validate!(options)
|
47
51
|
validate_character_class!(options[:character_class])
|
48
52
|
validate_name!(options[:name])
|
53
|
+
validate_gold!(options[:gold])
|
54
|
+
validate_xp!(options[:xp])
|
49
55
|
end
|
50
56
|
|
51
57
|
def validate_character_class!(character_class)
|
52
58
|
raise ArgumentError.new("options[:character_class] cannot be blank") if character_class.nil?
|
53
59
|
|
54
|
-
unless Gloomhaven::
|
55
|
-
raise TypeError.new("Invalid character_class: #{character_class} is not supported. Must be one of the following: #{Gloomhaven::
|
60
|
+
unless Gloomhaven::CHARACTER_NAMES.map(&:downcase).include?(character_class.downcase)
|
61
|
+
raise TypeError.new("Invalid character_class: #{character_class} is not supported. Must be one of the following: #{Gloomhaven::CHARACTER_NAMES}")
|
56
62
|
end
|
57
63
|
end
|
58
64
|
|
65
|
+
def validate_gold!(gold)
|
66
|
+
return unless gold
|
67
|
+
raise ArgumentError.new("options[:gold] must be an Integer") unless gold.is_a?(Integer)
|
68
|
+
end
|
69
|
+
|
59
70
|
def validate_name!(name)
|
60
71
|
raise ArgumentError.new("options[:name] cannot be blank") if name.nil?
|
61
72
|
raise ArgumentError.new("options[:name] must be a String") unless name.is_a?(String)
|
62
73
|
end
|
74
|
+
|
75
|
+
def validate_xp!(xp)
|
76
|
+
return unless xp
|
77
|
+
raise ArgumentError.new("options[:xp] must be an Integer") unless xp.is_a?(Integer)
|
78
|
+
end
|
63
79
|
end
|
64
80
|
end
|
data/lib/gloomhaven/version.rb
CHANGED
data/lib/gloomhaven.rb
CHANGED
@@ -9,9 +9,11 @@ module Gloomhaven
|
|
9
9
|
class CardNotFoundError < StandardError; end
|
10
10
|
|
11
11
|
CARDS = YAML.load(File.read(File.join(File.dirname(__FILE__), '../config/cards.yml')))
|
12
|
-
CHARACTERS = YAML.load(File.read(File.join(File.dirname(__FILE__), '../config/characters.yml')))
|
12
|
+
CHARACTERS = YAML.load(File.read(File.join(File.dirname(__FILE__), '../config/characters.yml'))).sort_by { |c| c['number'] }
|
13
13
|
PERKS = YAML.load(File.read(File.join(File.dirname(__FILE__), '../config/perks.yml')))
|
14
14
|
|
15
|
+
CHARACTER_NAMES = CHARACTERS.map { |character| character['name'] }.map(&:downcase)
|
16
|
+
|
15
17
|
def self.version
|
16
18
|
VERSION
|
17
19
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gloomhaven
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Teo Dell'Amico
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-03-
|
11
|
+
date: 2020-03-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 0.18.4
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: pry
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
69
83
|
description:
|
70
84
|
email:
|
71
85
|
- teo.dellamico@gmail.com
|