ascension 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,225 @@
1
+ require File.dirname(__FILE__) + "/spec_helper"
2
+
3
+ if false
4
+ describe 'word' do
5
+ describe 'first_lifebound_hero_played' do
6
+ before do
7
+ @raw = "first_lifebound_hero_played"
8
+ @word = Parse::Word.parsed(:raw => @raw)
9
+ end
10
+ it 'should be first' do
11
+ @word.should be_first
12
+ end
13
+ it 'should have realm' do
14
+ @word.realm.should == 'lifebound'
15
+ end
16
+ it 'should have type' do
17
+ @word.type.should == "hero_played"
18
+ end
19
+ end
20
+ describe 'lifebound_hero_played' do
21
+ before do
22
+ @raw = "lifebound_hero_played"
23
+ @word = Parse::Word.parsed(:raw => @raw)
24
+ end
25
+ it 'should not be first' do
26
+ @word.should_not be_first
27
+ end
28
+ it 'should have realm' do
29
+ @word.realm.should == 'lifebound'
30
+ end
31
+ it 'should have type' do
32
+ @word.type.should == "hero_played"
33
+ end
34
+ end
35
+ end
36
+ end
37
+
38
+ describe 'word' do
39
+ before do
40
+ @side = Side.new
41
+ @card = Card::Hero.new(:realm => :lifebound)
42
+ @event = Event::CardPlayed.new(:card => @card)
43
+ @word = Parse::Word.new(:raw => "lifebound_hero_played")
44
+ end
45
+ it 'should be true' do
46
+ @side.events << @event
47
+ @word.should be_occured(@side)
48
+ end
49
+ it 'should be false' do
50
+ @word.should_not be_occured(@side)
51
+ end
52
+ end
53
+
54
+ describe 'phrase' do
55
+ before do
56
+ @side = Side.new
57
+ @card = Card::Hero.new(:realm => :lifebound)
58
+ @event = Event::CardPlayed.new(:card => @card, :first => true)
59
+ end
60
+
61
+ describe 'on' do
62
+ fattr(:phrase) do
63
+ Parse::Phrase.parsed(@raw).tap { |x| x.category = @category }
64
+ end
65
+ before do
66
+ @raw = "1 on first_lifebound_hero_played"
67
+ @category = :add_honor
68
+ end
69
+ it 'execute trigger' do
70
+ phrase.trigger.call(@event, @side)
71
+ @side.honor.should == 1
72
+ end
73
+ it 'execute trigger' do
74
+ @raw = "2 on first_lifebound_hero_played"
75
+ phrase.trigger.call(@event, @side)
76
+ @side.honor.should == 2
77
+ end
78
+ it 'shouldnt run' do
79
+ @card.realm = :mechana
80
+ phrase.trigger.call(@event, @side)
81
+ @side.honor.should == 0
82
+ end
83
+ it 'should add trigger to card' do
84
+ phrase.mod_card(@card)
85
+ @card.triggers.size.should == 1
86
+ end
87
+ end
88
+ if true
89
+ describe 'if' do
90
+ before do
91
+ @side = Side.new
92
+ @card = Card::Hero.new(:realm => :lifebound)
93
+ @event = Event::CardPlayed.new(:card => @card)
94
+
95
+ @phrase = Parse::Phrase.parsed("1 if lifebound_hero_played").tap { |x| x.category = :add_honor }
96
+ end
97
+
98
+ it 'foo' do
99
+ @phrase.mod_card(@card)
100
+ @card.abilities.size.should == 1
101
+
102
+ @side.events << @event
103
+
104
+ @card.apply_abilities(@side)
105
+ @side.honor.should == 1
106
+ end
107
+ end
108
+ end
109
+
110
+ describe 'Card' do
111
+ before do
112
+ @side = Side.new
113
+ @first_card = Card::Hero.new(:realm => :lifebound)
114
+ @parse_card = Parse::Card.new(:rune_cost => 2, :honor_given => "1 if lifebound_hero_played", :runes => "1")
115
+ end
116
+ it 'should make card - smoke' do
117
+ @parse_card.card
118
+ end
119
+ it 'card should add honor' do
120
+ @side.played << @first_card
121
+ @side.played << @parse_card.card
122
+ @side.honor.should == 1
123
+ end
124
+ it 'card should not add honor' do
125
+ @side.played << @parse_card.card
126
+ @side.honor.should == 0
127
+ end
128
+ it 'card gives 1 rune' do
129
+ @side.played << @parse_card.card
130
+ @side.played.pool.runes.should == 1
131
+ end
132
+ it 'card gives 1 mech rune' do
133
+ @parse_card.runes = "1 for mechana"
134
+ @side.played << @parse_card.card
135
+ @side.played.pool.mechana_runes.should == 1
136
+ end
137
+ it 'card gives 1 normal, 1 mech rune' do
138
+ @parse_card.runes = "1,1 for mechana"
139
+ @side.played << @parse_card.card
140
+ @side.played.pool.runes.should == 1
141
+ @side.played.pool.mechana_runes.should == 1
142
+ end
143
+ it 'draws 1' do
144
+ @parse_card.draw = "1"
145
+ @side.played << @parse_card.card
146
+ @side.hand.size.should == 1
147
+ end
148
+ it 'draws 1 cond' do
149
+ @parse_card.draw = "1 if two_or_more_constructs"
150
+ @side.played << @parse_card.card
151
+ @side.hand.size.should == 0
152
+ end
153
+ it 'draws 1 cond' do
154
+ @parse_card.draw = "1 if two_or_more_constructs"
155
+ stub(@side.constructs).size { 2 }
156
+ @side.played << @parse_card.card
157
+ @side.hand.size.should == 1
158
+ end
159
+ end
160
+
161
+ describe 'banish' do
162
+ before do
163
+ @game, @side = *new_game_with_side
164
+ @game.center.fill!
165
+
166
+ @card = @game.center.first
167
+
168
+ @parse_card = Parse::Card.new(:banish_center => "1")
169
+ end
170
+ it 'should banish a card' do
171
+ stub(Ability::CardChoice).chooser do
172
+ lambda { |c| c.options.first }
173
+ end
174
+
175
+ @game.void.size.should == 0
176
+ @parse_card.card.apply_abilities(@side)
177
+ @game.void.size.should == 1
178
+ end
179
+ it 'should not banish a card' do
180
+ @parse_card.banish_center = "o1"
181
+ stub(Ability::CardChoice).chooser do
182
+ lambda { |c| nil }
183
+ end
184
+
185
+ @game.void.size.should == 0
186
+ @parse_card.card.apply_abilities(@side)
187
+ @game.void.size.should == 0
188
+ end
189
+ end
190
+
191
+ describe 'kill monster' do
192
+ before do
193
+ @game, @side = *new_game_with_side
194
+ @game.center << Card::Monster.cultist
195
+ @parse_card = Parse::Card.new(:special_abilities => "kill_monster_4")
196
+ end
197
+ it 'should add ability' do
198
+ @parse_card.card.abilities.size.should == 1
199
+ end
200
+ it 'ability should kill' do
201
+ stub(Ability::CardChoice).chooser do
202
+ lambda { |c| c.options.first }
203
+ end
204
+ @parse_card.card.apply_abilities(@side)
205
+ @side.honor.should == 1
206
+ end
207
+ end
208
+ end
209
+
210
+ describe 'input file' do
211
+ before do
212
+ @file = Parse::InputFile.new
213
+ end
214
+ it 'smoke' do
215
+ @file.lines.size.should == 48
216
+ end
217
+ it 'smoke2' do
218
+ @file.cards.size.should == 100
219
+ end
220
+ end
221
+
222
+ str = "
223
+ on is a trigger
224
+ if is a conditional ability
225
+ for is a rune type"
@@ -0,0 +1,73 @@
1
+ require 'rubygems'
2
+ require 'spork'
3
+
4
+ class Array
5
+ def reduce(*args,&b)
6
+ inject(*args,&b)
7
+ end
8
+ end
9
+
10
+ class MMIgnore
11
+ def method_missing(sym,*args,&b)
12
+ self
13
+ end
14
+ end
15
+
16
+ class Object
17
+ def mm_ignore
18
+ MMIgnore.new
19
+ end
20
+ end
21
+
22
+
23
+ Spork.prefork do
24
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
25
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
26
+
27
+ require 'rspec'
28
+ require 'rr'
29
+ #require 'choice'
30
+
31
+
32
+ # Requires supporting files with custom matchers and macros, etc,
33
+ # in ./support/ and its subdirectories.
34
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
35
+
36
+ RSpec.configure do |config|
37
+ config.mock_with :rr
38
+ end
39
+ end
40
+
41
+ Spork.each_run do
42
+ load File.dirname(__FILE__) + "/../lib/ascension.rb"
43
+
44
+ def db
45
+ Mongo::Connection.new.db('ascension-test')
46
+ end
47
+
48
+ class CenterDeck < Cards
49
+ def self.starting
50
+ res = CenterDeck.new
51
+ 100.times { res << Card::Hero.standin }
52
+ res
53
+ end
54
+ end
55
+ end
56
+
57
+ def new_game_with_side
58
+ game = Game.new
59
+ side = Side.new(:game => game)
60
+ game.sides << side
61
+ [game,side]
62
+ end
63
+
64
+ def new_game_with_sides
65
+ game = Game.new
66
+ side = Side.new(:game => game)
67
+ game.sides << side
68
+ other = Side.new(:game => game)
69
+ game.sides << other
70
+ [game,side]
71
+ end
72
+
73
+
@@ -0,0 +1,556 @@
1
+ {"sides"=>
2
+ [{"discard"=>{"cards"=>[], "_mongo_class"=>"Discard"},
3
+ "deck"=>
4
+ {"cards"=>
5
+ [{"name"=>"Apprentice",
6
+ "runes"=>1,
7
+ "power"=>0,
8
+ "_mongo_class"=>"Card::Hero"},
9
+ {"name"=>"Apprentice",
10
+ "runes"=>1,
11
+ "power"=>0,
12
+ "_mongo_class"=>"Card::Hero"},
13
+ {"name"=>"Apprentice",
14
+ "runes"=>1,
15
+ "power"=>0,
16
+ "_mongo_class"=>"Card::Hero"},
17
+ {"name"=>"Apprentice",
18
+ "runes"=>1,
19
+ "power"=>0,
20
+ "_mongo_class"=>"Card::Hero"},
21
+ {"name"=>"Apprentice",
22
+ "runes"=>1,
23
+ "power"=>0,
24
+ "_mongo_class"=>"Card::Hero"}],
25
+ "_mongo_class"=>"PlayerDeck"},
26
+ "hand"=>
27
+ {"cards"=>
28
+ [{"name"=>"Apprentice",
29
+ "runes"=>1,
30
+ "power"=>0,
31
+ "_mongo_class"=>"Card::Hero"},
32
+ {"name"=>"Militia",
33
+ "runes"=>0,
34
+ "power"=>1,
35
+ "_mongo_class"=>"Card::Hero"},
36
+ {"name"=>"Militia",
37
+ "runes"=>0,
38
+ "power"=>1,
39
+ "_mongo_class"=>"Card::Hero"},
40
+ {"name"=>"Apprentice",
41
+ "runes"=>1,
42
+ "power"=>0,
43
+ "_mongo_class"=>"Card::Hero"},
44
+ {"name"=>"Apprentice",
45
+ "runes"=>1,
46
+ "power"=>0,
47
+ "_mongo_class"=>"Card::Hero"}],
48
+ "_mongo_class"=>"Hand"},
49
+ "played"=>
50
+ {"cards"=>[],
51
+ "pool"=>
52
+ {"runes"=>0,
53
+ "mechana_runes"=>0,
54
+ "construct_runes"=>0,
55
+ "power"=>0,
56
+ "_mongo_class"=>"Pool"},
57
+ "_mongo_class"=>"Played"},
58
+ "constructs"=>{"cards"=>[], "_mongo_class"=>"Constructs"},
59
+ "honor"=>0,
60
+ "_mongo_class"=>"Side",
61
+ "engageable_cards"=>[]},
62
+ {"discard"=>{"cards"=>[], "_mongo_class"=>"Discard"},
63
+ "deck"=>
64
+ {"cards"=>
65
+ [{"name"=>"Apprentice",
66
+ "runes"=>1,
67
+ "power"=>0,
68
+ "_mongo_class"=>"Card::Hero"},
69
+ {"name"=>"Apprentice",
70
+ "runes"=>1,
71
+ "power"=>0,
72
+ "_mongo_class"=>"Card::Hero"},
73
+ {"name"=>"Apprentice",
74
+ "runes"=>1,
75
+ "power"=>0,
76
+ "_mongo_class"=>"Card::Hero"},
77
+ {"name"=>"Militia",
78
+ "runes"=>0,
79
+ "power"=>1,
80
+ "_mongo_class"=>"Card::Hero"},
81
+ {"name"=>"Militia",
82
+ "runes"=>0,
83
+ "power"=>1,
84
+ "_mongo_class"=>"Card::Hero"}],
85
+ "_mongo_class"=>"PlayerDeck"},
86
+ "hand"=>
87
+ {"cards"=>
88
+ [{"name"=>"Apprentice",
89
+ "runes"=>1,
90
+ "power"=>0,
91
+ "_mongo_class"=>"Card::Hero"},
92
+ {"name"=>"Apprentice",
93
+ "runes"=>1,
94
+ "power"=>0,
95
+ "_mongo_class"=>"Card::Hero"},
96
+ {"name"=>"Apprentice",
97
+ "runes"=>1,
98
+ "power"=>0,
99
+ "_mongo_class"=>"Card::Hero"},
100
+ {"name"=>"Apprentice",
101
+ "runes"=>1,
102
+ "power"=>0,
103
+ "_mongo_class"=>"Card::Hero"},
104
+ {"name"=>"Apprentice",
105
+ "runes"=>1,
106
+ "power"=>0,
107
+ "_mongo_class"=>"Card::Hero"}],
108
+ "_mongo_class"=>"Hand"},
109
+ "played"=>
110
+ {"cards"=>[],
111
+ "pool"=>
112
+ {"runes"=>0,
113
+ "mechana_runes"=>0,
114
+ "construct_runes"=>0,
115
+ "power"=>0,
116
+ "_mongo_class"=>"Pool"},
117
+ "_mongo_class"=>"Played"},
118
+ "constructs"=>{"cards"=>[], "_mongo_class"=>"Constructs"},
119
+ "honor"=>0,
120
+ "_mongo_class"=>"Side",
121
+ "engageable_cards"=>[]}],
122
+ "center"=>
123
+ {"cards"=>
124
+ [{"name"=>"Samael's Trickster",
125
+ "power_cost"=>3,
126
+ "_mongo_class"=>"Card::Monster"},
127
+ {"name"=>"Demon Slayer",
128
+ "runes"=>0,
129
+ "power"=>3,
130
+ "rune_cost"=>4,
131
+ "_mongo_class"=>"Card::Hero"},
132
+ {"name"=>"Demon Slayer",
133
+ "runes"=>0,
134
+ "power"=>3,
135
+ "rune_cost"=>4,
136
+ "_mongo_class"=>"Card::Hero"},
137
+ {"name"=>"Arha Templar",
138
+ "runes"=>0,
139
+ "power"=>0,
140
+ "rune_cost"=>4,
141
+ "_mongo_class"=>"Card::Hero"},
142
+ {"name"=>"Spike Vixen",
143
+ "runes"=>0,
144
+ "power"=>1,
145
+ "rune_cost"=>2,
146
+ "_mongo_class"=>"Card::Hero"},
147
+ {"name"=>"Tormented Soul",
148
+ "power_cost"=>3,
149
+ "_mongo_class"=>"Card::Monster"}],
150
+ "_mongo_class"=>"Center"},
151
+ "void"=>{"cards"=>[], "_mongo_class"=>"Void"},
152
+ "honor"=>60,
153
+ "deck"=>
154
+ {"cards"=>
155
+ [{"name"=>"Seer of the Forked Path",
156
+ "runes"=>0,
157
+ "power"=>0,
158
+ "rune_cost"=>2,
159
+ "_mongo_class"=>"Card::Hero"},
160
+ {"name"=>"Reactor Monk",
161
+ "runes"=>2,
162
+ "power"=>0,
163
+ "rune_cost"=>4,
164
+ "_mongo_class"=>"Card::Hero"},
165
+ {"name"=>"Snapdragon",
166
+ "runes"=>1,
167
+ "power"=>0,
168
+ "rune_cost"=>5,
169
+ "_mongo_class"=>"Card::Construct"},
170
+ {"name"=>"Hedron Cannon",
171
+ "runes"=>0,
172
+ "power"=>0,
173
+ "rune_cost"=>8,
174
+ "_mongo_class"=>"Card::Construct"},
175
+ {"name"=>"Void Initiate",
176
+ "runes"=>1,
177
+ "power"=>0,
178
+ "rune_cost"=>1,
179
+ "_mongo_class"=>"Card::Hero"},
180
+ {"name"=>"Flytrap Witch",
181
+ "runes"=>0,
182
+ "power"=>0,
183
+ "rune_cost"=>5,
184
+ "_mongo_class"=>"Card::Hero"},
185
+ {"name"=>"Mechana Initiate",
186
+ "runes"=>0,
187
+ "power"=>0,
188
+ "rune_cost"=>1,
189
+ "_mongo_class"=>"Card::Hero"},
190
+ {"name"=>"Arha Initiate",
191
+ "runes"=>0,
192
+ "power"=>0,
193
+ "rune_cost"=>1,
194
+ "_mongo_class"=>"Card::Hero"},
195
+ {"name"=>"Yggdrasil Staff",
196
+ "runes"=>0,
197
+ "power"=>1,
198
+ "rune_cost"=>4,
199
+ "_mongo_class"=>"Card::Construct"},
200
+ {"name"=>"Void Initiate",
201
+ "runes"=>1,
202
+ "power"=>0,
203
+ "rune_cost"=>1,
204
+ "_mongo_class"=>"Card::Hero"},
205
+ {"name"=>"Watchmaker Altar",
206
+ "runes"=>0,
207
+ "power"=>0,
208
+ "rune_cost"=>5,
209
+ "_mongo_class"=>"Card::Construct"},
210
+ {"name"=>"Temple Librarian",
211
+ "runes"=>0,
212
+ "power"=>0,
213
+ "rune_cost"=>2,
214
+ "_mongo_class"=>"Card::Hero"},
215
+ {"name"=>"Ascetic of the Lidless Eye",
216
+ "runes"=>0,
217
+ "power"=>0,
218
+ "rune_cost"=>5,
219
+ "_mongo_class"=>"Card::Hero"},
220
+ {"name"=>"Runic Lycanthrope",
221
+ "runes"=>2,
222
+ "power"=>0,
223
+ "rune_cost"=>3,
224
+ "_mongo_class"=>"Card::Hero"},
225
+ {"name"=>"Shadow Star",
226
+ "runes"=>0,
227
+ "power"=>1,
228
+ "rune_cost"=>3,
229
+ "_mongo_class"=>"Card::Construct"},
230
+ {"name"=>"Tablet of Times Dawn",
231
+ "runes"=>0,
232
+ "power"=>0,
233
+ "rune_cost"=>5,
234
+ "_mongo_class"=>"Card::Construct"},
235
+ {"name"=>"Lifeblood Initiate",
236
+ "runes"=>1,
237
+ "power"=>0,
238
+ "rune_cost"=>1,
239
+ "_mongo_class"=>"Card::Hero"},
240
+ {"name"=>"Runic Lycanthrope",
241
+ "runes"=>2,
242
+ "power"=>0,
243
+ "rune_cost"=>3,
244
+ "_mongo_class"=>"Card::Hero"},
245
+ {"name"=>"Void Initiate",
246
+ "runes"=>1,
247
+ "power"=>0,
248
+ "rune_cost"=>1,
249
+ "_mongo_class"=>"Card::Hero"},
250
+ {"name"=>"Avatar ot Fallen",
251
+ "power_cost"=>7,
252
+ "_mongo_class"=>"Card::Monster"},
253
+ {"name"=>"Void Thirster",
254
+ "runes"=>0,
255
+ "power"=>1,
256
+ "rune_cost"=>5,
257
+ "_mongo_class"=>"Card::Construct"},
258
+ {"name"=>"Shade ot Black Watch",
259
+ "runes"=>0,
260
+ "power"=>2,
261
+ "rune_cost"=>3,
262
+ "_mongo_class"=>"Card::Hero"},
263
+ {"name"=>"Wolf Shaman",
264
+ "runes"=>1,
265
+ "power"=>0,
266
+ "rune_cost"=>3,
267
+ "_mongo_class"=>"Card::Hero"},
268
+ {"name"=>"Wolf Shaman",
269
+ "runes"=>1,
270
+ "power"=>0,
271
+ "rune_cost"=>3,
272
+ "_mongo_class"=>"Card::Hero"},
273
+ {"name"=>"Shade ot Black Watch",
274
+ "runes"=>0,
275
+ "power"=>2,
276
+ "rune_cost"=>3,
277
+ "_mongo_class"=>"Card::Hero"},
278
+ {"name"=>"Tormented Soul",
279
+ "power_cost"=>3,
280
+ "_mongo_class"=>"Card::Monster"},
281
+ {"name"=>"Corrosive Widow",
282
+ "power_cost"=>4,
283
+ "_mongo_class"=>"Card::Monster"},
284
+ {"name"=>"Mistake of Creation",
285
+ "power_cost"=>4,
286
+ "_mongo_class"=>"Card::Monster"},
287
+ {"name"=>"Flytrap Witch",
288
+ "runes"=>0,
289
+ "power"=>0,
290
+ "rune_cost"=>5,
291
+ "_mongo_class"=>"Card::Hero"},
292
+ {"name"=>"Arha Initiate",
293
+ "runes"=>0,
294
+ "power"=>0,
295
+ "rune_cost"=>1,
296
+ "_mongo_class"=>"Card::Hero"},
297
+ {"name"=>"Watchmaker Altar",
298
+ "runes"=>0,
299
+ "power"=>0,
300
+ "rune_cost"=>5,
301
+ "_mongo_class"=>"Card::Construct"},
302
+ {"name"=>"Oziah the Peerless",
303
+ "runes"=>0,
304
+ "power"=>0,
305
+ "rune_cost"=>6,
306
+ "_mongo_class"=>"Card::Hero"},
307
+ {"name"=>"The Grand Design",
308
+ "runes"=>0,
309
+ "power"=>0,
310
+ "rune_cost"=>6,
311
+ "_mongo_class"=>"Card::Construct"},
312
+ {"name"=>"Lifeblood Initiate",
313
+ "runes"=>1,
314
+ "power"=>0,
315
+ "rune_cost"=>1,
316
+ "_mongo_class"=>"Card::Hero"},
317
+ {"name"=>"Emeri One with the Void",
318
+ "runes"=>0,
319
+ "power"=>4,
320
+ "rune_cost"=>6,
321
+ "_mongo_class"=>"Card::Hero"},
322
+ {"name"=>"The Grand Design",
323
+ "runes"=>0,
324
+ "power"=>0,
325
+ "rune_cost"=>6,
326
+ "_mongo_class"=>"Card::Construct"},
327
+ {"name"=>"Tormented Soul",
328
+ "power_cost"=>3,
329
+ "_mongo_class"=>"Card::Monster"},
330
+ {"name"=>"Arha Templar",
331
+ "runes"=>0,
332
+ "power"=>0,
333
+ "rune_cost"=>4,
334
+ "_mongo_class"=>"Card::Hero"},
335
+ {"name"=>"Wind Tyrant", "power_cost"=>5, "_mongo_class"=>"Card::Monster"},
336
+ {"name"=>"Burrower Mk II",
337
+ "runes"=>0,
338
+ "power"=>0,
339
+ "rune_cost"=>3,
340
+ "_mongo_class"=>"Card::Construct"},
341
+ {"name"=>"Samael's Trickster",
342
+ "power_cost"=>3,
343
+ "_mongo_class"=>"Card::Monster"},
344
+ {"name"=>"Master Dhartha",
345
+ "runes"=>0,
346
+ "power"=>0,
347
+ "rune_cost"=>7,
348
+ "_mongo_class"=>"Card::Hero"},
349
+ {"name"=>"Mechana Initiate",
350
+ "runes"=>0,
351
+ "power"=>0,
352
+ "rune_cost"=>1,
353
+ "_mongo_class"=>"Card::Hero"},
354
+ {"name"=>"Landtalker",
355
+ "runes"=>3,
356
+ "power"=>0,
357
+ "rune_cost"=>6,
358
+ "_mongo_class"=>"Card::Hero"},
359
+ {"name"=>"Spike Vixen",
360
+ "runes"=>0,
361
+ "power"=>1,
362
+ "rune_cost"=>2,
363
+ "_mongo_class"=>"Card::Hero"},
364
+ {"name"=>"Mistake of Creation",
365
+ "power_cost"=>4,
366
+ "_mongo_class"=>"Card::Monster"},
367
+ {"name"=>"Temple Librarian",
368
+ "runes"=>0,
369
+ "power"=>0,
370
+ "rune_cost"=>2,
371
+ "_mongo_class"=>"Card::Hero"},
372
+ {"name"=>"Reactor Monk",
373
+ "runes"=>2,
374
+ "power"=>0,
375
+ "rune_cost"=>4,
376
+ "_mongo_class"=>"Card::Hero"},
377
+ {"name"=>"Wind Tyrant", "power_cost"=>5, "_mongo_class"=>"Card::Monster"},
378
+ {"name"=>"Ascetic of the Lidless Eye",
379
+ "runes"=>0,
380
+ "power"=>0,
381
+ "rune_cost"=>5,
382
+ "_mongo_class"=>"Card::Hero"},
383
+ {"name"=>"Shadow Star",
384
+ "runes"=>0,
385
+ "power"=>1,
386
+ "rune_cost"=>3,
387
+ "_mongo_class"=>"Card::Construct"},
388
+ {"name"=>"Sea Tyrant", "power_cost"=>5, "_mongo_class"=>"Card::Monster"},
389
+ {"name"=>"Mistake of Creation",
390
+ "power_cost"=>4,
391
+ "_mongo_class"=>"Card::Monster"},
392
+ {"name"=>"Wind Tyrant", "power_cost"=>5, "_mongo_class"=>"Card::Monster"},
393
+ {"name"=>"Arha Initiate",
394
+ "runes"=>0,
395
+ "power"=>0,
396
+ "rune_cost"=>1,
397
+ "_mongo_class"=>"Card::Hero"},
398
+ {"name"=>"Arbiter of the Precipice",
399
+ "runes"=>0,
400
+ "power"=>0,
401
+ "rune_cost"=>4,
402
+ "_mongo_class"=>"Card::Hero"},
403
+ {"name"=>"Cetra Weaver ot Stars",
404
+ "runes"=>0,
405
+ "power"=>0,
406
+ "rune_cost"=>7,
407
+ "_mongo_class"=>"Card::Hero"},
408
+ {"name"=>"Yggdrasil Staff",
409
+ "runes"=>0,
410
+ "power"=>1,
411
+ "rune_cost"=>4,
412
+ "_mongo_class"=>"Card::Construct"},
413
+ {"name"=>"Druids ot Stone Circle",
414
+ "runes"=>0,
415
+ "power"=>0,
416
+ "rune_cost"=>4,
417
+ "_mongo_class"=>"Card::Hero"},
418
+ {"name"=>"Seer of the Forked Path",
419
+ "runes"=>0,
420
+ "power"=>0,
421
+ "rune_cost"=>2,
422
+ "_mongo_class"=>"Card::Hero"},
423
+ {"name"=>"Hedron Link Device",
424
+ "runes"=>0,
425
+ "power"=>0,
426
+ "rune_cost"=>7,
427
+ "_mongo_class"=>"Card::Construct"},
428
+ {"name"=>"Wolf Shaman",
429
+ "runes"=>1,
430
+ "power"=>0,
431
+ "rune_cost"=>3,
432
+ "_mongo_class"=>"Card::Hero"},
433
+ {"name"=>"Corrosive Widow",
434
+ "power_cost"=>4,
435
+ "_mongo_class"=>"Card::Monster"},
436
+ {"name"=>"Void Thirster",
437
+ "runes"=>0,
438
+ "power"=>1,
439
+ "rune_cost"=>5,
440
+ "_mongo_class"=>"Card::Construct"},
441
+ {"name"=>"Burrower Mk II",
442
+ "runes"=>0,
443
+ "power"=>0,
444
+ "rune_cost"=>3,
445
+ "_mongo_class"=>"Card::Construct"},
446
+ {"name"=>"Sea Tyrant", "power_cost"=>5, "_mongo_class"=>"Card::Monster"},
447
+ {"name"=>"Mistake of Creation",
448
+ "power_cost"=>4,
449
+ "_mongo_class"=>"Card::Monster"},
450
+ {"name"=>"Kor the Ferromancer",
451
+ "runes"=>0,
452
+ "power"=>2,
453
+ "rune_cost"=>3,
454
+ "_mongo_class"=>"Card::Hero"},
455
+ {"name"=>"Avatar Golem",
456
+ "runes"=>0,
457
+ "power"=>2,
458
+ "rune_cost"=>4,
459
+ "_mongo_class"=>"Card::Hero"},
460
+ {"name"=>"Twofold Askara",
461
+ "runes"=>0,
462
+ "power"=>0,
463
+ "rune_cost"=>4,
464
+ "_mongo_class"=>"Card::Hero"},
465
+ {"name"=>"Mephit", "power_cost"=>3, "_mongo_class"=>"Card::Monster"},
466
+ {"name"=>"Druids ot Stone Circle",
467
+ "runes"=>0,
468
+ "power"=>0,
469
+ "rune_cost"=>4,
470
+ "_mongo_class"=>"Card::Hero"},
471
+ {"name"=>"Mechana Initiate",
472
+ "runes"=>0,
473
+ "power"=>0,
474
+ "rune_cost"=>1,
475
+ "_mongo_class"=>"Card::Hero"},
476
+ {"name"=>"Arbiter of the Precipice",
477
+ "runes"=>0,
478
+ "power"=>0,
479
+ "rune_cost"=>4,
480
+ "_mongo_class"=>"Card::Hero"},
481
+ {"name"=>"Rocket Courier X-99",
482
+ "runes"=>0,
483
+ "power"=>0,
484
+ "rune_cost"=>4,
485
+ "_mongo_class"=>"Card::Construct"},
486
+ {"name"=>"Temple Librarian",
487
+ "runes"=>0,
488
+ "power"=>0,
489
+ "rune_cost"=>2,
490
+ "_mongo_class"=>"Card::Hero"},
491
+ {"name"=>"Xeron Duke of Lies",
492
+ "power_cost"=>6,
493
+ "_mongo_class"=>"Card::Monster"},
494
+ {"name"=>"Mephit", "power_cost"=>3, "_mongo_class"=>"Card::Monster"},
495
+ {"name"=>"Sea Tyrant", "power_cost"=>5, "_mongo_class"=>"Card::Monster"},
496
+ {"name"=>"Earth Tyrant",
497
+ "power_cost"=>6,
498
+ "_mongo_class"=>"Card::Monster"},
499
+ {"name"=>"Corrosive Widow",
500
+ "power_cost"=>4,
501
+ "_mongo_class"=>"Card::Monster"},
502
+ {"name"=>"The All Seeing Eye",
503
+ "runes"=>0,
504
+ "power"=>0,
505
+ "rune_cost"=>6,
506
+ "_mongo_class"=>"Card::Construct"},
507
+ {"name"=>"Seer of the Forked Path",
508
+ "runes"=>0,
509
+ "power"=>0,
510
+ "rune_cost"=>2,
511
+ "_mongo_class"=>"Card::Hero"},
512
+ {"name"=>"Lifeblood Initiate",
513
+ "runes"=>1,
514
+ "power"=>0,
515
+ "rune_cost"=>1,
516
+ "_mongo_class"=>"Card::Hero"},
517
+ {"name"=>"Samael's Trickster",
518
+ "power_cost"=>3,
519
+ "_mongo_class"=>"Card::Monster"},
520
+ {"name"=>"Samael's Trickster",
521
+ "power_cost"=>3,
522
+ "_mongo_class"=>"Card::Monster"},
523
+ {"name"=>"Rocket Courier X-99",
524
+ "runes"=>0,
525
+ "power"=>0,
526
+ "rune_cost"=>4,
527
+ "_mongo_class"=>"Card::Construct"},
528
+ {"name"=>"Corrosive Widow",
529
+ "power_cost"=>4,
530
+ "_mongo_class"=>"Card::Monster"},
531
+ {"name"=>"Earth Tyrant",
532
+ "power_cost"=>6,
533
+ "_mongo_class"=>"Card::Monster"},
534
+ {"name"=>"Muramasa",
535
+ "runes"=>0,
536
+ "power"=>3,
537
+ "rune_cost"=>7,
538
+ "_mongo_class"=>"Card::Construct"},
539
+ {"name"=>"Avatar Golem",
540
+ "runes"=>0,
541
+ "power"=>2,
542
+ "rune_cost"=>4,
543
+ "_mongo_class"=>"Card::Hero"},
544
+ {"name"=>"Snapdragon",
545
+ "runes"=>1,
546
+ "power"=>0,
547
+ "rune_cost"=>5,
548
+ "_mongo_class"=>"Card::Construct"},
549
+ {"name"=>"Shade ot Black Watch",
550
+ "runes"=>0,
551
+ "power"=>2,
552
+ "rune_cost"=>3,
553
+ "_mongo_class"=>"Card::Hero"},
554
+ {"name"=>"Mephit", "power_cost"=>3, "_mongo_class"=>"Card::Monster"}],
555
+ "_mongo_class"=>"CenterDeck"},
556
+ "_mongo_class"=>"Game"}