gloomhaven 0.1.0 → 1.0.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 +1 -1
- data/README.md +66 -17
- data/config/cards.yml +240 -25
- data/config/characters.yml +214 -0
- data/config/perks.yml +555 -0
- data/lib/gloomhaven/card.rb +19 -26
- data/lib/gloomhaven/deck.rb +7 -7
- data/lib/gloomhaven/perk.rb +32 -0
- data/lib/gloomhaven/player.rb +52 -0
- data/lib/gloomhaven/version.rb +1 -1
- data/lib/gloomhaven.rb +11 -1
- metadata +6 -2
data/config/perks.yml
ADDED
@@ -0,0 +1,555 @@
|
|
1
|
+
---
|
2
|
+
add_one_minus_one_dark_card:
|
3
|
+
description: Add one -1 Dark card
|
4
|
+
add:
|
5
|
+
-
|
6
|
+
card_name: Attack -1 Dark
|
7
|
+
count: 1
|
8
|
+
add_one_minus_two_card_and_two_plus_two_cards:
|
9
|
+
description: Add one -2 card and two +2 cards
|
10
|
+
add:
|
11
|
+
-
|
12
|
+
card_name: Attack -2
|
13
|
+
count: 1
|
14
|
+
-
|
15
|
+
card_name: Attack +2
|
16
|
+
count: 2
|
17
|
+
add_one_plus_one_air_card:
|
18
|
+
description: Add one +1 Air card
|
19
|
+
add:
|
20
|
+
-
|
21
|
+
card_name: Attack +1 Air
|
22
|
+
count: 1
|
23
|
+
add_one_plus_one_curse_card:
|
24
|
+
description: Add one +0 CURSE card
|
25
|
+
add:
|
26
|
+
-
|
27
|
+
card_name: Attack +0 Curse
|
28
|
+
count: 1
|
29
|
+
add_one_plus_one_heal_plus_two_card:
|
30
|
+
description: Add one +1 Heal +2 card
|
31
|
+
add:
|
32
|
+
-
|
33
|
+
card_name: Attack +1 Heal +2
|
34
|
+
count: 1
|
35
|
+
add_one_plus_one_immobilize_card:
|
36
|
+
description: Add one +1 IMMOBILIZE card
|
37
|
+
add:
|
38
|
+
-
|
39
|
+
card_name: Attack +1 Immobilize
|
40
|
+
count: 1
|
41
|
+
add_one_plus_one_invisible_card:
|
42
|
+
description: Add one +1 INVISIBLE card
|
43
|
+
add:
|
44
|
+
-
|
45
|
+
card_name: Attack +1 Invisible
|
46
|
+
count: 1
|
47
|
+
add_one_plus_one_poison_card:
|
48
|
+
description: Add one +1 POISON card
|
49
|
+
add:
|
50
|
+
-
|
51
|
+
card_name: Attack +1 Poison
|
52
|
+
count: 1
|
53
|
+
add_one_plus_one_shield_one_self_card:
|
54
|
+
description: Add one +1 Shield 1, Self card
|
55
|
+
add:
|
56
|
+
-
|
57
|
+
card_name: Attack +1 Shield 1
|
58
|
+
count: 1
|
59
|
+
add_one_plus_one_wound_card:
|
60
|
+
description: Add one +1 WOUND card
|
61
|
+
add:
|
62
|
+
-
|
63
|
+
card_name: Attack +1 Wound
|
64
|
+
count: 1
|
65
|
+
add_one_plus_three_card:
|
66
|
+
description: Add one +3 card
|
67
|
+
add:
|
68
|
+
-
|
69
|
+
card_name: Attack +3
|
70
|
+
count: 1
|
71
|
+
add_one_plus_two_card:
|
72
|
+
description: Add one +2 card
|
73
|
+
add:
|
74
|
+
-
|
75
|
+
card_name: Attack +2
|
76
|
+
count: 1
|
77
|
+
add_one_plus_two_fire_card:
|
78
|
+
description: Add one +2 Fire Card
|
79
|
+
add:
|
80
|
+
-
|
81
|
+
card_name: Attack +2 Fire
|
82
|
+
count: 1
|
83
|
+
add_one_plus_two_ice_card:
|
84
|
+
description: Add one +2 Ice Card
|
85
|
+
add:
|
86
|
+
-
|
87
|
+
card_name: Attack +2 Ice
|
88
|
+
count: 1
|
89
|
+
add_one_plus_two_muddle_card:
|
90
|
+
description: Add one +2 MUDDLE card
|
91
|
+
add:
|
92
|
+
-
|
93
|
+
card_name: Attack +2 Muddle
|
94
|
+
count: 1
|
95
|
+
add_one_plus_zero_add_target_card:
|
96
|
+
description: Add one +0 ADD TARGET card
|
97
|
+
add:
|
98
|
+
-
|
99
|
+
card_name: Attack +0 Add Target
|
100
|
+
count: 1
|
101
|
+
add_one_plus_zero_refresh_an_item_card:
|
102
|
+
description: Add one +0 Refresh an item card
|
103
|
+
add:
|
104
|
+
-
|
105
|
+
card_name: Attack +0 Refresh item
|
106
|
+
count: 1
|
107
|
+
add_one_plus_zero_stun_card:
|
108
|
+
description: Add one +0 STUN card
|
109
|
+
add:
|
110
|
+
-
|
111
|
+
card_name: Attack +0 Stun
|
112
|
+
count: 1
|
113
|
+
add_one_rolling_add_target_card:
|
114
|
+
description: Add one Rolling ADD TARGET card
|
115
|
+
add:
|
116
|
+
-
|
117
|
+
card_name: Rolling Add Target
|
118
|
+
count: 1
|
119
|
+
add_one_rolling_dark_and_one_rolling_nature_card:
|
120
|
+
description: Add one Rolling Dark and one Rolling Nature card
|
121
|
+
add:
|
122
|
+
-
|
123
|
+
card_name: Rolling Dark
|
124
|
+
count: 1
|
125
|
+
-
|
126
|
+
card_name: Rolling Nature
|
127
|
+
count: 1
|
128
|
+
add_one_rolling_disarm_card_and_one_rolling_muddle_card:
|
129
|
+
description: Add one Rolling DISARM card and one Rolling MUDDLE card
|
130
|
+
add:
|
131
|
+
-
|
132
|
+
card_name: Rolling Disarm
|
133
|
+
count: 1
|
134
|
+
-
|
135
|
+
card_name: Rolling Muddle
|
136
|
+
count: 1
|
137
|
+
add_one_rolling_fire_and_one_rolling_air_card:
|
138
|
+
description: Add one Rolling Fire and one Rolling Air card
|
139
|
+
add:
|
140
|
+
-
|
141
|
+
card_name: Rolling Fire
|
142
|
+
count: 1
|
143
|
+
-
|
144
|
+
card_name: Rolling Air
|
145
|
+
count: 1
|
146
|
+
add_one_rolling_heal_plus_three_card:
|
147
|
+
description: Add one Rolling Heal +3 card
|
148
|
+
add:
|
149
|
+
-
|
150
|
+
card_name: Rolling Heal +3
|
151
|
+
count: 1
|
152
|
+
add_one_rolling_invisible_card:
|
153
|
+
description: Add two Rolling INVISIBLE cards
|
154
|
+
add:
|
155
|
+
-
|
156
|
+
card_name: Rolling Invisible
|
157
|
+
count: 1
|
158
|
+
add_one_rolling_light_and_one_rolling_dark_card:
|
159
|
+
description: Add one Rolling Light and one Rolling Dark card
|
160
|
+
add:
|
161
|
+
-
|
162
|
+
card_name: Rolling Light
|
163
|
+
count: 1
|
164
|
+
-
|
165
|
+
card_name: Rolling Dark
|
166
|
+
count: 1
|
167
|
+
add_one_rolling_nature_and_one_rolling_air_card:
|
168
|
+
description: Add one Rolling Nature and one Rolling Air card
|
169
|
+
add:
|
170
|
+
-
|
171
|
+
card_name: Rolling Nature
|
172
|
+
count: 1
|
173
|
+
-
|
174
|
+
card_name: Rolling Air
|
175
|
+
count: 1
|
176
|
+
add_one_rolling_plus_one_disarm_card:
|
177
|
+
description: Add one Rolling +1 DISARM card
|
178
|
+
add:
|
179
|
+
-
|
180
|
+
card_name: Rolling Attack +1 Disarm
|
181
|
+
count: 1
|
182
|
+
add_one_rolling_plus_two_card:
|
183
|
+
description: Add one Rolling +2 card
|
184
|
+
add:
|
185
|
+
-
|
186
|
+
card_name: Rolling Attack +2
|
187
|
+
count: 1
|
188
|
+
add_one_rolling_stun_card:
|
189
|
+
description: Add one Rolling STUN card
|
190
|
+
add:
|
191
|
+
-
|
192
|
+
card_name: Rolling Stun
|
193
|
+
count: 1
|
194
|
+
add_three_plus_zero_air_cards:
|
195
|
+
description: Add three +0 Air cards
|
196
|
+
add:
|
197
|
+
-
|
198
|
+
card_name: Attack +0 Air
|
199
|
+
count: 3
|
200
|
+
add_three_plus_zero_fire_cards:
|
201
|
+
description: Add three +0 Fire cards
|
202
|
+
add:
|
203
|
+
-
|
204
|
+
card_name: Attack +0 Fire
|
205
|
+
count: 3
|
206
|
+
add_three_plus_zero_ice_cards:
|
207
|
+
description: Add three +0 Ice cards
|
208
|
+
add:
|
209
|
+
-
|
210
|
+
card_name: Attack +0 Ice
|
211
|
+
count: 3
|
212
|
+
add_three_plus_zero_nature_cards:
|
213
|
+
description: Add three +0 Nature cards
|
214
|
+
add:
|
215
|
+
-
|
216
|
+
card_name: Attack +0 Nature
|
217
|
+
count: 3
|
218
|
+
add_three_rolling_muddle_cards:
|
219
|
+
description: Add three Rolling MUDDLE cards
|
220
|
+
add:
|
221
|
+
-
|
222
|
+
card_name: Rolling Muddle
|
223
|
+
count: 3
|
224
|
+
add_three_rolling_plus_one_cards:
|
225
|
+
description: Add three Rolling +1 cards
|
226
|
+
add:
|
227
|
+
-
|
228
|
+
card_name: Rolling Attack +1
|
229
|
+
count: 3
|
230
|
+
add_three_rolling_poison_cards:
|
231
|
+
description: Add three Rolling POISON cards
|
232
|
+
add:
|
233
|
+
-
|
234
|
+
card_name: Rolling Poison
|
235
|
+
count: 3
|
236
|
+
add_three_rolling_pull_one_cards:
|
237
|
+
description: Add three Rolling PULL 1 cards
|
238
|
+
add:
|
239
|
+
-
|
240
|
+
card_name: Rolling Pull 1
|
241
|
+
count: 3
|
242
|
+
add_three_rolling_push_one_cards:
|
243
|
+
description: Add three Rolling PUSH 1 cards
|
244
|
+
add:
|
245
|
+
-
|
246
|
+
card_name: Rolling Push 1
|
247
|
+
count: 3
|
248
|
+
add_two_plus_one_cards:
|
249
|
+
description: Add two +1 cards
|
250
|
+
add:
|
251
|
+
-
|
252
|
+
card_name: Attack +1
|
253
|
+
count: 2
|
254
|
+
add_two_plus_one_push_one_cards:
|
255
|
+
description: Add two +1 PUSH 1 cards
|
256
|
+
add:
|
257
|
+
-
|
258
|
+
card_name: Attack +1 Push 1
|
259
|
+
count: 2
|
260
|
+
add_two_rolling_air_cards:
|
261
|
+
description: Add two Rolling Air Cards
|
262
|
+
add:
|
263
|
+
-
|
264
|
+
card_name: Rolling Air
|
265
|
+
count: 2
|
266
|
+
add_two_rolling_curse_cards:
|
267
|
+
description: Add two Rolling CURSE cards
|
268
|
+
add:
|
269
|
+
-
|
270
|
+
card_name: Rolling Curse
|
271
|
+
count: 2
|
272
|
+
add_two_rolling_fire_cards:
|
273
|
+
description: Add two Rolling Fire cards
|
274
|
+
add:
|
275
|
+
-
|
276
|
+
card_name: Rolling Fire
|
277
|
+
count: 2
|
278
|
+
add_two_rolling_heal_plus_one_cards:
|
279
|
+
description: Add two Rolling Heal +1 cards
|
280
|
+
add:
|
281
|
+
-
|
282
|
+
card_name: Rolling Heal +1
|
283
|
+
count: 2
|
284
|
+
add_two_rolling_immobilize_cards:
|
285
|
+
description: Add two Rolling IMMOBILIZE cards
|
286
|
+
add:
|
287
|
+
-
|
288
|
+
card_name: Rolling Immobilize
|
289
|
+
count: 2
|
290
|
+
add_two_rolling_light_cards:
|
291
|
+
description: Add two Rolling Light cards
|
292
|
+
add:
|
293
|
+
-
|
294
|
+
card_name: Rolling Light
|
295
|
+
count: 2
|
296
|
+
add_two_rolling_muddle_cards:
|
297
|
+
description: Add two Rolling MUDDLE cards
|
298
|
+
add:
|
299
|
+
-
|
300
|
+
card_name: Rolling Muddle
|
301
|
+
count: 2
|
302
|
+
add_two_rolling_nature_cards:
|
303
|
+
description: Add two Rolling Nature Cards
|
304
|
+
add:
|
305
|
+
-
|
306
|
+
card_name: Rolling Nature
|
307
|
+
count: 2
|
308
|
+
add_two_rolling_pierce_three_cards:
|
309
|
+
description: Add two Rolling PIERCE 3 cards
|
310
|
+
add:
|
311
|
+
-
|
312
|
+
card_name: Rolling Pierce 3
|
313
|
+
count: 2
|
314
|
+
add_two_rolling_plus_one_cards:
|
315
|
+
description: Add two Rolling +1 cards
|
316
|
+
add:
|
317
|
+
-
|
318
|
+
card_name: Rolling Attack +1
|
319
|
+
count: 2
|
320
|
+
add_two_rolling_poison_cards:
|
321
|
+
description: Add two Rolling POISON cards
|
322
|
+
add:
|
323
|
+
-
|
324
|
+
card_name: Rolling Poison
|
325
|
+
count: 2
|
326
|
+
add_two_rolling_push_two_cards:
|
327
|
+
description: Add two Rolling PUSH 2 cards
|
328
|
+
add:
|
329
|
+
-
|
330
|
+
card_name: Rolling Push 2
|
331
|
+
count: 2
|
332
|
+
add_two_rolling_shield_1_self_cards:
|
333
|
+
description: Add two Rolling Shield 1, Self cards
|
334
|
+
add:
|
335
|
+
-
|
336
|
+
card_name: Rolling Shield 1, self
|
337
|
+
count: 2
|
338
|
+
add_two_rolling_wound_cards:
|
339
|
+
description: Add two Rolling WOUND cards
|
340
|
+
add:
|
341
|
+
-
|
342
|
+
card_name: Rolling Wound
|
343
|
+
count: 2
|
344
|
+
ignore_negative_item_effects:
|
345
|
+
description: Ignore negative item effects
|
346
|
+
ignore_negative_item_effects_and_add_one_plus_one_card:
|
347
|
+
description: Ignore negative item effects and add one +1 card
|
348
|
+
add:
|
349
|
+
-
|
350
|
+
card_name: Attack +1
|
351
|
+
count: 1
|
352
|
+
ignore_negative_item_effects_and_add_two_plus_one_cards:
|
353
|
+
description: Ignore negative item effects and add two +1 cards
|
354
|
+
add:
|
355
|
+
-
|
356
|
+
card_name: Attack +1
|
357
|
+
count: 2
|
358
|
+
ignore_negative_scenario_effects:
|
359
|
+
description: Ignore negative scenario effects
|
360
|
+
ignore_negative_scenario_effects_and_add_one_plus_one_card:
|
361
|
+
description: Ignore scenario item effects and add one +1 card
|
362
|
+
add:
|
363
|
+
-
|
364
|
+
card_name: Attack +1
|
365
|
+
count: 1
|
366
|
+
ignore_negative_scenario_effects_and_add_two_plus_one_cards:
|
367
|
+
description: Ignore scenario item effects and add two +1 cards
|
368
|
+
add:
|
369
|
+
-
|
370
|
+
card_name: Attack +1
|
371
|
+
count: 2
|
372
|
+
remove_four_plus_zero_cards:
|
373
|
+
description: Remove four +1 cards
|
374
|
+
remove:
|
375
|
+
-
|
376
|
+
card_name: Attack +0
|
377
|
+
count: 4
|
378
|
+
remove_one_minus_two_card:
|
379
|
+
description: Remove one -2 card
|
380
|
+
remove:
|
381
|
+
-
|
382
|
+
card_name: Attack -2
|
383
|
+
count: 1
|
384
|
+
remove_two_minus_one_cards:
|
385
|
+
description: Remove two -1 cards
|
386
|
+
remove:
|
387
|
+
-
|
388
|
+
card_name: Attack -1
|
389
|
+
count: 2
|
390
|
+
replace_one_minus_one_card_with_one_plus_one_card:
|
391
|
+
description: Replace one -1 card with one +1 card
|
392
|
+
add:
|
393
|
+
-
|
394
|
+
card_name: Attack +1
|
395
|
+
count: 1
|
396
|
+
remove:
|
397
|
+
-
|
398
|
+
card_name: Attack -1
|
399
|
+
count: 1
|
400
|
+
replace_one_minus_one_card_with_one_plus_zero_stun_card:
|
401
|
+
description: Replace one +0 card with one +0 STUN card
|
402
|
+
add:
|
403
|
+
-
|
404
|
+
card_name: Attack +0 Stun
|
405
|
+
count: 1
|
406
|
+
remove:
|
407
|
+
-
|
408
|
+
card_name: Attack +0
|
409
|
+
count: 1
|
410
|
+
replace_one_minus_one_dark_card_with_one_plus_one_dark_card:
|
411
|
+
description: Replace one -1 Dark card with one +1 Dark card
|
412
|
+
add:
|
413
|
+
-
|
414
|
+
card_name: Attack +1 Dark
|
415
|
+
count: 1
|
416
|
+
remove:
|
417
|
+
-
|
418
|
+
card_name: Attack -1 Dark
|
419
|
+
count: 1
|
420
|
+
replace_one_minus_two_card_with_one_plus_zero_card:
|
421
|
+
description: Replace one -2 card with one +0 card
|
422
|
+
add:
|
423
|
+
-
|
424
|
+
card_name: Attack +0
|
425
|
+
count: 1
|
426
|
+
remove:
|
427
|
+
-
|
428
|
+
card_name: Attack -2
|
429
|
+
count: 1
|
430
|
+
replace_one_plus_zero_card_with_one_plus_one_disarm_card:
|
431
|
+
description: Replace one +0 card with one +1 DISARM card
|
432
|
+
add:
|
433
|
+
-
|
434
|
+
card_name: Attack +1 Disarm
|
435
|
+
count: 1
|
436
|
+
remove:
|
437
|
+
-
|
438
|
+
card_name: Attack +0
|
439
|
+
count: 1
|
440
|
+
replace_one_plus_zero_card_with_one_plus_one_immobilize_card:
|
441
|
+
description: Replace one +0 card with one +1 IMMOBILIZE card
|
442
|
+
add:
|
443
|
+
-
|
444
|
+
card_name: Attack +1 Immobilize
|
445
|
+
count: 1
|
446
|
+
remove:
|
447
|
+
-
|
448
|
+
card_name: Attack +0
|
449
|
+
count: 1
|
450
|
+
replace_one_plus_zero_card_with_one_plus_three_muddle_card:
|
451
|
+
description: Replace one +0 card with one +3 MUDDLE card
|
452
|
+
add:
|
453
|
+
-
|
454
|
+
card_name: Attack +3 Muddle
|
455
|
+
count: 1
|
456
|
+
remove:
|
457
|
+
-
|
458
|
+
card_name: Attack +0
|
459
|
+
count: 1
|
460
|
+
replace_one_plus_zero_card_with_one_plus_two_card:
|
461
|
+
description: Replace one +0 card with one +2 card
|
462
|
+
add:
|
463
|
+
-
|
464
|
+
card_name: Attack +2
|
465
|
+
count: 1
|
466
|
+
remove:
|
467
|
+
-
|
468
|
+
card_name: Attack +0
|
469
|
+
count: 1
|
470
|
+
replace_one_plus_zero_card_with_one_plus_two_poison_card:
|
471
|
+
description: Replace one +0 card with one +2 POISON card
|
472
|
+
add:
|
473
|
+
-
|
474
|
+
card_name: Attack +2 Poison
|
475
|
+
count: 1
|
476
|
+
remove:
|
477
|
+
-
|
478
|
+
card_name: Attack +0
|
479
|
+
count: 1
|
480
|
+
replace_one_plus_zero_card_with_one_plus_two_wound_card:
|
481
|
+
description: Replace one +0 card with one +2 WOUND card
|
482
|
+
add:
|
483
|
+
-
|
484
|
+
card_name: Attack +2 Wound
|
485
|
+
count: 1
|
486
|
+
remove:
|
487
|
+
-
|
488
|
+
card_name: Attack +0
|
489
|
+
count: 1
|
490
|
+
replace_one_plus_zero_card_with_one_rolling_plus_two_card:
|
491
|
+
description: Replace one +0 card with one Rolling +2 card
|
492
|
+
add:
|
493
|
+
-
|
494
|
+
card_name: Rolling Attack +2
|
495
|
+
count: 1
|
496
|
+
remove:
|
497
|
+
-
|
498
|
+
card_name: Attack +0
|
499
|
+
count: 1
|
500
|
+
replace_two_plus_one_cards_with_one_plus_four_card:
|
501
|
+
description: Replace two +1 cards with one +4 card
|
502
|
+
add:
|
503
|
+
-
|
504
|
+
card_name: Attack +4
|
505
|
+
count: 1
|
506
|
+
remove:
|
507
|
+
-
|
508
|
+
card_name: Attack +1
|
509
|
+
count: 2
|
510
|
+
replace_two_plus_one_cards_with_two_plus_two_cards:
|
511
|
+
description: Replace two +1 cards with two +2 cards
|
512
|
+
add:
|
513
|
+
-
|
514
|
+
card_name: Attack +2
|
515
|
+
count: 2
|
516
|
+
remove:
|
517
|
+
-
|
518
|
+
card_name: Attack +1
|
519
|
+
count: 2
|
520
|
+
replace_two_plus_zero_cards_with_one_plus_zero_fire_and_one_plus_zero_nature_card:
|
521
|
+
description: Replace two +0 cards with one +0 Fire and one +0 Nature card
|
522
|
+
add:
|
523
|
+
-
|
524
|
+
card_name: Attack +0 Fire
|
525
|
+
count: 1
|
526
|
+
-
|
527
|
+
card_name: Attack +0 Nature
|
528
|
+
count: 1
|
529
|
+
remove:
|
530
|
+
-
|
531
|
+
card_name: Attack +0
|
532
|
+
count: 2
|
533
|
+
replace_two_plus_zero_cards_with_one_plus_zero_ice_and_one_plus_zero_air_card:
|
534
|
+
description: Replace two +0 cards with one +0 Ice and one +0 Air card
|
535
|
+
add:
|
536
|
+
-
|
537
|
+
card_name: Attack +0 Ice
|
538
|
+
count: 1
|
539
|
+
-
|
540
|
+
card_name: Attack +0 Air
|
541
|
+
count: 1
|
542
|
+
remove:
|
543
|
+
-
|
544
|
+
card_name: Attack +0
|
545
|
+
count: 2
|
546
|
+
replace_two_plus_zero_cards_with_two_plus_one_cards:
|
547
|
+
description: Replace two +0 cards with two +1 cards
|
548
|
+
add:
|
549
|
+
-
|
550
|
+
card_name: Attack +1
|
551
|
+
count: 2
|
552
|
+
remove:
|
553
|
+
-
|
554
|
+
card_name: Attack +0
|
555
|
+
count: 2
|
data/lib/gloomhaven/card.rb
CHANGED
@@ -1,25 +1,20 @@
|
|
1
1
|
module Gloomhaven
|
2
2
|
class Card
|
3
|
-
attr_reader :attack
|
4
|
-
attr_reader :crit
|
5
|
-
attr_reader :name
|
6
|
-
attr_reader :miss
|
7
|
-
attr_reader :shuffle
|
8
|
-
|
9
|
-
# returns a card object from the card name
|
10
|
-
def self.find(name)
|
11
|
-
Card.new(find_id_by_name(name))
|
12
|
-
end
|
13
3
|
|
14
|
-
|
15
|
-
|
4
|
+
attr_reader :attack, :crit, :miss, :name, :shuffle
|
5
|
+
|
6
|
+
def initialize(name)
|
7
|
+
raise ArgumentError.new('Name must be a string') unless name.is_a?(String)
|
16
8
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
@
|
21
|
-
@
|
22
|
-
@
|
9
|
+
card_data = CARDS.detect { |card| card['name'].downcase == name.downcase }
|
10
|
+
validate!(card_data)
|
11
|
+
|
12
|
+
@name = card_data['name']
|
13
|
+
@attack = card_data['attack']
|
14
|
+
@crit = card_data['crit'] == true
|
15
|
+
@miss = card_data['miss'] == true
|
16
|
+
@rolling = card_data['rolling'] == true
|
17
|
+
@shuffle = card_data['shuffle'] == true
|
23
18
|
end
|
24
19
|
|
25
20
|
def bless?
|
@@ -30,16 +25,14 @@ module Gloomhaven
|
|
30
25
|
name.downcase == 'curse'
|
31
26
|
end
|
32
27
|
|
33
|
-
|
34
|
-
|
35
|
-
# returns yaml-id of the card by name
|
36
|
-
def self.find_id_by_name(name)
|
37
|
-
CARDS.select { |id, attributes| attributes['name'].downcase == name.downcase }.keys.first
|
28
|
+
def rolling?
|
29
|
+
@rolling
|
38
30
|
end
|
39
31
|
|
40
|
-
|
41
|
-
|
42
|
-
|
32
|
+
private
|
33
|
+
|
34
|
+
def validate!(data)
|
35
|
+
raise CardNotFoundError.new unless data
|
43
36
|
end
|
44
37
|
end
|
45
38
|
end
|
data/lib/gloomhaven/deck.rb
CHANGED
@@ -17,7 +17,7 @@ module Gloomhaven
|
|
17
17
|
# Ex:
|
18
18
|
#
|
19
19
|
# deck = Deck.new
|
20
|
-
# card = Card.
|
20
|
+
# card = Card.new('Attack +3')
|
21
21
|
# deck.add!(card)
|
22
22
|
def add!(card)
|
23
23
|
raise TypeError.new('Card must be a Gloomhaven::Card') unless card.is_a?(Gloomhaven::Card)
|
@@ -29,14 +29,14 @@ module Gloomhaven
|
|
29
29
|
##
|
30
30
|
# Adds a bless card to the current deck, then soft shuffles
|
31
31
|
def bless!
|
32
|
-
@cards << Card.
|
32
|
+
@cards << Card.new('Bless')
|
33
33
|
shuffle!(soft_shuffle: true)
|
34
34
|
end
|
35
35
|
|
36
36
|
##
|
37
37
|
# Adds a curse card to the current deck, then soft shuffles
|
38
38
|
def curse!
|
39
|
-
@cards << Card.
|
39
|
+
@cards << Card.new('Curse')
|
40
40
|
shuffle!(soft_shuffle: true)
|
41
41
|
end
|
42
42
|
|
@@ -57,7 +57,7 @@ module Gloomhaven
|
|
57
57
|
# Ex:
|
58
58
|
#
|
59
59
|
# deck = Deck.new
|
60
|
-
# card = Card.
|
60
|
+
# card = Card.new('Attack -1')
|
61
61
|
# deck.remove!(card)
|
62
62
|
def remove!(card)
|
63
63
|
raise TypeError.new('Card must be a Gloomhaven::Card') unless card.is_a?(Gloomhaven::Card)
|
@@ -76,7 +76,7 @@ module Gloomhaven
|
|
76
76
|
# Can override with `options = { soft_shuffle: true }` to
|
77
77
|
# only shuffle cards not yet drawn (useful for blesses/curses)
|
78
78
|
def shuffle!(options = {})
|
79
|
-
options[:soft_shuffle] ||= false
|
79
|
+
options[:soft_shuffle] ||= false
|
80
80
|
return @cards.shuffle! if options[:soft_shuffle]
|
81
81
|
|
82
82
|
@cards = (@cards + @drawn_cards).shuffle
|
@@ -88,8 +88,8 @@ module Gloomhaven
|
|
88
88
|
|
89
89
|
def build_base_deck!
|
90
90
|
CARDS.each do |card|
|
91
|
-
|
92
|
-
|
91
|
+
number = card['starting_count'] || 0
|
92
|
+
number.times { cards << Card.new(card['name']) }
|
93
93
|
end
|
94
94
|
end
|
95
95
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Gloomhaven
|
2
|
+
class Perk
|
3
|
+
attr_reader :adds, :description, :key, :removes
|
4
|
+
|
5
|
+
def initialize(key)
|
6
|
+
validate!(key)
|
7
|
+
|
8
|
+
perk_hash = PERKS[key]
|
9
|
+
@key = key
|
10
|
+
@description = perk_hash['description']
|
11
|
+
@adds = perk_hash['add'] || []
|
12
|
+
@removes = perk_hash['remove'] || []
|
13
|
+
end
|
14
|
+
|
15
|
+
##
|
16
|
+
# returns a hash of card objects
|
17
|
+
# Ex: Perk.new.cards
|
18
|
+
# => { add: [Card, Card], remove: [Card, Card, Card] }
|
19
|
+
def cards
|
20
|
+
result = { 'add' => [], 'remove' => [] }
|
21
|
+
adds.each { |effect| result['add'] = 1.upto(effect['count']).map { Card.new(effect['card_name']) } }
|
22
|
+
removes.each { |effect| result['remove'] = 1.upto(effect['count']).map { Card.new(effect['card_name']) } }
|
23
|
+
result
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def validate!(key)
|
29
|
+
raise TypeError.new("Perk #{key} is not supported") unless PERKS[key]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|