Showing preview only (6,110K chars total). Download the full file or copy to clipboard to get everything.
Repository: deepmind/card2code
Branch: master
Commit: 2a38b6192f15
Files: 23
Total size: 34.8 MB
Directory structure:
gitextract_qfr27zus/
├── CONTRIBUTING
├── LICENSE
├── readme.md
└── third_party/
├── hearthstone/
│ ├── LICENSE
│ ├── README.google
│ ├── card_data_hs.txt
│ ├── dev_hs.in
│ ├── dev_hs.out
│ ├── splits_hs.txt
│ ├── test_hs.in
│ ├── test_hs.out
│ ├── train_hs.in
│ └── train_hs.out
└── magic/
├── LICENSE
├── README.google
├── card_data_magic.txt
├── dev_magic.in
├── dev_magic.out
├── splits_magic.txt
├── test_magic.in
├── test_magic.out
├── train_magic.in
└── train_magic.out
================================================
FILE CONTENTS
================================================
================================================
FILE: CONTRIBUTING
================================================
Want to contribute? Great! First, read this page (including the small print at the end).
### Before you contribute
Before we can use your code, you must sign the
[Google Individual Contributor License Agreement]
(https://cla.developers.google.com/about/google-individual)
(CLA), which you can do online. The CLA is necessary mainly because you own the
copyright to your changes, even after your contribution becomes part of our
codebase, so we need your permission to use and distribute your code. We also
need to be sure of various other things—for instance that you'll tell us if you
know that your code infringes on other people's patents. You don't have to sign
the CLA until after you've submitted your code for review and a member has
approved it, but you must do it before we can put your code into our codebase.
Before you start working on a larger contribution, you should get in touch with
us first through the issue tracker with your idea so that we can help out and
possibly guide you. Coordinating up front makes it much easier to avoid
frustration later on.
### Code reviews
All submissions, including submissions by project members, require review. We
use Github pull requests for this purpose.
### The small print
Contributions made by corporations are covered by a different agreement than
the one above, the
[Software Grant and Corporate Contributor License Agreement]
(https://cla.developers.google.com/about/google-corporate).
================================================
FILE: LICENSE
================================================
Copyright 2016 Google Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: readme.md
================================================
# Collectible Card Game to Code Dataset #
This dataset contains the language to code datasets described in our paper:
https://arxiv.org/abs/1603.06744
## Dataset description ##
There are two datasets in the paper.
Both contain card descriptions and the code that implements them. These are obtained from open source implementations of each game (acknowledgements to the authors and contributors of these toolkits).
The hearthstone dataset was crawled from:
https://github.com/danielyule/hearthbreaker
The magic dataset was crawled from:
https://github.com/magefree/mage
Both datasets are placed in the /third_party folder with their respective license
files. The below is a description of all files:
## Files ##
- ./hearthstone -----> hearthstone data folder
- ./hearthstone/card_data_hs.txt -----> full dataset
- ./hearthstone/splits_hs.txt -----> train, dev and test splits from the full dataset
- ./hearthstone/train_hs.in -----> training set inputs (card attributes)
- ./hearthstone/dev_hs.in -----> development set inputs (card attributes)
- ./hearthstone/test_hs.in -----> testing set inputs (card attributes)
- ./hearthstone/train_hs.out -----> training set outputs (code)
- ./hearthstone/dev_hs.out -----> development set outputs (code)
- ./hearthstone/test_hs.out -----> testing set outputs (code)
- ./hearthstone/LICENSE -----> original license of the code
- ./magic/ -----> magic data folder
- ./magic/card_data_magic.txt -----> full dataset
- ./magic/splits_magic.txt -----> train, dev and test splits from the full dataset
- ./magic/train_magic.in -----> training set inputs (card attributes)
- ./magic/dev_magic.in -----> development set inputs (card attributes)
- ./magic/test_magic.in -----> testing set inputs (card attributes)
- ./magic/train_magic.out -----> training set outputs (code)
- ./magic/dev_magic.out -----> development set outputs (code)
- ./magic/test_magic.out -----> testing set outputs (code)
- ./magic/LICENSE -----> original license of the code
## Full Dataset ##
The data (./hearthstone/card_data_hs.txt,./magic/card_data_magic.txt) is organized in multiple lines as follows:
for HS:
-Name
-Cost
-Type
-Rarity
-Race
-Class
-Description
-Health
-Attack
-Durability
-Number of lines in code
-Code
for Magic
-Name
-Cost
-Type
-Rarity
-Id (needed as it is used in the code)
-Booster it comes from
-Description
-Power
-Toughness
-Loyalty (there are these avatar cards that have these)
-Number of liens in code
-Code
These can be split using the splits used in the paper in the split file (./hearthstone/splits_hs.txt, ./magic/splits_magic.txt), where each line indicates which set each sample was placed (0->train, 1->dev, 2->test).
## Processed Dataset ##
We also provide the train, dev and test splits on a per line basis.
The .in files contain a per line card descriptions separated by Keywords, such as "NAME_END", which describes that the previous tokens are the name of the card.
The .out files contain the code of the each line in the respective .in file, (\n are replaced by the § token).
## Contact ##
For any questions regarding this dataset email:
Wang Ling
lingwang@google.com
================================================
FILE: third_party/hearthstone/LICENSE
================================================
The MIT License (MIT)
Copyright (c) 2014 Daniel Yule
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
================================================
FILE: third_party/hearthstone/README.google
================================================
URL: https://github.com/danielyule/hearthbreaker
Version: f09fcca823bd9bdaac5d216e7dbbf38a599d51e4
License: MIT
License File: LICENSE
Description:
This package contains the code dataset extracted from the referenced URL.
Local Modifications:
All non-card related code was removed, and the code for each card was converted
into a pair between the attributes of the card and code that implements that
card.
================================================
FILE: third_party/hearthstone/card_data_hs.txt
================================================
Acidic Swamp Ooze
2
Minion
Common
NIL
Neutral
<b>Battlecry:</b> Destroy your opponent's weapon.
2
3
-1
6
class AcidicSwampOoze(MinionCard):
def __init__(self):
super().__init__("Acidic Swamp Ooze", 2, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, battlecry=Battlecry(Destroy(), WeaponSelector(EnemyPlayer())))
def create_minion(self, player):
return Minion(3, 2)
Ancestral Healing
0
Spell
Free
NIL
Shaman
Restore a minion to full Health and give it <b>Taunt</b>.
-1
-1
-1
9
class AncestralHealing(SpellCard):
def __init__(self):
super().__init__("Ancestral Healing", 0, CHARACTER_CLASS.SHAMAN, CARD_RARITY.FREE, target_func=hearthbreaker.targeting.find_minion_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.heal(player.effective_heal_power(self.target.calculate_max_health()), self)
self.target.taunt = True
Animal Companion
3
Spell
Common
NIL
Hunter
Summon a random Beast Companion.
-1
-1
-1
13
class AnimalCompanion(SpellCard):
def __init__(self):
super().__init__("Animal Companion", 3, CHARACTER_CLASS.HUNTER, CARD_RARITY.COMMON)
def use(self, player, game):
super().use(player, game)
beast_list = [hearthbreaker.cards.minions.hunter.Huffer(), hearthbreaker.cards.minions.hunter.Misha(), hearthbreaker.cards.minions.hunter.Leokk()]
card = game.random_choice(beast_list)
card.summon(player, player.game, len(player.minions))
def can_use(self, player, game):
return super().can_use(player, game) and len(player.minions) < 7
Arcane Explosion
2
Spell
Free
NIL
Mage
Deal $1 damage to all enemy minions.
-1
-1
-1
8
class ArcaneExplosion(SpellCard):
def __init__(self):
super().__init__("Arcane Explosion", 2, CHARACTER_CLASS.MAGE, CARD_RARITY.FREE)
def use(self, player, game):
super().use(player, game)
for minion in copy.copy(game.other_player.minions):
minion.damage(player.effective_spell_damage(1), self)
Arcane Intellect
3
Spell
Free
NIL
Mage
Draw 2 cards.
-1
-1
-1
8
class ArcaneIntellect(SpellCard):
def __init__(self):
super().__init__("Arcane Intellect", 3, CHARACTER_CLASS.MAGE, CARD_RARITY.FREE)
def use(self, player, game):
super().use(player, game)
for c in range(0, 2):
player.draw()
Arcane Missiles
1
Spell
Free
NIL
Mage
Deal $3 damage randomly split among all enemies.
-1
-1
-1
11
class ArcaneMissiles(SpellCard):
def __init__(self):
super().__init__("Arcane Missiles", 1, CHARACTER_CLASS.MAGE, CARD_RARITY.FREE)
def use(self, player, game):
super().use(player, game)
for i in range(0, player.effective_spell_damage(3)):
targets = copy.copy(game.other_player.minions)
targets.append(game.other_player.hero)
target = game.random_choice(targets)
target.damage(1, self)
Arcane Shot
1
Spell
Free
NIL
Hunter
Deal $2 damage.
-1
-1
-1
7
class ArcaneShot(SpellCard):
def __init__(self):
super().__init__("Arcane Shot", 1, CHARACTER_CLASS.HUNTER, CARD_RARITY.FREE, target_func=hearthbreaker.targeting.find_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.damage(player.effective_spell_damage(2), self)
Arcanite Reaper
5
Weapon
Common
NIL
Warrior
NIL
-1
5
2
6
class ArcaniteReaper(WeaponCard):
def __init__(self):
super().__init__("Arcanite Reaper", 5, CHARACTER_CLASS.WARRIOR, CARD_RARITY.COMMON)
def create_weapon(self, player):
return Weapon(5, 2)
Archmage
6
Minion
Common
NIL
Neutral
<b>Spell Damage +1</b>
7
4
-1
6
class Archmage(MinionCard):
def __init__(self):
super().__init__("Archmage", 6, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(4, 7, spell_damage=1)
Assassin's Blade
5
Weapon
Common
NIL
Rogue
NIL
-1
3
4
6
class AssassinsBlade(WeaponCard):
def __init__(self):
super().__init__("Assassin's Blade", 5, CHARACTER_CLASS.ROGUE, CARD_RARITY.COMMON)
def create_weapon(self, player):
return Weapon(3, 4)
Assassinate
5
Spell
Free
NIL
Rogue
Destroy an enemy minion.
-1
-1
-1
8
class Assassinate(SpellCard):
def __init__(self):
super().__init__("Assassinate", 5, CHARACTER_CLASS.ROGUE, CARD_RARITY.FREE, target_func=hearthbreaker.targeting.find_enemy_minion_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.die(self)
Backstab
0
Spell
Free
NIL
Rogue
Deal $2 damage to an undamaged minion.
-1
-1
-1
8
class Backstab(SpellCard):
def __init__(self):
super().__init__("Backstab", 0, CHARACTER_CLASS.ROGUE, CARD_RARITY.FREE, target_func=hearthbreaker.targeting.find_minion_spell_target, filter_func=lambda target: target.health == target.calculate_max_health() and target.spell_targetable())
def use(self, player, game):
super().use(player, game)
self.target.damage(player.effective_spell_damage(2), self)
Blessing of Kings
4
Spell
Common
NIL
Paladin
Give a minion +4/+4. <i>(+4 Attack/+4 Health)</i>
-1
-1
-1
8
class BlessingOfKings(SpellCard):
def __init__(self):
super().__init__("Blessing of Kings", 4, CHARACTER_CLASS.PALADIN, CARD_RARITY.COMMON, target_func=hearthbreaker.targeting.find_minion_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.change_attack(4)
self.target.increase_health(4)
Blessing of Might
1
Spell
Free
NIL
Paladin
Give a minion +3 Attack.
-1
-1
-1
7
class BlessingOfMight(SpellCard):
def __init__(self):
super().__init__("Blessing of Might", 1, CHARACTER_CLASS.PALADIN, CARD_RARITY.FREE, target_func=hearthbreaker.targeting.find_minion_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.change_attack(3)
Bloodfen Raptor
2
Minion
Free
Beast
Neutral
NIL
2
3
-1
6
class BloodfenRaptor(MinionCard):
def __init__(self):
super().__init__("Bloodfen Raptor", 2, CHARACTER_CLASS.ALL, CARD_RARITY.FREE, minion_type=MINION_TYPE.BEAST)
def create_minion(self, player):
return Minion(3, 2)
Bloodlust
5
Spell
Common
NIL
Shaman
Give your minions +3 Attack this turn.
-1
-1
-1
9
class Bloodlust(SpellCard):
def __init__(self):
super().__init__("Bloodlust", 5, CHARACTER_CLASS.SHAMAN, CARD_RARITY.COMMON)
def use(self, player, game):
super().use(player, game)
for minion in player.minions:
minion.change_temp_attack(3)
Bluegill Warrior
2
Minion
Common
Murloc
Neutral
<b>Charge</b>
1
2
-1
6
class BluegillWarrior(MinionCard):
def __init__(self):
super().__init__("Bluegill Warrior", 2, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, minion_type=MINION_TYPE.MURLOC)
def create_minion(self, player):
return Minion(2, 1, charge=True)
Boar
1
Minion
Common
Beast
Neutral
NIL
1
1
-1
6
class Boar(MinionCard):
def __init__(self):
super().__init__("Boar", 1, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, False, minion_type=MINION_TYPE.BEAST)
def create_minion(self, player):
return Minion(1, 1)
Booty Bay Bodyguard
5
Minion
Common
NIL
Neutral
<b>Taunt</b>
4
5
-1
6
class BootyBayBodyguard(MinionCard):
def __init__(self):
super().__init__("Booty Bay Bodyguard", 5, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(5, 4, taunt=True)
Boulderfist Ogre
6
Minion
Free
NIL
Neutral
NIL
7
6
-1
6
class BoulderfistOgre(MinionCard):
def __init__(self):
super().__init__("Boulderfist Ogre", 6, CHARACTER_CLASS.ALL, CARD_RARITY.FREE)
def create_minion(self, player):
return Minion(6, 7)
Charge
3
Spell
Free
NIL
Warrior
Give a friendly minion +2 Attack and <b>Charge</b>.
-1
-1
-1
9
class Charge(SpellCard):
def __init__(self):
super().__init__("Charge", 3, CHARACTER_CLASS.WARRIOR, CARD_RARITY.FREE, target_func=hearthbreaker.targeting.find_friendly_minion_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.change_attack(2)
self.target.add_buff(Buff(_Charge()))
Chillwind Yeti
4
Minion
Common
NIL
Neutral
NIL
5
4
-1
6
class ChillwindYeti(MinionCard):
def __init__(self):
super().__init__("Chillwind Yeti", 4, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(4, 5)
Claw
1
Spell
Free
NIL
Druid
Give your hero +2 Attack this turn and 2 Armor.
-1
-1
-1
8
class Claw(SpellCard):
def __init__(self):
super().__init__("Claw", 1, CHARACTER_CLASS.DRUID, CARD_RARITY.FREE)
def use(self, player, game):
super().use(player, game)
player.hero.change_temp_attack(2)
player.hero.increase_armor(2)
Cleave
2
Spell
Common
NIL
Warrior
Deal $2 damage to two random enemy minions.
-1
-1
-1
16
class Cleave(SpellCard):
def __init__(self):
super().__init__("Cleave", 2, CHARACTER_CLASS.WARRIOR, CARD_RARITY.COMMON)
def use(self, player, game):
super().use(player, game)
minions = copy.copy(game.other_player.minions)
for i in range(0, 2):
minion = game.random_choice(minions)
minions.remove(minion)
minion.damage(player.effective_spell_damage(2), self)
def can_use(self, player, game):
return super().can_use(player, game) and len(game.other_player.minions) >= 2
Consecration
4
Spell
Common
NIL
Paladin
Deal $2 damage to all enemies.
-1
-1
-1
9
class Consecration(SpellCard):
def __init__(self):
super().__init__("Consecration", 4, CHARACTER_CLASS.PALADIN, CARD_RARITY.COMMON)
def use(self, player, game):
super().use(player, game)
for minion in copy.copy(game.other_player.minions):
minion.damage(player.effective_spell_damage(2), self)
game.other_player.hero.damage(player.effective_spell_damage(2), self)
Core Hound
7
Minion
Common
Beast
Neutral
NIL
5
9
-1
6
class CoreHound(MinionCard):
def __init__(self):
super().__init__("Core Hound", 7, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, minion_type=MINION_TYPE.BEAST)
def create_minion(self, player):
return Minion(9, 5)
Corruption
1
Spell
Common
NIL
Warlock
Choose an enemy minion. At the start of your turn, destroy it.
-1
-1
-1
7
class Corruption(SpellCard):
def __init__(self):
super().__init__("Corruption", 1, CHARACTER_CLASS.WARLOCK, CARD_RARITY.COMMON, target_func=hearthbreaker.targeting.find_enemy_minion_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.add_effect(Effect(TurnStarted(player=EnemyPlayer()), ActionTag(Kill(), SelfSelector())))
Dalaran Mage
3
Minion
Common
NIL
Neutral
<b>Spell Damage +1</b>
4
1
-1
6
class DalaranMage(MinionCard):
def __init__(self):
super().__init__("Dalaran Mage", 3, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(1, 4, spell_damage=1)
Darkscale Healer
5
Minion
Common
NIL
Neutral
<b>Battlecry:</b> Restore 2 Health to all friendly characters.
5
4
-1
6
class DarkscaleHealer(MinionCard):
def __init__(self):
super().__init__("Darkscale Healer", 5, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, battlecry=Battlecry(Heal(2), CharacterSelector()))
def create_minion(self, player):
return Minion(4, 5)
Deadly Poison
1
Spell
Free
NIL
Rogue
Give your weapon +2 Attack.
-1
-1
-1
12
class DeadlyPoison(SpellCard):
def __init__(self):
super().__init__("Deadly Poison", 1, CHARACTER_CLASS.ROGUE, CARD_RARITY.FREE)
def use(self, player, game):
super().use(player, game)
player.weapon.base_attack += 2
player.hero.change_temp_attack(2)
def can_use(self, player, game):
return super().can_use(player, game) and player.weapon is not None
Divine Spirit
2
Spell
Common
NIL
Priest
Double a minion's Health.
-1
-1
-1
8
class DivineSpirit(SpellCard):
def __init__(self):
super().__init__("Divine Spirit", 2, CHARACTER_CLASS.PRIEST, CARD_RARITY.COMMON, target_func=hearthbreaker.targeting.find_minion_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.increase_health(self.target.health)
Dragonling Mechanic
4
Minion
Common
NIL
Neutral
<b>Battlecry:</b> Summon a 2/1 Mechanical Dragonling.
4
2
-1
6
class DragonlingMechanic(MinionCard):
def __init__(self):
super().__init__("Dragonling Mechanic", 4, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, battlecry=Battlecry(Summon(MechanicalDragonling()), PlayerSelector()))
def create_minion(self, player):
return Minion(2, 4)
Drain Life
3
Spell
Free
NIL
Warlock
Deal $2 damage. Restore #2 Health to your hero.
-1
-1
-1
8
class DrainLife(SpellCard):
def __init__(self):
super().__init__("Drain Life", 3, CHARACTER_CLASS.WARLOCK, CARD_RARITY.FREE, target_func=hearthbreaker.targeting.find_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.damage(player.effective_spell_damage(2), self)
player.hero.heal(player.effective_heal_power(2), self)
Dread Infernal
6
Minion
Common
Demon
Warlock
<b>Battlecry:</b> Deal 1 damage to ALL other characters.
6
6
-1
6
class DreadInfernal(MinionCard):
def __init__(self):
super().__init__("Dread Infernal", 6, CHARACTER_CLASS.WARLOCK, CARD_RARITY.COMMON, minion_type=MINION_TYPE.DEMON, battlecry=Battlecry(Damage(1), CharacterSelector(players=BothPlayer())))
def create_minion(self, player):
return Minion(6, 6)
Elven Archer
1
Minion
Common
NIL
Neutral
<b>Battlecry:</b> Deal 1 damage.
1
1
-1
6
class ElvenArcher(MinionCard):
def __init__(self):
super().__init__("Elven Archer", 1, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, battlecry=Battlecry(Damage(1), CharacterSelector(players=BothPlayer(), picker=UserPicker())))
def create_minion(self, player):
return Minion(1, 1)
Excess Mana
0
Spell
NIL
NIL
Druid
Draw a card. <i>(You can only have 10 Mana in your tray.)</i>
-1
-1
-1
7
class ExcessMana(SpellCard):
def __init__(self):
super().__init__("Excess Mana", 0, CHARACTER_CLASS.DRUID, CARD_RARITY.COMMON, False)
def use(self, player, game):
super().use(player, game)
player.draw()
Execute
1
Spell
Free
NIL
Warrior
Destroy a damaged enemy minion.
-1
-1
-1
8
class Execute(SpellCard):
def __init__(self):
super().__init__("Execute", 1, CHARACTER_CLASS.WARRIOR, CARD_RARITY.FREE, target_func=hearthbreaker.targeting.find_enemy_minion_spell_target, filter_func=lambda target: target.health != target.calculate_max_health() and target.spell_targetable())
def use(self, player, game):
super().use(player, game)
self.target.die(self)
Fan of Knives
3
Spell
Common
NIL
Rogue
Deal $1 damage to all enemy minions. Draw a card.
-1
-1
-1
11
class FanOfKnives(SpellCard):
def __init__(self):
super().__init__("Fan of Knives", 3, CHARACTER_CLASS.ROGUE, CARD_RARITY.COMMON)
def use(self, player, game):
super().use(player, game)
for minion in copy.copy(game.other_player.minions):
minion.damage(player.effective_spell_damage(1), self)
player.draw()
Fiery War Axe
2
Weapon
Free
NIL
Warrior
NIL
-1
3
2
6
class FieryWarAxe(WeaponCard):
def __init__(self):
super().__init__("Fiery War Axe", 2, CHARACTER_CLASS.WARRIOR, CARD_RARITY.FREE)
def create_weapon(self, player):
return Weapon(3, 2)
Fire Elemental
6
Minion
Common
NIL
Shaman
<b>Battlecry:</b> Deal 3 damage.
5
6
-1
6
class FireElemental(MinionCard):
def __init__(self):
super().__init__("Fire Elemental", 6, CHARACTER_CLASS.SHAMAN, CARD_RARITY.COMMON, battlecry=Battlecry(Damage(3), CharacterSelector(players=BothPlayer(), picker=UserPicker())))
def create_minion(self, player):
return Minion(6, 5)
Fireball
4
Spell
Free
NIL
Mage
Deal $6 damage.
-1
-1
-1
7
class Fireball(SpellCard):
def __init__(self):
super().__init__("Fireball", 4, CHARACTER_CLASS.MAGE, CARD_RARITY.FREE, target_func=hearthbreaker.targeting.find_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.damage(player.effective_spell_damage(6), self)
Flamestrike
7
Spell
Common
NIL
Mage
Deal $4 damage to all enemy minions.
-1
-1
-1
8
class Flamestrike(SpellCard):
def __init__(self):
super().__init__("Flamestrike", 7, CHARACTER_CLASS.MAGE, CARD_RARITY.COMMON)
def use(self, player, game):
super().use(player, game)
for minion in copy.copy(game.other_player.minions):
minion.damage(player.effective_spell_damage(4), self)
Flametongue Totem
2
Minion
Common
Totem
Shaman
Adjacent minions have +2 Attack.
3
0
-1
6
class FlametongueTotem(MinionCard):
def __init__(self):
super().__init__("Flametongue Totem", 2, CHARACTER_CLASS.SHAMAN, CARD_RARITY.COMMON, minion_type=MINION_TYPE.TOTEM)
def create_minion(self, player):
return Minion(0, 3, auras=[Aura(ChangeAttack(2), MinionSelector(Adjacent()))])
Frog
0
Minion
Common
Beast
Neutral
<b>Taunt</b>
1
0
-1
6
class Frog(MinionCard):
def __init__(self):
super().__init__("Frog", 0, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, False, minion_type=MINION_TYPE.BEAST)
def create_minion(self, p):
return Minion(0, 1, taunt=True)
Frost Nova
3
Spell
Common
NIL
Mage
<b>Freeze</b> all enemy minions.
-1
-1
-1
8
class FrostNova(SpellCard):
def __init__(self):
super().__init__("Frost Nova", 3, CHARACTER_CLASS.MAGE, CARD_RARITY.COMMON)
def use(self, player, game):
super().use(player, game)
for minion in game.other_player.minions:
minion.add_buff(Buff(Frozen()))
Frost Shock
1
Spell
Free
NIL
Shaman
Deal $1 damage to an enemy character and <b>Freeze</b> it.
-1
-1
-1
9
class FrostShock(SpellCard):
def __init__(self):
super().__init__("Frost Shock", 1, CHARACTER_CLASS.SHAMAN, CARD_RARITY.FREE, target_func=hearthbreaker.targeting.find_enemy_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.damage(player.effective_spell_damage(1), self)
self.target.add_buff(Buff(Frozen()))
Frostbolt
2
Spell
Common
NIL
Mage
Deal $3 damage to a character and <b>Freeze</b> it.
-1
-1
-1
8
class Frostbolt(SpellCard):
def __init__(self):
super().__init__("Frostbolt", 2, CHARACTER_CLASS.MAGE, CARD_RARITY.COMMON, target_func=hearthbreaker.targeting.find_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.damage(player.effective_spell_damage(3), self)
self.target.add_buff(Buff(Frozen()))
Frostwolf Grunt
2
Minion
Common
NIL
Neutral
<b>Taunt</b>
2
2
-1
6
class FrostwolfGrunt(MinionCard):
def __init__(self):
super().__init__("Frostwolf Grunt", 2, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(2, 2, taunt=True)
Frostwolf Warlord
5
Minion
Common
NIL
Neutral
<b>Battlecry:</b> Gain +1/+1 for each other friendly minion on the battlefield.
4
4
-1
6
class FrostwolfWarlord(MinionCard):
def __init__(self):
super().__init__("Frostwolf Warlord", 5, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, battlecry=Battlecry(Give([Buff(ChangeAttack(Count(MinionSelector()))), Buff(ChangeHealth(Count(MinionSelector())))]), SelfSelector()))
def create_minion(self, player):
return Minion(4, 4)
Gnomish Inventor
4
Minion
Common
NIL
Neutral
<b>Battlecry:</b> Draw a card.
4
2
-1
6
class GnomishInventor(MinionCard):
def __init__(self):
super().__init__("Gnomish Inventor", 4, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, battlecry=Battlecry(Draw(), PlayerSelector()))
def create_minion(self, player):
return Minion(2, 4)
Goldshire Footman
1
Minion
Common
NIL
Neutral
<b>Taunt</b>
2
1
-1
6
class GoldshireFootman(MinionCard):
def __init__(self):
super().__init__("Goldshire Footman", 1, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(1, 2, taunt=True)
Grimscale Oracle
1
Minion
Common
Murloc
Neutral
ALL other Murlocs have +1 Attack.
1
1
-1
6
class GrimscaleOracle(MinionCard):
def __init__(self):
super().__init__("Grimscale Oracle", 1, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, minion_type=MINION_TYPE.MURLOC)
def create_minion(self, player):
return Minion(1, 1, auras=[Aura(ChangeAttack(1), MinionSelector(IsType(MINION_TYPE.MURLOC), BothPlayer()))])
Guardian of Kings
7
Minion
Common
NIL
Paladin
<b>Battlecry:</b> Restore 6 Health to your hero.
6
5
-1
6
class GuardianOfKings(MinionCard):
def __init__(self):
super().__init__("Guardian of Kings", 7, CHARACTER_CLASS.PALADIN, CARD_RARITY.COMMON, battlecry=Battlecry(Heal(6), HeroSelector()))
def create_minion(self, player):
return Minion(5, 6)
Gurubashi Berserker
5
Minion
Common
NIL
Neutral
Whenever this minion takes damage, gain +3 Attack.
7
2
-1
7
class GurubashiBerserker(MinionCard):
def __init__(self):
super().__init__("Gurubashi Berserker", 5, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(2, 7, effects=[
Effect(CharacterDamaged(condition=MinionIsTarget()), ActionTag(Give(ChangeAttack(3)), SelfSelector()))])
Hammer of Wrath
4
Spell
Free
NIL
Paladin
Deal $3 damage. NL Draw a card.
-1
-1
-1
9
class HammerOfWrath(SpellCard):
def __init__(self):
super().__init__("Hammer of Wrath", 4, CHARACTER_CLASS.PALADIN, CARD_RARITY.FREE, target_func=hearthbreaker.targeting.find_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.damage(player.effective_spell_damage(3), self)
player.draw()
Hand of Protection
1
Spell
Free
NIL
Paladin
Give a minion <b>Divine Shield</b>.
-1
-1
-1
8
class HandOfProtection(SpellCard):
def __init__(self):
super().__init__("Hand of Protection", 1, CHARACTER_CLASS.PALADIN, CARD_RARITY.FREE, target_func=hearthbreaker.targeting.find_minion_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.divine_shield = True
Healing Totem
1
Minion
Free
Totem
Shaman
At the end of your turn, restore 1 Health to all friendly minions.
2
0
-1
6
class HealingTotem(MinionCard):
def __init__(self):
super().__init__("Healing Totem", 1, CHARACTER_CLASS.SHAMAN, CARD_RARITY.FREE, False, MINION_TYPE.TOTEM)
def create_minion(self, player):
return Minion(0, 2, effects=[Effect(TurnEnded(), ActionTag(Heal(1), MinionSelector(condition=None)))])
Healing Touch
3
Spell
Free
NIL
Druid
Restore #8 Health.
-1
-1
-1
7
class HealingTouch(SpellCard):
def __init__(self):
super().__init__("Healing Touch", 3, CHARACTER_CLASS.DRUID, CARD_RARITY.FREE, target_func=hearthbreaker.targeting.find_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.heal(player.effective_heal_power(8), self)
Hellfire
4
Spell
Free
NIL
Warlock
Deal $3 damage to ALL characters.
-1
-1
-1
12
class Hellfire(SpellCard):
def __init__(self):
super().__init__("Hellfire", 4, CHARACTER_CLASS.WARLOCK, CARD_RARITY.FREE)
def use(self, player, game):
super().use(player, game)
targets = copy.copy(game.other_player.minions)
targets.extend(game.current_player.minions)
targets.append(game.other_player.hero)
targets.append(game.current_player.hero)
for minion in targets:
minion.damage(player.effective_spell_damage(3), self)
Heroic Strike
2
Spell
Free
NIL
Warrior
Give your hero +4 Attack this turn.
-1
-1
-1
7
class HeroicStrike(SpellCard):
def __init__(self):
super().__init__("Heroic Strike", 2, CHARACTER_CLASS.WARRIOR, CARD_RARITY.FREE)
def use(self, player, game):
super().use(player, game)
player.hero.change_temp_attack(4)
Hex
3
Spell
Free
NIL
Shaman
Transform a minion into a 0/1 Frog with <b>Taunt</b>.
-1
-1
-1
11
class Hex(SpellCard):
def __init__(self):
super().__init__("Hex", 3, CHARACTER_CLASS.SHAMAN, CARD_RARITY.FREE, target_func=hearthbreaker.targeting.find_minion_spell_target)
def use(self, player, game):
super().use(player, game)
frog = hearthbreaker.cards.minions.neutral.Frog()
minion = frog.create_minion(None)
minion.card = frog
self.target.replace(minion)
Holy Light
2
Spell
Free
NIL
Paladin
Restore #6 Health.
-1
-1
-1
8
class HolyLight(SpellCard):
def __init__(self):
super().__init__("Holy Light", 2, CHARACTER_CLASS.PALADIN, CARD_RARITY.FREE, target_func=hearthbreaker.targeting.find_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.heal(player.effective_heal_power(6), self)
Holy Nova
5
Spell
Common
NIL
Priest
Deal $2 damage to all enemies. Restore #2 Health to all friendly characters.
-1
-1
-1
12
class HolyNova(SpellCard):
def __init__(self):
super().__init__("Holy Nova", 5, CHARACTER_CLASS.PRIEST, CARD_RARITY.COMMON)
def use(self, player, game):
super().use(player, game)
for minion in copy.copy(game.other_player.minions):
minion.damage(player.effective_spell_damage(2), self)
for minion in player.minions:
minion.heal(player.effective_heal_power(2), self)
Holy Smite
1
Spell
Free
NIL
Priest
Deal $2 damage.
-1
-1
-1
8
class HolySmite(SpellCard):
def __init__(self):
super().__init__("Holy Smite", 1, CHARACTER_CLASS.PRIEST, CARD_RARITY.FREE, target_func=hearthbreaker.targeting.find_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.damage(player.effective_spell_damage(2), self)
Houndmaster
4
Minion
Free
NIL
Hunter
<b>Battlecry:</b> Give a friendly Beast +2/+2 and <b>Taunt</b>.
3
4
-1
6
class Houndmaster(MinionCard):
def __init__(self):
super().__init__("Houndmaster", 4, CHARACTER_CLASS.HUNTER, CARD_RARITY.FREE, minion_type=MINION_TYPE.NONE, battlecry=Battlecry(Give([Buff(ChangeHealth(2)), Buff(ChangeAttack(2)), Buff(Taunt())]), MinionSelector(IsType(MINION_TYPE.BEAST), picker=UserPicker())))
def create_minion(self, player):
return Minion(4, 3)
Huffer
3
Minion
Common
Beast
Hunter
<b>Charge</b>
2
4
-1
6
class Huffer(MinionCard):
def __init__(self):
super().__init__("Huffer", 3, CHARACTER_CLASS.HUNTER, CARD_RARITY.COMMON, False, minion_type=MINION_TYPE.BEAST)
def create_minion(self, player):
return Minion(4, 2, charge=True)
Humility
1
Spell
Common
NIL
Paladin
Change a minion's Attack to 1.
-1
-1
-1
8
class Humility(SpellCard):
def __init__(self):
super().__init__("Humility", 1, CHARACTER_CLASS.PALADIN, CARD_RARITY.COMMON, target_func=hearthbreaker.targeting.find_minion_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.change_attack(1 - self.target.calculate_attack())
Hunter's Mark
0
Spell
Common
NIL
Hunter
Change a minion's Health to 1.
-1
-1
-1
7
class HuntersMark(SpellCard):
def __init__(self):
super().__init__("Hunter's Mark", 0, CHARACTER_CLASS.HUNTER, CARD_RARITY.COMMON, target_func=hearthbreaker.targeting.find_minion_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.set_health_to(1)
Innervate
0
Spell
Free
NIL
Druid
Gain 2 Mana Crystals this turn only.
-1
-1
-1
10
class Innervate(SpellCard):
def __init__(self):
super().__init__("Innervate", 0, CHARACTER_CLASS.DRUID, CARD_RARITY.FREE)
def use(self, player, game):
super().use(player, game)
if player.mana < 8:
player.mana += 2
else:
player.mana = 10
Ironbark Protector
8
Minion
Common
NIL
Druid
<b>Taunt</b>
8
8
-1
6
class IronbarkProtector(MinionCard):
def __init__(self):
super().__init__("Ironbark Protector", 8, CHARACTER_CLASS.DRUID, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(8, 8, taunt=True)
Ironforge Rifleman
3
Minion
Common
NIL
Neutral
<b>Battlecry:</b> Deal 1 damage.
2
2
-1
6
class IronforgeRifleman(MinionCard):
def __init__(self):
super().__init__("Ironforge Rifleman", 3, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, minion_type=MINION_TYPE.NONE, battlecry=Battlecry(Damage(1), CharacterSelector(players=BothPlayer(), picker=UserPicker())))
def create_minion(self, player):
return Minion(2, 2)
Ironfur Grizzly
3
Minion
Common
Beast
Neutral
<b>Taunt</b>
3
3
-1
6
class IronfurGrizzly(MinionCard):
def __init__(self):
super().__init__("Ironfur Grizzly", 3, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, minion_type=MINION_TYPE.BEAST)
def create_minion(self, player):
return Minion(3, 3, taunt=True)
Kill Command
3
Spell
Common
NIL
Hunter
Deal $3 damage. If you have a Beast, deal $5 damage instead.
-1
-1
-1
12
class KillCommand(SpellCard):
def __init__(self):
super().__init__("Kill Command", 3, CHARACTER_CLASS.HUNTER, CARD_RARITY.COMMON, target_func=hearthbreaker.targeting.find_spell_target)
def use(self, player, game):
super().use(player, game)
beasts = hearthbreaker.targeting.find_friendly_minion_battlecry_target(
player.game, lambda x: x.card.minion_type is MINION_TYPE.BEAST)
if beasts is None:
self.target.damage(player.effective_spell_damage(3), self)
else:
self.target.damage(player.effective_spell_damage(5), self)
Kobold Geomancer
2
Minion
Common
NIL
Neutral
<b>Spell Damage +1</b>
2
2
-1
6
class KoboldGeomancer(MinionCard):
def __init__(self):
super().__init__("Kobold Geomancer", 2, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(2, 2, spell_damage=1)
Kor'kron Elite
4
Minion
Common
NIL
Warrior
<b>Charge</b>
3
4
-1
6
class KorkronElite(MinionCard):
def __init__(self):
super().__init__("Kor'kron Elite", 4, CHARACTER_CLASS.WARRIOR, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(4, 3, charge=True)
Leokk
3
Minion
Common
Beast
Hunter
Your other minions have +1 Attack.
4
2
-1
6
class Leokk(MinionCard):
def __init__(self):
super().__init__("Leokk", 3, CHARACTER_CLASS.HUNTER, CARD_RARITY.COMMON, False, minion_type=MINION_TYPE.BEAST)
def create_minion(self, player):
return Minion(2, 4, auras=[Aura(ChangeAttack(1), MinionSelector())])
Light's Justice
1
Weapon
Free
NIL
Paladin
NIL
-1
1
4
6
class LightsJustice(WeaponCard):
def __init__(self):
super().__init__("Light's Justice", 1, CHARACTER_CLASS.PALADIN, CARD_RARITY.FREE)
def create_weapon(self, player):
return Weapon(1, 4)
Lord of the Arena
6
Minion
Common
NIL
Neutral
<b>Taunt</b>
5
6
-1
6
class LordOfTheArena(MinionCard):
def __init__(self):
super().__init__("Lord of the Arena", 6, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(6, 5, taunt=True)
Magma Rager
3
Minion
Free
NIL
Neutral
NIL
1
5
-1
6
class MagmaRager(MinionCard):
def __init__(self):
super().__init__("Magma Rager", 3, CHARACTER_CLASS.ALL, CARD_RARITY.FREE)
def create_minion(self, player):
return Minion(5, 1)
Mark of the Wild
2
Spell
Free
NIL
Druid
Give a minion <b>Taunt</b> and +2/+2.<i> (+2 Attack/+2 Health)</i>
-1
-1
-1
9
class MarkOfTheWild(SpellCard):
def __init__(self):
super().__init__("Mark of the Wild", 2, CHARACTER_CLASS.DRUID, CARD_RARITY.FREE, target_func=hearthbreaker.targeting.find_minion_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.change_attack(2)
self.target.increase_health(2)
self.target.taunt = True
Mechanical Dragonling
1
Minion
Common
Mech
Neutral
NIL
1
2
-1
6
class MechanicalDragonling(MinionCard):
def __init__(self):
super().__init__("Mechanical Dragonling", 1, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, False, minion_type=MINION_TYPE.MECH)
def create_minion(self, player):
return Minion(2, 1)
Mind Blast
2
Spell
Free
NIL
Priest
Deal $5 damage to the enemy hero.
-1
-1
-1
8
class MindBlast(SpellCard):
def __init__(self):
super().__init__("Mind Blast", 2, CHARACTER_CLASS.PRIEST, CARD_RARITY.FREE)
def use(self, player, game):
super().use(player, game)
game.other_player.hero.damage(player.effective_spell_damage(5), self)
Mind Control
10
Spell
Common
NIL
Priest
Take control of an enemy minion.
-1
-1
-1
12
class MindControl(SpellCard):
def __init__(self):
super().__init__("Mind Control", 10, CHARACTER_CLASS.PRIEST, CARD_RARITY.COMMON, target_func=hearthbreaker.targeting.find_enemy_minion_spell_target)
def use(self, player, game):
super().use(player, game)
new_minion = self.target.copy(player)
self.target.remove_from_board()
new_minion.add_to_board(len(player.minions))
def can_use(self, player, game):
return super().can_use(player, game) and len(player.minions) < 7
Mind Vision
1
Spell
Common
NIL
Priest
Put a copy of a random card in your opponent's hand into your hand.
-1
-1
-1
11
class MindVision(SpellCard):
def __init__(self):
super().__init__("Mind Vision", 1, CHARACTER_CLASS.PRIEST, CARD_RARITY.COMMON)
def use(self, player, game):
super().use(player, game)
if (len(game.other_player.hand) > 0):
card = copy.deepcopy(game.random_choice(game.other_player.hand))
player.hand.append(card)
card.player = player
Mirror Image
0
Minion
Common
NIL
Mage
<b>Taunt</b>
2
0
-1
11
class MirrorImage(SpellCard):
def __init__(self):
super().__init__("Mirror Image", 1, CHARACTER_CLASS.MAGE, CARD_RARITY.COMMON)
def use(self, player, game):
super().use(player, game)
for i in range(0, 2):
MirrorImageMinion().summon(player, game, len(player.minions))
def can_use(self, player, game):
return super().can_use(player, game) and len(player.minions) < 7
Mirror Image
1
Spell
Common
NIL
Mage
Summon two 0/2 minions with <b>Taunt</b>.
-1
-1
-1
11
class MirrorImage(SpellCard):
def __init__(self):
super().__init__("Mirror Image", 1, CHARACTER_CLASS.MAGE, CARD_RARITY.COMMON)
def use(self, player, game):
super().use(player, game)
for i in range(0, 2):
MirrorImageMinion().summon(player, game, len(player.minions))
def can_use(self, player, game):
return super().can_use(player, game) and len(player.minions) < 7
Misha
3
Minion
Common
Beast
Hunter
<b>Taunt</b>
4
4
-1
6
class Misha(MinionCard):
def __init__(self):
super().__init__("Misha", 3, CHARACTER_CLASS.HUNTER, CARD_RARITY.COMMON, False, minion_type=MINION_TYPE.BEAST)
def create_minion(self, player):
return Minion(4, 4, taunt=True)
Moonfire
0
Spell
Common
NIL
Druid
Deal $1 damage.
-1
-1
-1
7
class Moonfire(SpellCard):
def __init__(self):
super().__init__("Moonfire", 0, CHARACTER_CLASS.DRUID, CARD_RARITY.COMMON, target_func=hearthbreaker.targeting.find_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.damage(player.effective_spell_damage(1), self)
Mortal Coil
1
Spell
Common
NIL
Warlock
Deal $1 damage to a minion. If that kills it, draw a card.
-1
-1
-1
11
class MortalCoil(SpellCard):
def __init__(self):
super().__init__("Mortal Coil", 1, CHARACTER_CLASS.WARLOCK, CARD_RARITY.COMMON, target_func=hearthbreaker.targeting.find_minion_spell_target)
def use(self, player, game):
super().use(player, game)
if self.target.health <= player.effective_spell_damage(1) and not self.target.divine_shield:
self.target.damage(player.effective_spell_damage(1), self)
player.draw()
else:
self.target.damage(player.effective_spell_damage(1), self)
Multi-Shot
4
Spell
Free
NIL
Hunter
Deal $3 damage to two random enemy minions.
-1
-1
-1
15
class MultiShot(SpellCard):
def __init__(self):
super().__init__("Multi-Shot", 4, CHARACTER_CLASS.HUNTER, CARD_RARITY.FREE)
def use(self, player, game):
super().use(player, game)
targets = copy.copy(game.other_player.minions)
for i in range(0, 2):
target = game.random_choice(targets)
targets.remove(target)
target.damage(player.effective_spell_damage(3), self)
def can_use(self, player, game):
return super().can_use(player, game) and len(game.other_player.minions) >= 2
Murloc Raider
1
Minion
Free
Murloc
Neutral
NIL
1
2
-1
6
class MurlocRaider(MinionCard):
def __init__(self):
super().__init__("Murloc Raider", 1, CHARACTER_CLASS.ALL, CARD_RARITY.FREE, minion_type=MINION_TYPE.MURLOC)
def create_minion(self, player):
return Minion(2, 1)
Murloc Scout
0
Minion
Common
Murloc
Neutral
NIL
1
1
-1
6
class MurlocScout(MinionCard):
def __init__(self):
super().__init__("Murloc Scout", 0, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, False, minion_type=MINION_TYPE.MURLOC)
def create_minion(self, player):
return Minion(1, 1)
Murloc Tidehunter
2
Minion
Common
Murloc
Neutral
<b>Battlecry:</b> Summon a 1/1 Murloc Scout.
1
2
-1
6
class MurlocTidehunter(MinionCard):
def __init__(self):
super().__init__("Murloc Tidehunter", 2, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, minion_type=MINION_TYPE.MURLOC, battlecry=Battlecry(Summon(MurlocScout()), PlayerSelector()))
def create_minion(self, player):
return Minion(2, 1)
Nightblade
5
Minion
Free
NIL
Neutral
<b>Battlecry: </b>Deal 3 damage to the enemy hero.
4
4
-1
6
class Nightblade(MinionCard):
def __init__(self):
super().__init__("Nightblade", 5, CHARACTER_CLASS.ALL, CARD_RARITY.FREE, battlecry=Battlecry(Damage(3), HeroSelector(EnemyPlayer())))
def create_minion(self, player):
return Minion(4, 4)
Northshire Cleric
1
Minion
Free
NIL
Priest
Whenever a minion is healed, draw a card.
3
1
-1
6
class NorthshireCleric(MinionCard):
def __init__(self):
super().__init__("Northshire Cleric", 1, CHARACTER_CLASS.PRIEST, CARD_RARITY.FREE)
def create_minion(self, player):
return Minion(1, 3, effects=[Effect(CharacterHealed(condition=IsMinion(), player=BothPlayer()), ActionTag(Draw(), PlayerSelector()))])
Novice Engineer
2
Minion
Free
NIL
Neutral
<b>Battlecry:</b> Draw a card.
1
1
-1
6
class NoviceEngineer(MinionCard):
def __init__(self):
super().__init__("Novice Engineer", 2, CHARACTER_CLASS.ALL, CARD_RARITY.FREE, battlecry=Battlecry(Draw(), PlayerSelector()))
def create_minion(self, player):
return Minion(1, 1)
Oasis Snapjaw
4
Minion
Free
Beast
Neutral
NIL
7
2
-1
6
class OasisSnapjaw(MinionCard):
def __init__(self):
super().__init__("Oasis Snapjaw", 4, CHARACTER_CLASS.ALL, CARD_RARITY.FREE, minion_type=MINION_TYPE.BEAST)
def create_minion(self, player):
return Minion(2, 7)
Ogre Magi
4
Minion
Common
NIL
Neutral
<b>Spell Damage +1</b>
4
4
-1
6
class OgreMagi(MinionCard):
def __init__(self):
super().__init__("Ogre Magi", 4, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(4, 4, spell_damage=1)
Polymorph
4
Spell
Free
NIL
Mage
Transform a minion into a 1/1 Sheep.
-1
-1
-1
11
class Polymorph(SpellCard):
def __init__(self):
super().__init__("Polymorph", 4, CHARACTER_CLASS.MAGE, CARD_RARITY.FREE, target_func=hearthbreaker.targeting.find_minion_spell_target)
def use(self, player, game):
super().use(player, game)
from hearthbreaker.cards.minions.mage import Sheep
sheep = Sheep()
minion = sheep.create_minion(None)
minion.card = sheep
self.target.replace(minion)
Power Word: Shield
1
Spell
Free
NIL
Priest
Give a minion +2 Health. NL Draw a card.
-1
-1
-1
9
class PowerWordShield(SpellCard):
def __init__(self):
super().__init__("Power Word: Shield", 1, CHARACTER_CLASS.PRIEST, CARD_RARITY.FREE, target_func=hearthbreaker.targeting.find_minion_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.increase_health(2)
player.draw()
Raid Leader
3
Minion
Free
NIL
Neutral
Your other minions have +1 Attack.
2
2
-1
6
class RaidLeader(MinionCard):
def __init__(self):
super().__init__("Raid Leader", 3, CHARACTER_CLASS.ALL, CARD_RARITY.FREE)
def create_minion(self, player):
return Minion(2, 2, auras=[Aura(ChangeAttack(1), MinionSelector())])
Razorfen Hunter
3
Minion
Common
NIL
Neutral
<b>Battlecry:</b> Summon a 1/1 Boar.
3
2
-1
6
class RazorfenHunter(MinionCard):
def __init__(self):
super().__init__("Razorfen Hunter", 3, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, battlecry=Battlecry(Summon(Boar()), PlayerSelector()))
def create_minion(self, player):
return Minion(2, 3)
Reckless Rocketeer
6
Minion
Free
NIL
Neutral
<b>Charge</b>
2
5
-1
6
class RecklessRocketeer(MinionCard):
def __init__(self):
super().__init__("Reckless Rocketeer", 6, CHARACTER_CLASS.ALL, CARD_RARITY.FREE)
def create_minion(self, player):
return Minion(5, 2, charge=True)
River Crocolisk
2
Minion
Free
Beast
Neutral
NIL
3
2
-1
6
class RiverCrocolisk(MinionCard):
def __init__(self):
super().__init__("River Crocolisk", 2, CHARACTER_CLASS.ALL, CARD_RARITY.FREE, minion_type=MINION_TYPE.BEAST)
def create_minion(self, player):
return Minion(2, 3)
Rockbiter Weapon
1
Spell
Free
NIL
Shaman
Give a friendly character +3 Attack this turn.
-1
-1
-1
7
class RockbiterWeapon(SpellCard):
def __init__(self):
super().__init__("Rockbiter Weapon", 1, CHARACTER_CLASS.SHAMAN, CARD_RARITY.FREE, target_func=hearthbreaker.targeting.find_friendly_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.change_temp_attack(3)
Sacrificial Pact
0
Spell
Common
NIL
Warlock
Destroy a Demon. Restore #5 Health to your hero.
-1
-1
-1
8
class SacrificialPact(SpellCard):
def __init__(self):
super().__init__("Sacrificial Pact", 0, CHARACTER_CLASS.WARLOCK, CARD_RARITY.COMMON, target_func=hearthbreaker.targeting.find_spell_target, filter_func=lambda character: character.card.minion_type == MINION_TYPE.DEMON)
def use(self, player, game):
super().use(player, game)
self.target.die(self)
player.hero.heal(player.effective_heal_power(5), self)
Sap
2
Spell
Free
NIL
Rogue
Return an enemy minion to your opponent's hand.
-1
-1
-1
8
class Sap(SpellCard):
def __init__(self):
super().__init__("Sap", 2, CHARACTER_CLASS.ROGUE, CARD_RARITY.FREE, target_func=hearthbreaker.targeting.find_enemy_minion_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.bounce()
Savage Roar
3
Spell
Common
NIL
Druid
Give your characters +2 Attack this turn.
-1
-1
-1
9
class SavageRoar(SpellCard):
def __init__(self):
super().__init__("Savage Roar", 3, CHARACTER_CLASS.DRUID, CARD_RARITY.COMMON)
def use(self, player, game):
super().use(player, game)
for minion in player.minions:
minion.change_temp_attack(2)
player.hero.change_temp_attack(2)
Searing Totem
1
Minion
Free
Totem
Shaman
NIL
1
1
-1
6
class SearingTotem(MinionCard):
def __init__(self):
super().__init__("Searing Totem", 1, CHARACTER_CLASS.SHAMAN, CARD_RARITY.FREE, False, MINION_TYPE.TOTEM)
def create_minion(self, player):
return Minion(1, 1)
Sen'jin Shieldmasta
4
Minion
Free
NIL
Neutral
<b>Taunt</b>
5
3
-1
6
class SenjinShieldmasta(MinionCard):
def __init__(self):
super().__init__("Sen'jin Shieldmasta", 4, CHARACTER_CLASS.ALL, CARD_RARITY.FREE)
def create_minion(self, player):
return Minion(3, 5, taunt=True)
Shadow Bolt
3
Spell
Free
NIL
Warlock
Deal $4 damage to a minion.
-1
-1
-1
7
class ShadowBolt(SpellCard):
def __init__(self):
super().__init__("Shadow Bolt", 3, CHARACTER_CLASS.WARLOCK, CARD_RARITY.FREE, target_func=hearthbreaker.targeting.find_minion_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.damage(player.effective_spell_damage(4), self)
Shadow Word: Death
3
Spell
Common
NIL
Priest
Destroy a minion with an Attack of 5 or more.
-1
-1
-1
8
class ShadowWordDeath(SpellCard):
def __init__(self):
super().__init__("Shadow Word: Death", 3, CHARACTER_CLASS.PRIEST, CARD_RARITY.COMMON, target_func=hearthbreaker.targeting.find_minion_spell_target, filter_func=lambda target: target.calculate_attack() >= 5 and target.spell_targetable())
def use(self, player, game):
super().use(player, game)
self.target.die(self)
Shadow Word: Pain
2
Spell
Free
NIL
Priest
Destroy a minion with 3 or less Attack.
-1
-1
-1
8
class ShadowWordPain(SpellCard):
def __init__(self):
super().__init__("Shadow Word: Pain", 2, CHARACTER_CLASS.PRIEST, CARD_RARITY.FREE, target_func=hearthbreaker.targeting.find_minion_spell_target, filter_func=lambda target: target.calculate_attack() <= 3 and target.spell_targetable())
def use(self, player, game):
super().use(player, game)
self.target.die(self)
Shattered Sun Cleric
3
Minion
Common
NIL
Neutral
<b>Battlecry:</b> Give a friendly minion +1/+1.
2
3
-1
6
class ShatteredSunCleric(MinionCard):
def __init__(self):
super().__init__("Shattered Sun Cleric", 3, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, battlecry=Battlecry(Give([Buff(ChangeAttack(1)), Buff(ChangeHealth(1))]), MinionSelector(picker=UserPicker())))
def create_minion(self, player):
return Minion(3, 2)
Sheep
0
Minion
Common
Beast
Neutral
NIL
1
1
-1
6
class Sheep(MinionCard):
def __init__(self):
super().__init__("Sheep", 0, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, False, MINION_TYPE.BEAST)
def create_minion(self, p):
return Minion(1, 1)
Shield Block
3
Spell
Common
NIL
Warrior
Gain 5 Armor. NL Draw a card.
-1
-1
-1
8
class ShieldBlock(SpellCard):
def __init__(self):
super().__init__("Shield Block", 3, CHARACTER_CLASS.WARRIOR, CARD_RARITY.COMMON)
def use(self, player, game):
super().use(player, game)
player.hero.increase_armor(5)
player.draw()
Shiv
2
Spell
Common
NIL
Rogue
Deal $1 damage. Draw a card.
-1
-1
-1
9
class Shiv(SpellCard):
def __init__(self):
super().__init__("Shiv", 2, CHARACTER_CLASS.ROGUE, CARD_RARITY.COMMON, target_func=hearthbreaker.targeting.find_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.damage(player.effective_spell_damage(1), self)
player.draw()
Silver Hand Recruit
1
Minion
Free
NIL
Paladin
NIL
1
1
-1
6
class SilverHandRecruit(MinionCard):
def __init__(self):
super().__init__("Silver Hand Recruit", 1, CHARACTER_CLASS.PALADIN, CARD_RARITY.FREE, False)
def create_minion(self, player):
return Minion(1, 1)
Silverback Patriarch
3
Minion
Common
Beast
Neutral
<b>Taunt</b>
4
1
-1
6
class SilverbackPatriarch(MinionCard):
def __init__(self):
super().__init__("Silverback Patriarch", 3, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, minion_type=MINION_TYPE.BEAST)
def create_minion(self, player):
return Minion(1, 4, taunt=True)
Sinister Strike
1
Spell
Free
NIL
Rogue
Deal $3 damage to the enemy hero.
-1
-1
-1
8
class SinisterStrike(SpellCard):
def __init__(self):
super().__init__("Sinister Strike", 1, CHARACTER_CLASS.ROGUE, CARD_RARITY.FREE)
def use(self, player, game):
super().use(player, game)
game.other_player.hero.damage(player.effective_spell_damage(3), self)
Soulfire
1
Spell
Common
NIL
Warlock
Deal $4 damage. Discard a random card.
-1
-1
-1
8
class Soulfire(SpellCard):
def __init__(self):
super().__init__("Soulfire", 1, CHARACTER_CLASS.WARLOCK, CARD_RARITY.COMMON, target_func=hearthbreaker.targeting.find_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.damage(player.effective_spell_damage(4), self)
player.discard()
Sprint
7
Spell
Common
NIL
Rogue
Draw 4 cards.
-1
-1
-1
9
class Sprint(SpellCard):
def __init__(self):
super().__init__("Sprint", 7, CHARACTER_CLASS.ROGUE, CARD_RARITY.COMMON)
def use(self, player, game):
super().use(player, game)
for i in range(0, 4):
player.draw()
Starfire
6
Spell
Common
NIL
Druid
Deal $5 damage. NL Draw a card.
-1
-1
-1
8
class Starfire(SpellCard):
def __init__(self):
super().__init__("Starfire", 6, CHARACTER_CLASS.DRUID, CARD_RARITY.COMMON, target_func=hearthbreaker.targeting.find_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.damage(player.effective_spell_damage(5), self)
player.draw()
Starving Buzzard
5
Minion
Common
Beast
Hunter
Whenever you summon a Beast, draw a card.
2
3
-1
6
class StarvingBuzzard(MinionCard):
def __init__(self):
super().__init__("Starving Buzzard", 5, CHARACTER_CLASS.HUNTER, CARD_RARITY.COMMON, minion_type=MINION_TYPE.BEAST)
def create_minion(self, player):
return Minion(3, 2, effects=[Effect(MinionPlaced(IsType(MINION_TYPE.BEAST)), ActionTag(Draw(), PlayerSelector()))])
Stoneclaw Totem
1
Minion
Free
Totem
Shaman
<b>Taunt</b>
2
0
-1
6
class StoneclawTotem(MinionCard):
def __init__(self):
super().__init__("Stoneclaw Totem", 1, CHARACTER_CLASS.SHAMAN, CARD_RARITY.FREE, False, MINION_TYPE.TOTEM)
def create_minion(self, player):
return Minion(0, 2, taunt=True)
Stonetusk Boar
1
Minion
Free
Beast
Neutral
<b>Charge</b>
1
1
-1
6
class StonetuskBoar(MinionCard):
def __init__(self):
super().__init__("Stonetusk Boar", 1, CHARACTER_CLASS.ALL, CARD_RARITY.FREE, minion_type=MINION_TYPE.BEAST)
def create_minion(self, player):
return Minion(1, 1, charge=True)
Stormpike Commando
5
Minion
Common
NIL
Neutral
<b>Battlecry:</b> Deal 2 damage.
2
4
-1
6
class StormpikeCommando(MinionCard):
def __init__(self):
super().__init__("Stormpike Commando", 5, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, battlecry=Battlecry(Damage(2), CharacterSelector(players=BothPlayer(), picker=UserPicker())))
def create_minion(self, player):
return Minion(4, 2)
Stormwind Champion
7
Minion
Common
NIL
Neutral
Your other minions have +1/+1.
6
6
-1
6
class StormwindChampion(MinionCard):
def __init__(self):
super().__init__("Stormwind Champion", 7, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(6, 6, auras=[Aura(ChangeAttack(1), MinionSelector()), Aura(ChangeHealth(1), MinionSelector())])
Stormwind Knight
4
Minion
Common
NIL
Neutral
<b>Charge</b>
5
2
-1
6
class StormwindKnight(MinionCard):
def __init__(self):
super().__init__("Stormwind Knight", 4, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(2, 5, charge=True)
Succubus
2
Minion
Free
Demon
Warlock
<b>Battlecry:</b> Discard a random card.
3
4
-1
6
class Succubus(MinionCard):
def __init__(self):
super().__init__("Succubus", 2, CHARACTER_CLASS.WARLOCK, CARD_RARITY.FREE, minion_type=MINION_TYPE.DEMON, battlecry=Battlecry(Discard(), PlayerSelector()))
def create_minion(self, player):
return Minion(4, 3)
Swipe
4
Spell
Common
NIL
Druid
Deal $4 damage to an enemy and $1 damage to all other enemies.
-1
-1
-1
14
class Swipe(SpellCard):
def __init__(self):
super().__init__("Swipe", 4, CHARACTER_CLASS.DRUID, CARD_RARITY.COMMON, target_func=hearthbreaker.targeting.find_enemy_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.damage(4, self)
for minion in copy.copy(game.other_player.minions):
if minion is not self.target:
minion.damage(player.effective_spell_damage(1), self)
if self.target is not game.other_player.hero:
game.other_player.hero.damage(player.effective_spell_damage(1), self)
Timber Wolf
1
Minion
Free
Beast
Hunter
Your other Beasts have +1 Attack.
1
1
-1
6
class TimberWolf(MinionCard):
def __init__(self):
super().__init__("Timber Wolf", 1, CHARACTER_CLASS.HUNTER, CARD_RARITY.FREE, minion_type=MINION_TYPE.BEAST)
def create_minion(self, player):
return Minion(1, 1, auras=[Aura(ChangeAttack(1), MinionSelector(IsType(MINION_TYPE.BEAST)))])
Totemic Might
0
Spell
Common
NIL
Shaman
Give your Totems +2 Health.
-1
-1
-1
10
class TotemicMight(SpellCard):
def __init__(self):
super().__init__("Totemic Might", 0, CHARACTER_CLASS.SHAMAN, CARD_RARITY.COMMON)
def use(self, player, game):
super().use(player, game)
for minion in player.minions:
if minion.card.minion_type == MINION_TYPE.TOTEM:
minion.increase_health(2)
Tracking
1
Spell
Free
NIL
Hunter
Look at the top three cards of your deck. Draw one and discard the others.
-1
-1
-1
15
class Tracking(SpellCard):
def __init__(self):
super().__init__("Tracking", 1, CHARACTER_CLASS.HUNTER, CARD_RARITY.FREE)
def use(self, player, game):
super().use(player, game)
cards = []
for card_index in range(0, 3):
if player.can_draw():
cards.append(player.deck.draw(game))
if len(cards) > 0:
chosen_card = player.agent.choose_option(cards, player)
player.hand.append(chosen_card)
player.hand[-1].player = player
player.trigger("card_drawn", chosen_card)
Truesilver Champion
4
Weapon
Common
NIL
Paladin
Whenever your hero attacks, restore 2 Health to it.
-1
4
2
6
class TruesilverChampion(WeaponCard):
def __init__(self):
super().__init__("Truesilver Champion", 4, CHARACTER_CLASS.PALADIN, CARD_RARITY.COMMON)
def create_weapon(self, player):
return Weapon(4, 2, effects=[Effect(CharacterAttack(IsHero()), ActionTag(Heal(2), HeroSelector()))])
Tundra Rhino
5
Minion
Common
Beast
Hunter
Your Beasts have <b>Charge</b>.
5
2
-1
6
class TundraRhino(MinionCard):
def __init__(self):
super().__init__("Tundra Rhino", 5, CHARACTER_CLASS.HUNTER, CARD_RARITY.COMMON, minion_type=MINION_TYPE.BEAST)
def create_minion(self, player):
return Minion(2, 5, charge=True, auras=[Aura(Charge(), MinionSelector(IsType(MINION_TYPE.BEAST)))])
Vanish
6
Spell
Common
NIL
Rogue
Return all minions to their owner's hand.
-1
-1
-1
12
class Vanish(SpellCard):
def __init__(self):
super().__init__("Vanish", 6, CHARACTER_CLASS.ROGUE, CARD_RARITY.COMMON)
def use(self, player, game):
super().use(player, game)
targets = copy.copy(game.other_player.minions)
targets.extend(player.minions)
for minion in sorted(targets, key=lambda m: m.born):
minion.bounce()
Voidwalker
1
Minion
Free
Demon
Warlock
<b>Taunt</b>
3
1
-1
6
class Voidwalker(MinionCard):
def __init__(self):
super().__init__("Voidwalker", 1, CHARACTER_CLASS.WARLOCK, CARD_RARITY.FREE, minion_type=MINION_TYPE.DEMON)
def create_minion(self, player):
return Minion(1, 3, taunt=True)
Voodoo Doctor
1
Minion
Free
NIL
Neutral
<b>Battlecry:</b> Restore 2 Health.
1
2
-1
6
class VoodooDoctor(MinionCard):
def __init__(self):
super().__init__("Voodoo Doctor", 1, CHARACTER_CLASS.ALL, CARD_RARITY.FREE, battlecry=Battlecry(Heal(2), CharacterSelector(players=BothPlayer(), picker=UserPicker())))
def create_minion(self, player):
return Minion(2, 1)
War Golem
7
Minion
Common
NIL
Neutral
NIL
7
7
-1
6
class WarGolem(MinionCard):
def __init__(self):
super().__init__("War Golem", 7, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(7, 7)
Warsong Commander
3
Minion
Free
NIL
Warrior
Whenever you summon a minion with 3 or less Attack, give it <b>Charge</b>.
3
2
-1
6
class WarsongCommander(MinionCard):
def __init__(self):
super().__init__("Warsong Commander", 3, CHARACTER_CLASS.WARRIOR, CARD_RARITY.FREE)
def create_minion(self, player):
return Minion(2, 3, effects=[Effect(MinionPlaced(AttackLessThanOrEqualTo(3)), ActionTag(Give(Charge()), TargetSelector()))])
Water Elemental
4
Minion
Common
NIL
Mage
<b>Freeze</b> any character damaged by this minion.
6
3
-1
6
class WaterElemental(MinionCard):
def __init__(self):
super().__init__("Water Elemental", 4, CHARACTER_CLASS.MAGE, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(3, 6, effects=[Effect(DidDamage(), ActionTag(Give(Frozen()), TargetSelector()))])
Whirlwind
1
Spell
Common
NIL
Warrior
Deal $1 damage to ALL minions.
-1
-1
-1
10
class Whirlwind(SpellCard):
def __init__(self):
super().__init__("Whirlwind", 1, CHARACTER_CLASS.WARRIOR, CARD_RARITY.COMMON)
def use(self, player, game):
super().use(player, game)
targets = copy.copy(game.other_player.minions)
targets.extend(game.current_player.minions)
for minion in targets:
minion.damage(player.effective_spell_damage(1), self)
Wicked Knife
1
Weapon
Free
NIL
Rogue
NIL
-1
1
2
6
class WickedKnife(WeaponCard):
def __init__(self):
super().__init__("Wicked Knife", 1, CHARACTER_CLASS.ROGUE, CARD_RARITY.FREE, False)
def create_weapon(self, player):
return Weapon(1, 2)
Wild Growth
2
Spell
Free
NIL
Druid
Gain an empty Mana Crystal.
-1
-1
-1
11
class WildGrowth(SpellCard):
def __init__(self):
super().__init__("Wild Growth", 2, CHARACTER_CLASS.DRUID, CARD_RARITY.FREE)
def use(self, player, game):
super().use(player, game)
if player.max_mana < 10:
player.max_mana += 1
else:
player.hand.append(ExcessMana())
player.hand[-1].player = player
Windfury
2
Spell
Free
NIL
Shaman
Give a minion <b>Windfury</b>.
-1
-1
-1
8
class Windfury(SpellCard):
def __init__(self):
super().__init__("Windfury", 2, CHARACTER_CLASS.SHAMAN, CARD_RARITY.FREE, target_func=hearthbreaker.targeting.find_minion_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.add_buff(Buff(_Windfury()))
Windspeaker
4
Minion
Common
NIL
Shaman
<b>Battlecry:</b> Give a friendly minion <b>Windfury</b>.
3
3
-1
6
class Windspeaker(MinionCard):
def __init__(self):
super().__init__("Windspeaker", 4, CHARACTER_CLASS.SHAMAN, CARD_RARITY.COMMON, battlecry=Battlecry(Give(Windfury()), MinionSelector(picker=UserPicker())))
def create_minion(self, player):
return Minion(3, 3)
Wolfrider
3
Minion
Free
NIL
Neutral
<b>Charge</b>
1
3
-1
6
class Wolfrider(MinionCard):
def __init__(self):
super().__init__("Wolfrider", 3, CHARACTER_CLASS.ALL, CARD_RARITY.FREE)
def create_minion(self, player):
return Minion(3, 1, charge=True)
Wrath of Air Totem
1
Minion
Free
Totem
Shaman
<b>Spell Damage +1</b>
2
0
-1
6
class WrathOfAirTotem(MinionCard):
def __init__(self):
super().__init__("Wrath of Air Totem", 1, CHARACTER_CLASS.SHAMAN, CARD_RARITY.FREE, False, MINION_TYPE.TOTEM)
def create_minion(self, player):
return Minion(0, 2, spell_damage=1)
Acidmaw
7
Minion
Legendary
Beast
Hunter
Whenever another minion takes damage, destroy it.
2
4
-1
6
class Acidmaw(MinionCard):
def __init__(self):
super().__init__("Acidmaw", 7, CHARACTER_CLASS.HUNTER, CARD_RARITY.LEGENDARY, minion_type=MINION_TYPE.BEAST)
def create_minion(self, player):
return Minion(4, 2, effects=[Effect(CharacterDamaged(MinionIsNotTarget(), BothPlayer()), [ActionTag(Kill(), TargetSelector())])])
Alexstrasza's Champion
2
Minion
Rare
NIL
Warrior
<b>Battlecry:</b> If you're holding a Dragon, gain +1 Attack and <b>Charge</b>.
3
2
-1
6
class AlexstraszasChampion(MinionCard):
def __init__(self):
super().__init__("Alexstrasza's Champion", 2, CHARACTER_CLASS.WARRIOR, CARD_RARITY.RARE, battlecry=(Battlecry(Give([Buff(ChangeAttack(1)), Buff(Charge())]), SelfSelector(), GreaterThan(Count(CardSelector(condition=IsType(MINION_TYPE.DRAGON))), value=0))))
def create_minion(self, player):
return Minion(2, 3)
Ancestral Knowledge
2
Spell
Common
NIL
Shaman
Draw 2 cards. <b>Overload: (2)</b>
-1
-1
-1
8
class AncestralKnowledge(SpellCard):
def __init__(self):
super().__init__("Ancestral Knowledge", 2, CHARACTER_CLASS.SHAMAN, CARD_RARITY.COMMON, overload=2)
def use(self, player, game):
super().use(player, game)
for c in range(0, 2):
player.draw()
Anub'arak
9
Minion
Legendary
NIL
Rogue
<b>Deathrattle:</b> Return this to your hand and summon a 4/4 Nerubian.
4
8
-1
6
class Anubarak(MinionCard):
def __init__(self):
super().__init__("Anub'arak", 9, CHARACTER_CLASS.ROGUE, CARD_RARITY.LEGENDARY)
def create_minion(self, player):
return Minion(8, 4, deathrattle=[Deathrattle(Bounce(), SelfSelector()), Deathrattle(Summon(Nerubian()), PlayerSelector())])
Arcane Blast
1
Spell
Epic
NIL
Mage
Deal $2 damage to a minion. This spell gets double bonus from <b>Spell Damage</b>.
-1
-1
-1
7
class ArcaneBlast(SpellCard):
def __init__(self):
super().__init__("Arcane Blast", 1, CHARACTER_CLASS.MAGE, CARD_RARITY.EPIC, target_func=hearthbreaker.targeting.find_minion_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.damage(player.effective_spell_damage(2 + player.spell_damage), self)
Argent Horserider
3
Minion
Common
NIL
Neutral
<b>Charge</b> NL <b>Divine Shield</b>
1
2
-1
6
class ArgentHorserider(MinionCard):
def __init__(self):
super().__init__("Argent Horserider", 3, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(2, 1, charge=True, divine_shield=True)
Argent Lance
2
Weapon
Rare
NIL
Paladin
<b>Battlecry:</b> Reveal a minion in each deck. If yours costs more, +1 Durability.
-1
2
2
6
class ArgentLance(WeaponCard):
def __init__(self):
super().__init__("Argent Lance", 2, CHARACTER_CLASS.PALADIN, CARD_RARITY.RARE, battlecry=Battlecry(Joust(IncreaseDurability()), SelfSelector()))
def create_weapon(self, player):
return Weapon(2, 2)
Argent Watchman
2
Minion
Rare
NIL
Neutral
Can't attack. NL <b>Inspire:</b> Can attack as normal this turn.
4
2
-1
6
class ArgentWatchman(MinionCard):
def __init__(self):
super().__init__("Argent Watchman", 2, CHARACTER_CLASS.ALL, CARD_RARITY.RARE)
def create_minion(self, player):
return Minion(2, 4, buffs=[Buff(CantAttack())], effects=[Effect(UsedPower(), ActionTag(Give(BuffUntil(CanAttack(), TurnEnded())), SelfSelector()))])
Armored Warhorse
4
Minion
Rare
Beast
Neutral
<b>Battlecry:</b> Reveal a minion in each deck. If yours costs more, gain <b>Charge</b>.
3
5
-1
6
class ArmoredWarhorse(MinionCard):
def __init__(self):
super().__init__("Armored Warhorse", 4, CHARACTER_CLASS.ALL, CARD_RARITY.RARE, minion_type=MINION_TYPE.BEAST, battlecry=Battlecry(Joust(Give(Buff(Charge()))), SelfSelector()))
def create_minion(self, player):
return Minion(5, 3)
Astral Communion
4
Spell
Epic
NIL
Druid
Gain 10 Mana Crystals. Discard your hand.
-1
-1
-1
12
class AstralCommunion(SpellCard):
def __init__(self):
super().__init__("Astral Communion", 4, CHARACTER_CLASS.DRUID, CARD_RARITY.EPIC)
def use(self, player, game):
super().use(player, game)
for card in player.hand:
card.unattach()
player.trigger("card_discarded", card)
player.hand = []
player.max_mana = 10
player.mana = 10
Boar
3
Minion
NIL
Beast
Neutral
<b>Charge</b>
2
4
-1
6
class Boar(MinionCard):
def __init__(self):
super().__init__("Boar", 1, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, False, minion_type=MINION_TYPE.BEAST)
def create_minion(self, player):
return Minion(1, 1)
Healing Totem
0
Minion
NIL
NIL
Shaman
At the end of your turn, restore 1 Health to all friendly minions.
2
0
-1
6
class HealingTotem(MinionCard):
def __init__(self):
super().__init__("Healing Totem", 1, CHARACTER_CLASS.SHAMAN, CARD_RARITY.FREE, False, MINION_TYPE.TOTEM)
def create_minion(self, player):
return Minion(0, 2, effects=[Effect(TurnEnded(), ActionTag(Heal(1), MinionSelector(condition=None)))])
Nerubian
3
Minion
NIL
NIL
Rogue
NIL
4
4
-1
6
class Nerubian(MinionCard):
def __init__(self):
super().__init__("Nerubian", 3, CHARACTER_CLASS.ALL, CARD_RARITY.RARE, False)
def create_minion(self, p):
return Minion(4, 4)
Searing Totem
0
Minion
NIL
NIL
Shaman
NIL
1
1
-1
6
class SearingTotem(MinionCard):
def __init__(self):
super().__init__("Searing Totem", 1, CHARACTER_CLASS.SHAMAN, CARD_RARITY.FREE, False, MINION_TYPE.TOTEM)
def create_minion(self, player):
return Minion(1, 1)
Stoneclaw Totem
0
Minion
NIL
NIL
Shaman
<b>Taunt</b>
2
0
-1
6
class StoneclawTotem(MinionCard):
def __init__(self):
super().__init__("Stoneclaw Totem", 1, CHARACTER_CLASS.SHAMAN, CARD_RARITY.FREE, False, MINION_TYPE.TOTEM)
def create_minion(self, player):
return Minion(0, 2, taunt=True)
Tournament Medic
4
Minion
Common
NIL
Neutral
<b>Inspire:</b> Restore 2 Health to your hero.
8
1
-1
6
class TournamentMedic(MinionCard):
def __init__(self):
super().__init__("Tournament Medic", 4, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(1, 8, effects=[Effect(UsedPower(), ActionTag(Heal(2), HeroSelector()))])
Wrath of Air Totem
0
Minion
NIL
NIL
Shaman
<b>Spell Damage +1</b>
2
0
-1
6
class WrathOfAirTotem(MinionCard):
def __init__(self):
super().__init__("Wrath of Air Totem", 1, CHARACTER_CLASS.SHAMAN, CARD_RARITY.FREE, False, MINION_TYPE.TOTEM)
def create_minion(self, player):
return Minion(0, 2, spell_damage=1)
Ancestor's Call
4
Spell
Epic
NIL
Shaman
Put a random minion from each player's hand into the battlefield.
-1
-1
-1
16
class AncestorsCall(SpellCard):
def __init__(self):
super().__init__("Ancestor's Call", 4, CHARACTER_CLASS.SHAMAN, CARD_RARITY.EPIC)
def can_use(self, player, game):
return super().can_use(player, game) and (len(player.minions) < 7 or len(player.opponent.minions) < 7)
def use(self, player, game):
super().use(player, game)
for player in game.players:
minions = [card for card in player.hand if card.is_minion()]
if len(minions) and len(player.minions) < 7:
minion_card = game.random_choice(minions)
minion_card.unattach()
player.hand.remove(minion_card)
minion_card.summon(player, game, len(player.minions))
Anima Golem
6
Minion
Epic
Mech
Warlock
At the end of each turn, destroy this minion if it's your only one.
9
9
-1
6
class AnimaGolem(MinionCard):
def __init__(self):
super().__init__("Anima Golem", 6, CHARACTER_CLASS.WARLOCK, CARD_RARITY.EPIC, minion_type=MINION_TYPE.MECH)
def create_minion(self, player):
return Minion(9, 9, effects=[Effect(TurnEnded(MinionCountIs(1), BothPlayer()), ActionTag(Kill(), SelfSelector()))])
Annoy-o-Tron
2
Minion
Common
Mech
Neutral
<b>Taunt</b> NL <b>Divine Shield</b>
2
1
-1
6
class AnnoyoTron(MinionCard):
def __init__(self):
super().__init__("Annoy-o-Tron", 2, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, minion_type=MINION_TYPE.MECH)
def create_minion(self, player):
return Minion(1, 2, divine_shield=True, taunt=True)
Anodized Robo Cub
2
Minion
Common
Mech
Druid
<b>Taunt</b>. <b>Choose One -</b> NL +1 Attack; or +1 Health.
2
2
-1
6
class AnodizedRoboCub(MinionCard):
def __init__(self):
super().__init__("Anodized Robo Cub", 2, CHARACTER_CLASS.DRUID, CARD_RARITY.COMMON, minion_type=MINION_TYPE.MECH, choices=[Choice(AttackMode(), Give([Buff(ChangeAttack(1))]), SelfSelector()), Choice(TankMode(), Give([Buff(ChangeHealth(1))]), SelfSelector())])
def create_minion(self, player):
return Minion(2, 2, taunt=True)
Antique Healbot
5
Minion
Common
Mech
Neutral
<b>Battlecry:</b> Restore 8 Health to your hero.
3
3
-1
6
class AntiqueHealbot(MinionCard):
def __init__(self):
super().__init__("Antique Healbot", 5, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, minion_type=MINION_TYPE.MECH, battlecry=Battlecry(Heal(8), HeroSelector()))
def create_minion(self, player):
return Minion(3, 3)
Arcane Nullifier X-21
4
Minion
Rare
Mech
Neutral
<b>Taunt</b> NL Can't be targeted by spells or Hero Powers.
5
2
-1
6
class ArcaneNullifierX21(MinionCard):
def __init__(self):
super().__init__("Arcane Nullifier X-21", 4, CHARACTER_CLASS.ALL, CARD_RARITY.RARE, minion_type=MINION_TYPE.MECH)
def create_minion(self, player):
return Minion(2, 5, taunt=True, spell_targetable=False)
Armor Plating
1
Spell
NIL
NIL
Neutral
Give a minion +1 Health.
-1
-1
-1
7
class ArmorPlating(SpellCard):
def __init__(self):
super().__init__("Armor Plating", 1, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, False, target_func=hearthbreaker.targeting.find_minion_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.increase_health(1)
Blingtron 3000
5
Minion
Legendary
Mech
Neutral
<b>Battlecry:</b> Equip a random weapon for each player.
4
3
-1
6
class Blingtron3000(MinionCard):
def __init__(self):
super().__init__("Blingtron 3000", 5, CHARACTER_CLASS.ALL, CARD_RARITY.LEGENDARY, minion_type=MINION_TYPE.MECH, battlecry=Battlecry(Equip(CardQuery(conditions=[IsWeapon()])), PlayerSelector(players=BothPlayer())))
def create_minion(self, player):
return Minion(3, 4)
Bolvar Fordragon
5
Minion
Legendary
NIL
Paladin
Whenever a friendly minion dies while this is in your hand, gain +1 Attack.
7
1
-1
6
class BolvarFordragon(MinionCard):
def __init__(self):
super().__init__("Bolvar Fordragon", 5, CHARACTER_CLASS.PALADIN, CARD_RARITY.LEGENDARY, effects=[Effect(MinionDied(), ActionTag(Give(ChangeAttack(1)), SelfSelector()))])
def create_minion(self, player):
return Minion(1, 7)
Bomb Lobber
5
Minion
Rare
NIL
Neutral
<b>Battlecry:</b> Deal 4 damage to a random enemy minion.
3
3
-1
6
class BombLobber(MinionCard):
def __init__(self):
super().__init__("Bomb Lobber", 5, CHARACTER_CLASS.ALL, CARD_RARITY.RARE, battlecry=Battlecry(Damage(4), MinionSelector(None, EnemyPlayer(), RandomPicker())))
def create_minion(self, player):
return Minion(3, 3)
Boom Bot
1
Minion
NIL
Mech
Neutral
<b>Deathrattle</b>: Deal 1-4 damage to a random enemy.
1
1
-1
6
class BoomBot(MinionCard):
def __init__(self):
super().__init__("Boom Bot", 1, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, False, minion_type=MINION_TYPE.MECH)
def create_minion(self, player):
return Minion(1, 1, deathrattle=Deathrattle(Damage(RandomAmount(1, 4)), CharacterSelector(players=EnemyPlayer(), picker=RandomPicker())))
Bouncing Blade
3
Spell
Epic
NIL
Warrior
Deal $1 damage to a random minion. Repeat until a minion dies.
-1
-1
-1
17
class BouncingBlade(SpellCard):
def __init__(self):
super().__init__("Bouncing Blade", 3, CHARACTER_CLASS.WARRIOR, CARD_RARITY.EPIC)
def can_use(self, player, game):
return super().can_use(player, game) and len(player.minions) + len(player.opponent.minions) >= 1
def use(self, player, game):
super().use(player, game)
targets = player.minions[:] + player.opponent.minions[:]
if len(targets):
for bounces in range(80):
target = game.random_choice(targets)
target.damage(player.effective_spell_damage(1), self)
if target.dead:
break
Burly Rockjaw Trogg
4
Minion
Common
NIL
Neutral
Whenever your opponent casts a spell, gain +2 Attack.
5
3
-1
6
class BurlyRockjawTrogg(MinionCard):
def __init__(self):
super().__init__("Burly Rockjaw Trogg", 4, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(3, 5, effects=[Effect(SpellCast(player=EnemyPlayer()), ActionTag(Give(ChangeAttack(2)), SelfSelector()))])
Burrowing Mine
0
Spell
NIL
NIL
Warrior
When you draw this, it explodes. You take 10 damage and draw a card.
-1
-1
-1
6
class BurrowingMine(SpellCard):
def __init__(self):
super().__init__("Burrowing Mine", 0, CHARACTER_CLASS.WARRIOR, CARD_RARITY.COMMON, False, effects=[Effect(Drawn(), ActionTag(Damage(10), HeroSelector())), Effect(Drawn(), ActionTag(Discard(query=CardQuery(source=CARD_SOURCE.LAST_DRAWN)), PlayerSelector())), Effect(Drawn(), ActionTag(Draw(), PlayerSelector()))])
def use(self, player, game):
super().use(player, game)
Call Pet
2
Spell
Rare
NIL
Hunter
Draw a card. NL If it's a Beast, it costs (4) less.
-1
-1
-1
12
class CallPet(SpellCard):
def __init__(self):
super().__init__("Call Pet", 2, CHARACTER_CLASS.HUNTER, CARD_RARITY.RARE)
def use(self, player, game):
def reduce_cost(card):
if card.is_minion() and card.minion_type == MINION_TYPE.BEAST:
card.add_buff(Buff(ManaChange(-4)))
super().use(player, game)
player.bind_once("card_drawn", reduce_cost)
player.draw()
Chicken
1
Minion
NIL
Beast
Neutral
NIL
1
1
-1
6
class Chicken(MinionCard):
def __init__(self):
super().__init__("Chicken", 0, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, False, MINION_TYPE.BEAST)
def create_minion(self, p):
return Minion(1, 1)
Clockwork Giant
12
Minion
Epic
Mech
Neutral
Costs (1) less for each card in your opponent's hand.
8
8
-1
6
class ClockworkGiant(MinionCard):
def __init__(self):
super().__init__("Clockwork Giant", 12, CHARACTER_CLASS.ALL, CARD_RARITY.EPIC, minion_type=MINION_TYPE.MECH, buffs=[Buff(ManaChange(Count(CardSelector(EnemyPlayer())), -1))])
def create_minion(self, player):
return Minion(8, 8)
Clockwork Gnome
1
Minion
Common
Mech
Neutral
<b>Deathrattle:</b> Add a <b>Spare Part</b> card to your hand.
1
2
-1
7
class ClockworkGnome(MinionCard):
def __init__(self):
super().__init__("Clockwork Gnome", 1, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, minion_type=MINION_TYPE.MECH)
def create_minion(self, player):
from hearthbreaker.cards.spells.neutral import spare_part_list
return Minion(2, 1, deathrattle=Deathrattle(AddCard(CardQuery(source=CARD_SOURCE.LIST, source_list=spare_part_list)), PlayerSelector()))
Cobalt Guardian
5
Minion
Rare
Mech
Paladin
Whenever you summon a Mech, gain <b>Divine Shield</b>.
3
6
-1
6
class CobaltGuardian(MinionCard):
def __init__(self):
super().__init__("Cobalt Guardian", 5, CHARACTER_CLASS.PALADIN, CARD_RARITY.RARE, minion_type=MINION_TYPE.MECH)
def create_minion(self, player):
return Minion(6, 3, effects=[Effect(MinionSummoned(IsType(MINION_TYPE.MECH)), ActionTag(Give(DivineShield()), SelfSelector()))])
Cobra Shot
5
Spell
Common
NIL
Hunter
Deal $3 damage to a minion and the enemy hero.
-1
-1
-1
8
class CobraShot(SpellCard):
def __init__(self):
super().__init__("Cobra Shot", 5, CHARACTER_CLASS.HUNTER, CARD_RARITY.COMMON, target_func=hearthbreaker.targeting.find_minion_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.damage(player.effective_spell_damage(3), self)
game.other_player.hero.damage(player.effective_spell_damage(3), self)
Coghammer
3
Weapon
Epic
NIL
Paladin
<b>Battlecry:</b> Give a random friendly minion <b>Divine Shield</b> and <b>Taunt</b>.
-1
2
3
6
class Coghammer(WeaponCard):
def __init__(self):
super().__init__("Coghammer", 3, CHARACTER_CLASS.PALADIN, CARD_RARITY.EPIC, battlecry=Battlecry(Give([Buff(DivineShield()), Buff(Taunt())]), MinionSelector(picker=RandomPicker())))
def create_weapon(self, player):
return Weapon(2, 3)
Cogmaster
1
Minion
Common
NIL
Neutral
Has +2 Attack while you have a Mech.
2
1
-1
6
class Cogmaster(MinionCard):
def __init__(self):
super().__init__("Cogmaster", 1, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(1, 2, auras=[Aura(ChangeAttack(2), SelfSelector(), GreaterThan(Count(MinionSelector(IsType(MINION_TYPE.MECH))), value=0))])
Cogmaster's Wrench
3
Weapon
Epic
NIL
Rogue
Has +2 Attack while you have a Mech.
-1
1
3
6
class CogmastersWrench(WeaponCard):
def __init__(self):
super().__init__("Cogmaster's Wrench", 3, CHARACTER_CLASS.ROGUE, CARD_RARITY.EPIC)
def create_weapon(self, player):
return Weapon(1, 3, buffs=[Buff(ChangeAttack(2), GreaterThan(Count(MinionSelector(IsType(MINION_TYPE.MECH))), value=0))])
Crackle
2
Spell
Common
NIL
Shaman
Deal $3-$6 damage. <b>Overload:</b> (1)
-1
-1
-1
8
class Crackle(SpellCard):
def __init__(self):
super().__init__("Crackle", 2, CHARACTER_CLASS.SHAMAN, CARD_RARITY.COMMON, target_func=hearthbreaker.targeting.find_spell_target, overload=1)
def use(self, player, game):
super().use(player, game)
self.target.damage(player.effective_spell_damage(game.random_amount(3, 6)), self)
Crush
7
Spell
Epic
NIL
Warrior
Destroy a minion. If you have a damaged minion, this costs (4) less.
-1
-1
-1
8
class Crush(SpellCard):
def __init__(self):
super().__init__("Crush", 7, CHARACTER_CLASS.WARRIOR, CARD_RARITY.EPIC, target_func=hearthbreaker.targeting.find_minion_spell_target, buffs=[Buff(ManaChange(-4), GreaterThan(Count(MinionSelector(IsDamaged())), value=0))])
def use(self, player, game):
super().use(player, game)
self.target.die(self)
Dark Wispers
6
Spell
Epic
NIL
Druid
<b>Choose One -</b> Summon 5 Wisps; or Give a minion +5/+5 and <b>Taunt</b>.
-1
-1
-1
42
class DarkWispers(SpellCard):
def __init__(self):
super().__init__("Dark Wispers", 6, CHARACTER_CLASS.DRUID, CARD_RARITY.EPIC)
def can_use(self, player, game):
return (super().can_use(player, game) and (len(player.minions) < 7 or hearthbreaker.targeting.find_minion_spell_target(game, lambda t: t.spell_targetable()) is not None))
def use(self, player, game):
super().use(player, game)
class Buff5(ChoiceCard):
def __init__(self):
super().__init__("Give a minion +5/+5 and Taunt", 0, CHARACTER_CLASS.DRUID, CARD_RARITY.COMMON, False)
def can_use(self, player, game):
return hearthbreaker.targeting.find_minion_spell_target(game, lambda t: t.spell_targetable()) is not None
def use(self, player, game):
targets = hearthbreaker.targeting.find_minion_spell_target(game, lambda t: t.spell_targetable())
target = player.agent.choose_target(targets)
target.change_attack(5)
target.increase_health(5)
target.taunt = True
class Wisps5(ChoiceCard):
def __init__(self):
super().__init__("Summon 5 Wisps", 0, CHARACTER_CLASS.DRUID, CARD_RARITY.COMMON, False)
def can_use(self, player, game):
return len(player.minions) < 7
def use(self, player, game):
from hearthbreaker.cards.minions.neutral import Wisp
for i in range(0, 5):
wisp = Wisp()
wisp.summon(player, game, len(player.minions))
if len(hearthbreaker.targeting.find_minion_spell_target(game, lambda t: t.spell_targetable())) == 0:
option = Wisps5()
else:
option = player.agent.choose_option([Wisps5(), Buff5()], player)
option.use(player, game)
Darkbomb
2
Spell
Common
NIL
Warlock
Deal $3 damage.
-1
-1
-1
7
class Darkbomb(SpellCard):
def __init__(self):
super().__init__("Darkbomb", 2, CHARACTER_CLASS.WARLOCK, CARD_RARITY.COMMON, target_func=hearthbreaker.targeting.find_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.damage(player.effective_spell_damage(3), self)
Demonheart
5
Spell
Epic
NIL
Warlock
Deal $5 damage to a minion. If it's a friendly Demon, give it +5/+5 instead.
-1
-1
-1
12
class Demonheart(SpellCard):
def __init__(self):
super().__init__("Demonheart", 5, CHARACTER_CLASS.WARLOCK, CARD_RARITY.EPIC, target_func=hearthbreaker.targeting.find_minion_spell_target)
def use(self, player, game):
super().use(player, game)
targets = copy.copy(player.game.current_player.minions)
if self.target.card.minion_type is MINION_TYPE.DEMON and self.target in targets:
self.target.change_attack(5)
self.target.increase_health(5)
else:
self.target.damage(player.effective_spell_damage(5), self)
Dr. Boom
7
Minion
Legendary
NIL
Neutral
<b>Battlecry</b>: Summon two 1/1 Boom Bots. <i>WARNING: Bots may explode.</i>
7
7
-1
6
class DoctorBoom(MinionCard):
def __init__(self):
super().__init__("Dr. Boom", 7, CHARACTER_CLASS.ALL, CARD_RARITY.LEGENDARY, battlecry=Battlecry(Summon(BoomBot(), 2), PlayerSelector()))
def create_minion(self, player):
return Minion(7, 7)
Druid of the Fang
5
Minion
NIL
Beast
Druid
NIL
7
7
-1
6
class DruidOfTheFang(MinionCard):
def __init__(self):
super().__init__("Druid of the Fang", 5, CHARACTER_CLASS.DRUID, CARD_RARITY.COMMON, battlecry=Battlecry(Transform(CobraForm()), SelfSelector(), GreaterThan(Count(MinionSelector(IsType(MINION_TYPE.BEAST))), value=0)))
def create_minion(self, player):
return Minion(4, 4)
Druid of the Fang
5
Minion
Common
NIL
Druid
<b>Battlecry:</b> If you have a Beast, transform this minion into a 7/7.
4
4
-1
6
class DruidOfTheFang(MinionCard):
def __init__(self):
super().__init__("Druid of the Fang", 5, CHARACTER_CLASS.DRUID, CARD_RARITY.COMMON, battlecry=Battlecry(Transform(CobraForm()), SelfSelector(), GreaterThan(Count(MinionSelector(IsType(MINION_TYPE.BEAST))), value=0)))
def create_minion(self, player):
return Minion(4, 4)
Dunemaul Shaman
4
Minion
Rare
NIL
Shaman
<b>Windfury, Overload: (1)</b> NL 50% chance to attack the wrong enemy.
4
5
-1
6
class DunemaulShaman(MinionCard):
def __init__(self):
super().__init__("Dunemaul Shaman", 4, CHARACTER_CLASS.SHAMAN, CARD_RARITY.RARE, overload=1)
def create_minion(self, player):
return Minion(5, 4, windfury=True, effects=[Effect(Attack(), ActionTag(ChangeTarget(CharacterSelector(NotCurrentTarget(), EnemyPlayer(), RandomPicker())), SelfSelector(), And(OneIn(2), OpponentMinionCountIsGreaterThan(0))))])
Echo of Medivh
4
Spell
Epic
NIL
Mage
Put a copy of each friendly minion into your hand.
-1
-1
-1
9
class EchoOfMedivh(SpellCard):
def __init__(self):
super().__init__("Echo of Medivh", 4, CHARACTER_CLASS.MAGE, CARD_RARITY.EPIC)
def use(self, player, game):
super().use(player, game)
for minion in sorted(copy.copy(player.minions), key=lambda minion: minion.born):
if len(player.hand) < 10:
player.hand.append(minion.card)
Emergency Coolant
1
Spell
NIL
NIL
Neutral
<b>Freeze</b> a minion.
-1
-1
-1
7
class EmergencyCoolant(SpellCard):
def __init__(self):
super().__init__("Emergency Coolant", 1, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, False, target_func=hearthbreaker.targeting.find_minion_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.add_buff(Buff(Frozen()))
Enhance-o Mechano
4
Minion
Epic
Mech
Neutral
<b>Battlecry:</b> Give your other minions <b>Windfury</b>, <b>Taunt</b>, or <b>Divine Shield</b>. NL <i>(at random)</i>
2
3
-1
6
class EnhanceoMechano(MinionCard):
def __init__(self):
super().__init__("Enhance-o Mechano", 4, CHARACTER_CLASS.ALL, CARD_RARITY.EPIC, minion_type=MINION_TYPE.MECH, battlecry=Battlecry(Give([ Buff(Windfury()), Buff(Taunt()), Buff(DivineShield())], RandomPicker()), MinionSelector()))
def create_minion(self, player):
return Minion(3, 2)
Explosive Sheep
2
Minion
Common
Mech
Neutral
<b>Deathrattle:</b> Deal 2 damage to all minions.
1
1
-1
6
class ExplosiveSheep(MinionCard):
def __init__(self):
super().__init__("Explosive Sheep", 2, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, minion_type=MINION_TYPE.MECH)
def create_minion(self, player):
return Minion(1, 1, deathrattle=Deathrattle(Damage(2), CharacterSelector(players=BothPlayer())), taunt=True)
Feign Death
2
Spell
Epic
NIL
Hunter
Trigger all <b>Deathrattles</b> on your minions.
-1
-1
-1
13
class FeignDeath(SpellCard):
def __init__(self):
super().__init__("Feign Death", 2, CHARACTER_CLASS.HUNTER, CARD_RARITY.EPIC)
def use(self, player, game):
super().use(player, game)
for minion in sorted(player.minions, key=lambda m: m.born):
for deathrattle in minion.deathrattle:
deathrattle.do(minion)
if player.double_deathrattle:
for deathrattle in minion.deathrattle:
deathrattle.do(minion)
Fel Cannon
4
Minion
Rare
Mech
Warlock
At the end of your turn, deal 2 damage to a non-Mech minion.
5
3
-1
6
class FelCannon(MinionCard):
def __init__(self):
super().__init__("Fel Cannon", 4, CHARACTER_CLASS.WARLOCK, CARD_RARITY.RARE, minion_type=MINION_TYPE.MECH)
def create_minion(self, player):
return Minion(3, 5, effects=[Effect(TurnEnded(), ActionTag(Damage(2), MinionSelector(Not(IsType(MINION_TYPE.MECH, True)), BothPlayer(), RandomPicker())))])
Fel Reaver
5
Minion
Epic
Mech
Neutral
Whenever your opponent plays a card, remove the top 3 cards of your deck.
8
8
-1
6
class FelReaver(MinionCard):
def __init__(self):
super().__init__("Fel Reaver", 5, CHARACTER_CLASS.ALL, CARD_RARITY.EPIC, minion_type=MINION_TYPE.MECH)
def create_minion(self, player):
return Minion(8, 8, effects=[Effect(CardPlayed(player=EnemyPlayer()), ActionTag(Discard(3, query=CardQuery(source=CARD_SOURCE.MY_DECK)), PlayerSelector()))])
Finicky Cloakfield
1
Spell
NIL
NIL
Neutral
Give a friendly minion <b>Stealth</b> until your next turn.
-1
-1
-1
7
class FinickyCloakfield(SpellCard):
def __init__(self):
super().__init__("Finicky Cloakfield", 1, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, False, target_func=hearthbreaker.targeting.find_friendly_minion_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.add_buff(BuffUntil(Stealth(), TurnStarted()))
Flame Leviathan
7
Minion
Legendary
Mech
Mage
When you draw this, deal 2 damage to all characters.
7
7
-1
6
class FlameLeviathan(MinionCard):
def __init__(self):
super().__init__("Flame Leviathan", 7, CHARACTER_CLASS.MAGE, CARD_RARITY.LEGENDARY, minion_type=MINION_TYPE.MECH, effects=[Effect(Drawn(), ActionTag(Damage(2), CharacterSelector(None, BothPlayer())))])
def create_minion(self, player):
return Minion(7, 7)
Flamecannon
2
Spell
Common
NIL
Mage
Deal $4 damage to a random enemy minion.
-1
-1
-1
13
class Flamecannon(SpellCard):
def __init__(self):
super().__init__("Flamecannon", 2, CHARACTER_CLASS.MAGE, CARD_RARITY.COMMON)
def use(self, player, game):
super().use(player, game)
targets = hearthbreaker.targeting.find_enemy_minion_battlecry_target(player.game, lambda x: True)
target = game.random_choice(targets)
target.damage(player.effective_spell_damage(4), self)
def can_use(self, player, game):
return super().can_use(player, game) and len(game.other_player.minions) >= 1
Floating Watcher
5
Minion
Common
Demon
Warlock
Whenever your hero takes damage on your turn, gain +2/+2.
4
4
-1
6
class FloatingWatcher(MinionCard):
def __init__(self):
super().__init__("Floating Watcher", 5, CHARACTER_CLASS.WARLOCK, CARD_RARITY.COMMON, minion_type=MINION_TYPE.DEMON)
def create_minion(self, player):
return Minion(4, 4, effects=[Effect(CharacterDamaged(And(IsHero(), OwnersTurn())), ActionTag(Give([Buff(ChangeAttack(2)), Buff(ChangeHealth(2))]), SelfSelector()))])
Flying Machine
3
Minion
Common
Mech
Neutral
<b>Windfury</b>
4
1
-1
6
class FlyingMachine(MinionCard):
def __init__(self):
super().__init__("Flying Machine", 3, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, minion_type=MINION_TYPE.MECH)
def create_minion(self, player):
return Minion(1, 4, windfury=True)
Foe Reaper 4000
8
Minion
Legendary
Mech
Neutral
Also damages the minions next to whomever he attacks.
9
6
-1
6
class FoeReaper4000(MinionCard):
def __init__(self):
super().__init__("Foe Reaper 4000", 8, CHARACTER_CLASS.ALL, CARD_RARITY.LEGENDARY, minion_type=MINION_TYPE.MECH)
def create_minion(self, player):
return Minion(6, 9, effects=[Effect(Attack(IsMinion()), ActionTag(Damage(Attribute("attack", SelfSelector())), MinionSelector(TargetAdjacent(), EnemyPlayer())))])
Force-Tank MAX
8
Minion
Common
Mech
Neutral
<b>Divine Shield</b>
7
7
-1
6
class ForceTankMAX(MinionCard):
def __init__(self):
super().__init__("Force-Tank MAX", 8, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, minion_type=MINION_TYPE.MECH)
def create_minion(self, player):
return Minion(7, 7, divine_shield=True)
Gahz'rilla
7
Minion
Legendary
Beast
Hunter
Whenever this minion takes damage, double its Attack.
9
6
-1
6
class Gahzrilla(MinionCard):
def __init__(self):
super().__init__("Gahz'rilla", 7, CHARACTER_CLASS.HUNTER, CARD_RARITY.LEGENDARY, minion_type=MINION_TYPE.BEAST)
def create_minion(self, player):
return Minion(6, 9, effects=[Effect(Damaged(), ActionTag(Give(Buff(DoubleAttack())), SelfSelector()))])
Gallywix's Coin
0
Spell
NIL
NIL
Neutral
Gain 1 Mana Crystal this turn only. NL <i>(Won't trigger Gallywix.)</i>
-1
-1
-1
8
class GallywixsCoin(SpellCard):
def __init__(self):
super().__init__("Gallywix's Coin", 0, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, False)
def use(self, player, game):
super().use(player, game)
if player.mana < 10:
player.mana += 1
Gazlowe
6
Minion
Legendary
NIL
Neutral
Whenever you cast a 1-mana spell, add a random Mech to your hand.
6
3
-1
6
class Gazlowe(MinionCard):
def __init__(self):
super().__init__("Gazlowe", 6, CHARACTER_CLASS.ALL, CARD_RARITY.LEGENDARY)
def create_minion(self, player):
return Minion(3, 6, effects=[Effect(SpellCast(ManaCost(1)), ActionTag(AddCard(CardQuery(conditions=[IsType(MINION_TYPE.MECH)])), PlayerSelector()))])
Gilblin Stalker
2
Minion
Common
NIL
Neutral
<b>Stealth</b>
3
2
-1
6
class GilblinStalker(MinionCard):
def __init__(self):
super().__init__("Gilblin Stalker", 2, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(2, 3, stealth=True)
Glaivezooka
2
Weapon
Common
NIL
Hunter
<b>Battlecry:</b> Give a random friendly minion +1 Attack.
-1
2
2
6
class Glaivezooka(WeaponCard):
def __init__(self):
super().__init__("Glaivezooka", 2, CHARACTER_CLASS.HUNTER, CARD_RARITY.COMMON, battlecry=Battlecry(Give(ChangeAttack(1)), MinionSelector(None, picker=RandomPicker())))
def create_weapon(self, player):
return Weapon(2, 2)
Gnomeregan Infantry
3
Minion
Common
NIL
Neutral
<b>Charge</b> NL <b>Taunt</b>
4
1
-1
6
class GnomereganInfantry(MinionCard):
def __init__(self):
super().__init__("Gnomeregan Infantry", 3, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(1, 4, charge=True, taunt=True)
Gnomish Experimenter
3
Minion
Rare
NIL
Neutral
<b>Battlecry:</b> Draw a card. If it's a minion, transform it into a Chicken.
2
3
-1
6
class GnomishExperimenter(MinionCard):
def __init__(self):
super().__init__("Gnomish Experimenter", 3, CHARACTER_CLASS.ALL, CARD_RARITY.RARE, battlecry=(Battlecry(Draw(), PlayerSelector()), Battlecry(Transform(GnomishChicken()), LastDrawnSelector(), Matches(LastDrawnSelector(), IsMinion()))))
def create_minion(self, player):
return Minion(3, 2)
Goblin Auto-Barber
2
Minion
Common
Mech
Rogue
<b>Battlecry</b>: Give your weapon +1 Attack.
2
3
-1
6
class GoblinAutoBarber(MinionCard):
def __init__(self):
super().__init__("Goblin Auto-Barber", 2, CHARACTER_CLASS.ROGUE, CARD_RARITY.COMMON, minion_type=MINION_TYPE.MECH, battlecry=Battlecry(IncreaseWeaponAttack(1), WeaponSelector()))
def create_minion(self, player):
return Minion(3, 2)
Goblin Blastmage
4
Minion
Rare
NIL
Mage
<b>Battlecry:</b> If you have a Mech, deal 4 damage randomly split among all enemies.
4
5
-1
6
class GoblinBlastmage(MinionCard):
def __init__(self):
super().__init__("Goblin Blastmage", 4, CHARACTER_CLASS.MAGE, CARD_RARITY.RARE, battlecry=Battlecry(Damage(1), CharacterSelector(None, EnemyPlayer(), RandomPicker(4)), GreaterThan(Count(MinionSelector(IsType(MINION_TYPE.MECH))), value=0)))
def create_minion(self, player):
return Minion(5, 4)
Goblin Sapper
3
Minion
Rare
NIL
Neutral
Has +4 Attack while your opponent has 6 or more cards in hand.
4
2
-1
6
class GoblinSapper(MinionCard):
def __init__(self):
super().__init__("Goblin Sapper", 3, CHARACTER_CLASS.ALL, CARD_RARITY.RARE)
def create_minion(self, player):
return Minion(2, 4, buffs=[Buff(ChangeAttack(4), GreaterThan(Count(CardSelector(EnemyPlayer())), value=5))])
Grove Tender
3
Minion
Rare
NIL
Druid
<b>Choose One -</b> Give each player a Mana Crystal; or Each player draws a card.
4
2
-1
9
class GroveTender(MinionCard):
def __init__(self):
super().__init__("Grove Tender", 3, CHARACTER_CLASS.DRUID, CARD_RARITY.RARE, choices=[
Choice(GiftOfMana(), GiveManaCrystal(), PlayerSelector(players=BothPlayer())),
Choice(GiftOfCards(), Draw(), PlayerSelector(players=BothPlayer()))
])
def create_minion(self, player):
return Minion(2, 4)
Hemet Nesingwary
5
Minion
Legendary
NIL
Neutral
<b>Battlecry:</b> Destroy a Beast.
3
6
-1
6
class HemetNesingwary(MinionCard):
def __init__(self):
super().__init__("Hemet Nesingwary", 5, CHARACTER_CLASS.ALL, CARD_RARITY.LEGENDARY, battlecry=Battlecry(Kill(), MinionSelector(IsType(MINION_TYPE.BEAST), players=BothPlayer(), picker=UserPicker())))
def create_minion(self, player):
return Minion(6, 3)
Hobgoblin
3
Minion
Epic
NIL
Neutral
Whenever you play a 1-Attack minion, give it +2/+2.
3
2
-1
6
class Hobgoblin(MinionCard):
def __init__(self):
super().__init__("Hobgoblin", 3, CHARACTER_CLASS.ALL, CARD_RARITY.EPIC)
def create_minion(self, player):
return Minion(2, 3, effects=[Effect(MinionPlaced(BaseAttackEqualTo(1)), ActionTag(Give([Buff(ChangeHealth(2)), Buff(ChangeAttack(2))]), TargetSelector()))])
Illuminator
3
Minion
Rare
NIL
Neutral
If you control a <b>Secret</b> at the end of your turn, restore 4 health to your hero.
4
2
-1
6
class Illuminator(MinionCard):
def __init__(self):
super().__init__("Illuminator", 3, CHARACTER_CLASS.ALL, CARD_RARITY.RARE)
def create_minion(self, player):
return Minion(2, 4, effects=[Effect(TurnEnded(HasSecret()), ActionTag(Heal(4), HeroSelector()))])
Imp
1
Minion
NIL
Demon
Warlock
NIL
1
1
-1
6
class Imp(MinionCard):
def __init__(self):
super().__init__("Imp", 1, CHARACTER_CLASS.ALL, CARD_RARITY.RARE, False, minion_type=MINION_TYPE.DEMON)
def create_minion(self, player):
return Minion(1, 1)
Imp-losion
4
Spell
Rare
NIL
Warlock
Deal $2-$4 damage to a minion. Summon a 1/1 Imp for each damage dealt.
-1
-1
-1
16
class Implosion(SpellCard):
def __init__(self):
super().__init__("Imp-losion", 4, CHARACTER_CLASS.WARLOCK, CARD_RARITY.RARE, target_func=hearthbreaker.targeting.find_spell_target)
def use(self, player, game):
super().use(player, game)
amount = player.effective_spell_damage(game.random_amount(2, 4))
had_shield = self.target.divine_shield
self.target.damage(amount, self)
if not had_shield:
for i in range(0, amount):
imp = Imp()
imp.summon(player, game, len(player.minions))
Iron Juggernaut
6
Minion
Legendary
Mech
Warrior
<b>Battlecry:</b> Shuffle a Mine into your opponent's deck. When drawn, it explodes for 10 damage.
5
6
-1
6
class IronJuggernaut(MinionCard):
def __init__(self):
super().__init__("Iron Juggernaut", 6, CHARACTER_CLASS.WARRIOR, CARD_RARITY.LEGENDARY, minion_type=MINION_TYPE.MECH, battlecry=Battlecry(AddCard(BurrowingMine(), add_to_deck=True), PlayerSelector(EnemyPlayer())))
def create_minion(self, player):
return Minion(6, 5)
Iron Sensei
3
Minion
Rare
Mech
Rogue
At the end of your turn, give another friendly Mech +2/+2.
2
2
-1
6
class IronSensei(MinionCard):
def __init__(self):
super().__init__("Iron Sensei", 3, CHARACTER_CLASS.ROGUE, CARD_RARITY.RARE, minion_type=MINION_TYPE.MECH)
def create_minion(self, player):
return Minion(2, 2, effects=[Effect(TurnEnded(), ActionTag(Give([Buff(ChangeAttack(2)), Buff(ChangeHealth(2))]), MinionSelector(IsType(MINION_TYPE.MECH), picker=RandomPicker())))])
Jeeves
4
Minion
Rare
Mech
Neutral
At the end of each player's turn, that player draws until they have 3 cards.
4
1
-1
6
class Jeeves(MinionCard):
def __init__(self):
super().__init__("Jeeves", 4, CHARACTER_CLASS.ALL, CARD_RARITY.RARE, minion_type=MINION_TYPE.MECH)
def create_minion(self, player):
return Minion(1, 4, effects=[Effect(TurnEnded(player=BothPlayer()), ActionTag(Draw(Difference(Count(CardSelector(players=CurrentPlayer())), value=3)), PlayerSelector(CurrentPlayer())))])
Junkbot
5
Minion
Epic
Mech
Neutral
Whenever a friendly Mech dies, gain +2/+2.
5
1
-1
6
class Junkbot(MinionCard):
def __init__(self):
super().__init__("Junkbot", 5, CHARACTER_CLASS.ALL, CARD_RARITY.EPIC, minion_type=MINION_TYPE.MECH)
def create_minion(self, player):
return Minion(1, 5, effects=[Effect(MinionDied(IsType(MINION_TYPE.MECH)), ActionTag(Give([Buff(ChangeAttack(2)), Buff(ChangeHealth(2))]), SelfSelector()))])
Kezan Mystic
4
Minion
Rare
NIL
Neutral
<b>Battlecry:</b> Take control of a random enemy <b>Secret</b>.
3
4
-1
6
class KezanMystic(MinionCard):
def __init__(self):
super().__init__("Kezan Mystic", 4, CHARACTER_CLASS.ALL, CARD_RARITY.RARE, battlecry=Battlecry(ApplySecret(CARD_SOURCE.ENEMY_SECRETS), PlayerSelector()))
def create_minion(self, player):
return Minion(4, 3)
King of Beasts
5
Minion
Rare
Beast
Hunter
<b>Taunt</b>. <b>Battlecry:</b> Gain +1 Attack for each other Beast you have.
6
2
-1
6
class KingOfBeasts(MinionCard):
def __init__(self):
super().__init__("King of Beasts", 5, CHARACTER_CLASS.HUNTER, CARD_RARITY.RARE, minion_type=MINION_TYPE.BEAST, battlecry=Battlecry(Give(Buff(ChangeAttack(Count(MinionSelector(IsType( MINION_TYPE.BEAST)))))), SelfSelector()))
def create_minion(self, player):
return Minion(2, 6, taunt=True)
Light of the Naaru
1
Spell
Rare
NIL
Priest
Restore #3 Health. If the target is still damaged, summon a Lightwarden.
-1
-1
-1
14
class LightOfTheNaaru(SpellCard):
def __init__(self):
super().__init__("Light of the Naaru", 1, CHARACTER_CLASS.PRIEST, CARD_RARITY.RARE, target_func=hearthbreaker.targeting.find_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.heal(player.effective_heal_power(3), self)
lightwarden = Lightwarden()
if self.target is None:
lightwarden.summon(player, game, len(player.minions))
elif self.target.health != self.target.calculate_max_health():
lightwarden.summon(player, game, len(player.minions))
Lightbomb
6
Spell
Epic
NIL
Priest
Deal damage to each minion equal to its Attack.
-1
-1
-1
12
class Lightbomb(SpellCard):
def __init__(self):
super().__init__("Lightbomb", 6, CHARACTER_CLASS.PRIEST, CARD_RARITY.EPIC)
def use(self, player, game):
super().use(player, game)
targets = copy.copy(game.other_player.minions)
targets.extend(player.minions)
for minion in targets:
minion.damage(player.effective_spell_damage(minion.calculate_attack()), self)
Lil' Exorcist
3
Minion
Rare
NIL
Neutral
<b>Taunt</b> NL <b>Battlecry:</b> Gain +1/+1 for each enemy <b>Deathrattle</b> minion.
3
2
-1
6
class LilExorcist(MinionCard):
def __init__(self):
super().__init__("Lil' Exorcist", 3, CHARACTER_CLASS.ALL, CARD_RARITY.RARE, battlecry=Battlecry(Give([Buff(ChangeAttack(Count(MinionSelector(MinionHasDeathrattle(), EnemyPlayer())))), Buff(ChangeHealth(Count(MinionSelector(MinionHasDeathrattle(), EnemyPlayer()))))]), SelfSelector()))
def create_minion(self, player):
return Minion(2, 3, taunt=True)
Lost Tallstrider
4
Minion
Common
Beast
Neutral
NIL
4
5
-1
6
class LostTallstrider(MinionCard):
def __init__(self):
super().__init__("Lost Tallstrider", 4, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, minion_type=MINION_TYPE.BEAST)
def create_minion(self, player):
return Minion(5, 4)
Madder Bomber
5
Minion
Rare
NIL
Neutral
<b>Battlecry:</b> Deal 6 damage randomly split between all other characters.
4
5
-1
6
class MadderBomber(MinionCard):
def __init__(self):
super().__init__("Madder Bomber", 5, CHARACTER_CLASS.ALL, CARD_RARITY.RARE, battlecry=Battlecry(Damage(1), CharacterSelector(players=BothPlayer(), picker=RandomPicker(6))))
def create_minion(self, player):
return Minion(5, 4)
Mal'Ganis
9
Minion
Legendary
Demon
Warlock
Your other Demons have +2/+2. NL Your hero is <b>Immune</b>.
7
9
-1
6
class MalGanis(MinionCard):
def __init__(self):
super().__init__("Mal'Ganis", 9, CHARACTER_CLASS.WARLOCK, CARD_RARITY.LEGENDARY, minion_type=MINION_TYPE.DEMON)
def create_minion(self, player):
return Minion(9, 7, auras=[Aura(ChangeHealth(2), MinionSelector(IsType(MINION_TYPE.DEMON))), Aura(ChangeAttack(2), MinionSelector(IsType(MINION_TYPE.DEMON))), Aura(Immune(), HeroSelector())])
Malorne
7
Minion
Legendary
Beast
Druid
<b>Deathrattle:</b> Shuffle this minion into your deck.
7
9
-1
6
class Malorne(MinionCard):
def __init__(self):
super().__init__("Malorne", 7, CHARACTER_CLASS.DRUID, CARD_RARITY.LEGENDARY, minion_type=MINION_TYPE.BEAST)
def create_minion(self, player):
return Minion(9, 7, deathrattle=[Deathrattle(AddCard(CardQuery(source=CARD_SOURCE.MINION, minion=SelfSelector()), add_to_deck=True), PlayerSelector()), Deathrattle(Remove(), SelfSelector())])
Mech-Bear-Cat
6
Minion
Rare
Mech
Druid
Whenever this minion takes damage, add a <b>Spare Part</b> card to your hand.
6
7
-1
6
class MechBearCat(MinionCard):
def __init__(self):
super().__init__("Mech-Bear-Cat", 6, CHARACTER_CLASS.DRUID, CARD_RARITY.RARE, minion_type=MINION_TYPE.MECH)
def create_minion(self, player):
return Minion(7, 6, effects=[Effect(Damaged(), ActionTag(AddCard(CardQuery(source=CARD_SOURCE.LIST, source_list=spare_part_list)), PlayerSelector()))])
Mechanical Yeti
4
Minion
Common
Mech
Neutral
<b>Deathrattle:</b> Give each player a <b>Spare Part.</b>
5
4
-1
7
class MechanicalYeti(MinionCard):
def __init__(self):
super().__init__("Mechanical Yeti", 4, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, minion_type=MINION_TYPE.MECH)
def create_minion(self, player):
from hearthbreaker.cards.spells.neutral import spare_part_list
return Minion(4, 5, deathrattle=Deathrattle(AddCard(CardQuery(source=CARD_SOURCE.LIST, source_list=spare_part_list)), PlayerSelector(BothPlayer())))
Mechwarper
2
Minion
Common
Mech
Neutral
Your Mechs cost (1) less.
3
2
-1
6
class Mechwarper(MinionCard):
def __init__(self):
super().__init__("Mechwarper", 2, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, minion_type=MINION_TYPE.MECH)
def create_minion(self, player):
return Minion(2, 3, auras=[Aura(ManaChange(-1), CardSelector(condition=IsType(MINION_TYPE.MECH)))])
Mekgineer Thermaplugg
9
Minion
Legendary
Mech
Neutral
Whenever an enemy minion dies, summon a Leper Gnome.
7
9
-1
6
class MekgineerThermaplugg(MinionCard):
def __init__(self):
super().__init__("Mekgineer Thermaplugg", 9, CHARACTER_CLASS.ALL, CARD_RARITY.LEGENDARY, minion_type=MINION_TYPE.MECH)
def create_minion(self, player):
return Minion(9, 7, effects=[Effect(MinionDied(player=EnemyPlayer()), ActionTag(Summon(LeperGnome()), PlayerSelector()))])
Metaltooth Leaper
3
Minion
Rare
Mech
Hunter
<b>Battlecry</b>: Give your other Mechs +2 Attack.
3
3
-1
6
class MetaltoothLeaper(MinionCard):
def __init__(self):
super().__init__("Metaltooth Leaper", 3, CHARACTER_CLASS.HUNTER, CARD_RARITY.RARE, minion_type=MINION_TYPE.MECH, battlecry=Battlecry(Give(Buff(ChangeAttack(2))), MinionSelector(IsType(MINION_TYPE.MECH))))
def create_minion(self, player):
return Minion(3, 3)
Micro Machine
2
Minion
Common
Mech
Neutral
At the start of each turn, gain +1 Attack.
2
1
-1
6
class MicroMachine(MinionCard):
def __init__(self):
super().__init__("Micro Machine", 2, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, minion_type=MINION_TYPE.MECH)
def create_minion(self, player):
return Minion(1, 2, effects=[Effect(TurnStarted(player=BothPlayer()), ActionTag(Give(ChangeAttack(1)), SelfSelector()))])
Mimiron's Head
5
Minion
Legendary
Mech
Neutral
At the start of your turn, if you have at least 3 Mechs, destroy them all and form V-07-TR-0N.
5
4
-1
6
class MimironsHead(MinionCard):
def __init__(self):
super().__init__("Mimiron's Head", 5, CHARACTER_CLASS.ALL, CARD_RARITY.LEGENDARY, minion_type=MINION_TYPE.MECH)
def create_minion(self, player):
return Minion(4, 5, effects=[Effect(TurnStarted(), [ActionTag(Kill(), MinionSelector(IsType(MINION_TYPE.MECH, True)), GreaterThan(Count(MinionSelector(IsType(MINION_TYPE.MECH, True))), value=2)), ActionTag(Summon(V07TR0N()), PlayerSelector())])])
Mini-Mage
4
Minion
Epic
NIL
Neutral
<b>Stealth</b> NL <b>Spell Damage +1</b>
1
4
-1
6
class MiniMage(MinionCard):
def __init__(self):
super().__init__("Mini-Mage", 4, CHARACTER_CLASS.ALL, CARD_RARITY.EPIC)
def create_minion(self, player):
return Minion(4, 1, stealth=True, spell_damage=1)
Mistress of Pain
2
Minion
Rare
Demon
Warlock
Whenever this minion deals damage, restore that much Health to your hero.
4
1
-1
6
class MistressOfPain(MinionCard):
def __init__(self):
super().__init__("Mistress of Pain", 2, CHARACTER_CLASS.WARLOCK, CARD_RARITY.RARE, minion_type=MINION_TYPE.DEMON)
def create_minion(self, player):
return Minion(1, 4, effects=[Effect(DidDamage(), ActionTag(Heal(EventValue()), HeroSelector()))])
Mogor the Ogre
6
Minion
Legendary
NIL
Neutral
All minions have a 50% chance to attack the wrong enemy.
6
7
-1
8
class MogorTheOgre(MinionCard):
def __init__(self):
super().__init__("Mogor the Ogre", 6, CHARACTER_CLASS.ALL, CARD_RARITY.LEGENDARY)
def create_minion(self, player):
return Minion(7, 6, effects=[Effect(CharacterAttack(None, BothPlayer()), ActionTag(ChangeTarget(
CharacterSelector(NotCurrentTarget(), EnemyPlayer(), RandomPicker())), TargetSelector(),
And(OneIn(2), OpponentMinionCountIsGreaterThan(0))))])
Muster for Battle
3
Spell
Rare
NIL
Paladin
Summon three 1/1 Silver Hand Recruits. Equip a 1/4 Weapon.
-1
-1
-1
14
class MusterForBattle(SpellCard):
def __init__(self):
super().__init__("Muster for Battle", 3, CHARACTER_CLASS.PALADIN, CARD_RARITY.RARE)
def use(self, player, game):
super().use(player, game)
for i in range(0, 3):
dude = SilverHandRecruit()
dude.summon(player, player.game, len(player.minions))
justice = LightsJustice()
hammer = justice.create_weapon(player)
hammer.card = justice
hammer.equip(player)
Neptulon
7
Minion
Legendary
NIL
Shaman
<b>Battlecry:</b> Add 4 random Murlocs to your hand. <b>Overload:</b> (3)
7
7
-1
10
class Neptulon(MinionCard):
def __init__(self):
from hearthbreaker.cards.minions.neutral import BluegillWarrior, ColdlightOracle, ColdlightSeer, \
GrimscaleOracle, MurlocRaider, MurlocTidecaller, MurlocTidehunter, MurlocWarleader, OldMurkEye, \
Puddlestomper
murloc_list = [BluegillWarrior(), ColdlightOracle(), ColdlightSeer(), GrimscaleOracle(), MurlocRaider(), MurlocTidecaller(), MurlocTidehunter(), MurlocWarleader(), OldMurkEye(), Puddlestomper(), SiltfinSpiritwalker()]
super().__init__("Neptulon", 7, CHARACTER_CLASS.SHAMAN, CARD_RARITY.LEGENDARY, overload=3, battlecry=Battlecry(AddCard(CardQuery(source=CARD_SOURCE.LIST, source_list=murloc_list), 4), PlayerSelector()))
def create_minion(self, player):
return Minion(7, 7)
Ogre Brute
3
Minion
Common
NIL
Neutral
50% chance to attack the wrong enemy.
4
4
-1
6
class OgreBrute(MinionCard):
def __init__(self):
super().__init__("Ogre Brute", 3, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(4, 4, effects=[Effect(Attack(), ActionTag(ChangeTarget(CharacterSelector(NotCurrentTarget(), EnemyPlayer(), RandomPicker())), SelfSelector(), And(OneIn(2), OpponentMinionCountIsGreaterThan(0))))])
Ogre Ninja
5
Minion
Rare
NIL
Rogue
<b>Stealth</b> NL 50% chance to attack the wrong enemy.
6
6
-1
6
class OgreNinja(MinionCard):
def __init__(self):
super().__init__("Ogre Ninja", 5, CHARACTER_CLASS.ROGUE, CARD_RARITY.RARE)
def create_minion(self, player):
return Minion(6, 6, stealth=True, effects=[Effect(Attack(), ActionTag(ChangeTarget( CharacterSelector(NotCurrentTarget(), EnemyPlayer(), RandomPicker())), SelfSelector(), And(OneIn(2), OpponentMinionCountIsGreaterThan(0))))])
Ogre Warmaul
3
Weapon
Common
NIL
Warrior
50% chance to attack the wrong enemy.
-1
4
2
6
class OgreWarmaul(WeaponCard):
def __init__(self):
super().__init__("Ogre Warmaul", 3, CHARACTER_CLASS.WARRIOR, CARD_RARITY.COMMON)
def create_weapon(self, player):
return Weapon(4, 2, effects=[Effect(CharacterAttack(IsHero()), ActionTag(ChangeTarget(CharacterSelector(NotCurrentTarget(), EnemyPlayer(), RandomPicker())), HeroSelector(), And(OneIn(2), OpponentMinionCountIsGreaterThan(0))))])
One-eyed Cheat
2
Minion
Rare
Pirate
Rogue
Whenever you summon a Pirate, gain <b>Stealth</b>.
1
4
-1
6
class OneeyedCheat(MinionCard):
def __init__(self):
super().__init__("One-eyed Cheat", 2, CHARACTER_CLASS.ROGUE, CARD_RARITY.RARE, minion_type=MINION_TYPE.PIRATE)
def create_minion(self, player):
return Minion(4, 1, effects=[Effect(MinionSummoned(IsType(MINION_TYPE.PIRATE)), ActionTag(Give(Stealth()), SelfSelector()))])
Piloted Shredder
4
Minion
Common
Mech
Neutral
<b>Deathrattle:</b> Summon a random 2-Cost minion.
3
4
-1
6
class PilotedShredder(MinionCard):
def __init__(self):
super().__init__("Piloted Shredder", 4, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, minion_type=MINION_TYPE.MECH)
def create_minion(self, player):
return Minion(4, 3, deathrattle=Deathrattle(Summon(CardQuery(conditions=[ManaCost(2), IsMinion()])), PlayerSelector()))
Piloted Sky Golem
6
Minion
Epic
Mech
Neutral
<b>Deathrattle:</b> Summon a random 4-Cost minion.
4
6
-1
6
class PilotedSkyGolem(MinionCard):
def __init__(self):
super().__init__("Piloted Sky Golem", 6, CHARACTER_CLASS.ALL, CARD_RARITY.EPIC, minion_type=MINION_TYPE.MECH)
def create_minion(self, player):
return Minion(6, 4, deathrattle=Deathrattle(Summon(CardQuery(conditions=[ManaCost(4), IsMinion()])), PlayerSelector()))
Powermace
3
Weapon
Rare
NIL
Shaman
<b>Deathrattle</b>: Give a random friendly Mech +2/+2.
-1
3
2
6
class Powermace(WeaponCard):
def __init__(self):
super().__init__("Powermace", 3, CHARACTER_CLASS.SHAMAN, CARD_RARITY.RARE)
def create_weapon(self, player):
return Weapon(3, 2, deathrattle=Deathrattle(Give([Buff(ChangeHealth(2)), Buff(ChangeAttack(2))]), MinionSelector(IsType(MINION_TYPE.MECH), picker=RandomPicker())))
Puddlestomper
2
Minion
Common
Murloc
Neutral
NIL
2
3
-1
6
class Puddlestomper(MinionCard):
def __init__(self):
super().__init__("Puddlestomper", 2, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, minion_type=MINION_TYPE.MURLOC)
def create_minion(self, player):
return Minion(3, 2)
Quartermaster
5
Minion
Epic
NIL
Paladin
<b>Battlecry:</b> Give your Silver Hand Recruits +2/+2.
5
2
-1
6
class Quartermaster(MinionCard):
def __init__(self):
super().__init__("Quartermaster", 5, CHARACTER_CLASS.PALADIN, CARD_RARITY.EPIC, battlecry=Battlecry(Give([Buff(ChangeAttack(2)), Buff(ChangeHealth(2))]), MinionSelector(HasCardName("Silver Hand Recruit"))))
def create_minion(self, player):
return Minion(2, 5)
Recombobulator
2
Minion
Epic
NIL
Neutral
<b>Battlecry:</b> Transform a friendly minion into a random minion with the same Cost.
2
3
-1
6
class Recombobulator(MinionCard):
def __init__(self):
super().__init__("Recombobulator", 2, CHARACTER_CLASS.ALL, CARD_RARITY.EPIC, battlecry=Battlecry(Transform(CardQuery(conditions=[ ManaCost(Attribute("mana", SelfSelector())), IsMinion()])), MinionSelector(picker=UserPicker())))
def create_minion(self, player):
return Minion(3, 2)
Recycle
6
Spell
Rare
NIL
Druid
Shuffle an enemy minion into your opponent's deck.
-1
-1
-1
8
class Recycle(SpellCard):
def __init__(self):
super().__init__("Recycle", 6, CHARACTER_CLASS.DRUID, CARD_RARITY.RARE, target_func=hearthbreaker.targeting.find_enemy_minion_spell_target)
def use(self, player, game):
super().use(player, game)
player.opponent.deck.put_back(self.target)
self.target.remove_from_board()
Reversing Switch
1
Spell
NIL
NIL
Neutral
Swap a minion's Attack and Health.
-1
-1
-1
13
class ReversingSwitch(SpellCard):
def __init__(self):
super().__init__("Reversing Switch", 1, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, False, target_func=hearthbreaker.targeting.find_minion_spell_target)
def use(self, player, game):
super().use(player, game)
temp_attack = self.target.calculate_attack()
temp_health = self.target.health
if temp_attack == 0:
self.target.die(None)
else:
self.target.set_attack_to(temp_health)
self.target.set_health_to(temp_attack)
Rusty Horn
1
Spell
NIL
NIL
Neutral
Give a minion <b>Taunt</b>.
-1
-1
-1
7
class RustyHorn(SpellCard):
def __init__(self):
super().__init__("Rusty Horn", 1, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, False, target_func=hearthbreaker.targeting.find_minion_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.add_buff(Buff(Taunt()))
Sabotage
4
Spell
Epic
NIL
Rogue
Destroy a random enemy minion. <b>Combo</b>: And your opponent's weapon.
-1
-1
-1
15
class Sabotage(SpellCard):
def __init__(self):
super().__init__("Sabotage", 4, CHARACTER_CLASS.ROGUE, CARD_RARITY.EPIC)
def use(self, player, game):
super().use(player, game)
targets = hearthbreaker.targeting.find_enemy_minion_battlecry_target(player.game, lambda x: True)
target = game.random_choice(targets)
target.die(None)
game.check_delayed()
if player.cards_played > 0 and game.other_player.weapon is not None:
game.other_player.weapon.destroy()
def can_use(self, player, game):
return super().can_use(player, game) and len(game.other_player.minions) >= 1
Salty Dog
5
Minion
Common
Pirate
Neutral
NIL
4
7
-1
6
class SaltyDog(MinionCard):
def __init__(self):
super().__init__("Salty Dog", 5, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, minion_type=MINION_TYPE.PIRATE)
def create_minion(self, player):
return Minion(7, 4)
Scarlet Purifier
3
Minion
Rare
NIL
Paladin
<b>Battlecry</b>: Deal 2 damage to all minions with <b>Deathrattle</b>.
3
4
-1
6
class ScarletPurifier(MinionCard):
def __init__(self):
super().__init__("Scarlet Purifier", 3, CHARACTER_CLASS.PALADIN, CARD_RARITY.RARE, battlecry=Battlecry(Damage(2), MinionSelector(MinionHasDeathrattle(), BothPlayer())))
def create_minion(self, player):
return Minion(4, 3)
Screwjank Clunker
4
Minion
Rare
Mech
Warrior
<b>Battlecry</b>: Give a friendly Mech +2/+2.
5
2
-1
6
class ScrewjankClunker(MinionCard):
def __init__(self):
super().__init__("Screwjank Clunker", 4, CHARACTER_CLASS.WARRIOR, CARD_RARITY.RARE, minion_type=MINION_TYPE.MECH, battlecry=Battlecry(Give([Buff(ChangeHealth(2)), Buff(ChangeAttack(2))]), MinionSelector(IsType(MINION_TYPE.MECH), picker=UserPicker())))
def create_minion(self, player):
return Minion(2, 5)
Seal of Light
2
Spell
Common
NIL
Paladin
Restore #4 Health to your hero and gain +2 Attack this turn.
-1
-1
-1
8
class SealOfLight(SpellCard):
def __init__(self):
super().__init__("Seal of Light", 2, CHARACTER_CLASS.PALADIN, CARD_RARITY.COMMON)
def use(self, player, game):
super().use(player, game)
player.hero.heal(player.effective_heal_power(4), self)
player.hero.change_temp_attack(2)
Shadowbomber
1
Minion
Epic
NIL
Priest
<b>Battlecry:</b> Deal 3 damage to each hero.
1
2
-1
6
class Shadowbomber(MinionCard):
def __init__(self):
super().__init__("Shadowbomber", 1, CHARACTER_CLASS.PRIEST, CARD_RARITY.EPIC, battlecry=Battlecry(Damage(3), HeroSelector(players=BothPlayer())))
def create_minion(self, player):
return Minion(2, 1)
Shadowboxer
2
Minion
Rare
Mech
Priest
Whenever a character is healed, deal 1 damage to a random enemy.
3
2
-1
6
class Shadowboxer(MinionCard):
def __init__(self):
super().__init__("Shadowboxer", 2, CHARACTER_CLASS.PRIEST, CARD_RARITY.RARE, minion_type=MINION_TYPE.MECH)
def create_minion(self, player):
return Minion(2, 3, effects=[Effect(CharacterHealed(player=BothPlayer()), ActionTag(Damage(1), CharacterSelector(players=EnemyPlayer(), picker=RandomPicker(), condition=None)))])
Shielded Minibot
2
Minion
Common
Mech
Paladin
<b>Divine Shield</b>
2
2
-1
6
class ShieldedMinibot(MinionCard):
def __init__(self):
super().__init__("Shielded Minibot", 2, CHARACTER_CLASS.PALADIN, CARD_RARITY.COMMON, minion_type=MINION_TYPE.MECH)
def create_minion(self, player):
return Minion(2, 2, divine_shield=True)
Shieldmaiden
6
Minion
Rare
NIL
Warrior
<b>Battlecry:</b> Gain 5 Armor.
5
5
-1
6
class Shieldmaiden(MinionCard):
def __init__(self):
super().__init__("Shieldmaiden", 6, CHARACTER_CLASS.WARRIOR, CARD_RARITY.RARE, battlecry=Battlecry(IncreaseArmor(5), HeroSelector()))
def create_minion(self, player):
return Minion(5, 5)
Ship's Cannon
2
Minion
Common
NIL
Neutral
Whenever you summon a Pirate, deal 2 damage to a random enemy.
3
2
-1
6
class ShipsCannon(MinionCard):
def __init__(self):
super().__init__("Ship's Cannon", 2, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(2, 3, effects=[Effect(MinionSummoned(IsType(MINION_TYPE.PIRATE)), ActionTag(Damage(2), CharacterSelector(None, EnemyPlayer(), RandomPicker())))])
Shrinkmeister
2
Minion
Common
NIL
Priest
<b>Battlecry:</b> Give a minion -2 Attack this turn.
2
3
-1
6
class Shrinkmeister(MinionCard):
def __init__(self):
super().__init__("Shrinkmeister", 2, CHARACTER_CLASS.PRIEST, CARD_RARITY.COMMON, battlecry=Battlecry(Give(BuffUntil(ChangeAttack(-2), TurnEnded(player=CurrentPlayer()))), MinionSelector(players=BothPlayer(), picker=UserPicker())))
def create_minion(self, player):
return Minion(3, 2)
Siege Engine
5
Minion
Rare
Mech
Warrior
Whenever you gain Armor, give this minion +1 Attack.
5
5
-1
6
class SiegeEngine(MinionCard):
def __init__(self):
super().__init__("Siege Engine", 5, CHARACTER_CLASS.WARRIOR, CARD_RARITY.RARE, minion_type=MINION_TYPE.MECH)
def create_minion(self, player):
return Minion(5, 5, effects=[Effect(ArmorIncreased(), ActionTag(Give(ChangeAttack(1)), SelfSelector()))])
Siltfin Spiritwalker
4
Minion
Epic
Murloc
Shaman
Whenever another friendly Murloc dies, draw a card. <b>Overload</b>: (1)
5
2
-1
6
class SiltfinSpiritwalker(MinionCard):
def __init__(self):
super().__init__("Siltfin Spiritwalker", 4, CHARACTER_CLASS.SHAMAN, CARD_RARITY.EPIC, minion_type=MINION_TYPE.MURLOC, overload=1)
def create_minion(self, player):
return Minion(2, 5, effects=[Effect(MinionDied(IsType(MINION_TYPE.MURLOC)), ActionTag(Draw(), PlayerSelector()))])
Sneed's Old Shredder
8
Minion
Legendary
Mech
Neutral
<b>Deathrattle:</b> Summon a random legendary minion.
7
5
-1
6
class SneedsOldShredder(MinionCard):
def __init__(self):
super().__init__("Sneed's Old Shredder", 8, CHARACTER_CLASS.ALL, CARD_RARITY.LEGENDARY, minion_type=MINION_TYPE.MECH)
def create_minion(self, player):
return Minion(5, 7, deathrattle=Deathrattle(Summon(CardQuery(conditions=[IsRarity(CARD_RARITY.LEGENDARY), IsMinion()])), PlayerSelector()))
Snowchugger
2
Minion
Common
Mech
Mage
<b>Freeze</b> any character damaged by this minion.
3
2
-1
6
class Snowchugger(MinionCard):
def __init__(self):
super().__init__("Snowchugger", 2, CHARACTER_CLASS.MAGE, CARD_RARITY.COMMON, minion_type=MINION_TYPE.MECH)
def create_minion(self, player):
return Minion(2, 3, effects=[Effect(DidDamage(), ActionTag(Give(Frozen()), TargetSelector()))])
Soot Spewer
3
Minion
Rare
Mech
Mage
<b>Spell Damage +1</b>
3
3
-1
6
class SootSpewer(MinionCard):
def __init__(self):
super().__init__("Soot Spewer", 3, CHARACTER_CLASS.MAGE, CARD_RARITY.RARE, minion_type=MINION_TYPE.MECH)
def create_minion(self, player):
return Minion(3, 3, spell_damage=1)
Spider Tank
3
Minion
Common
Mech
Neutral
NIL
4
3
-1
6
class SpiderTank(MinionCard):
def __init__(self):
super().__init__("Spider Tank", 3, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, minion_type=MINION_TYPE.MECH)
def create_minion(self, player):
return Minion(3, 4)
Steamwheedle Sniper
2
Minion
Epic
NIL
Hunter
Your Hero Power can target minions.
3
2
-1
6
class SteamwheedleSniper(MinionCard):
def __init__(self):
super().__init__("Steamwheedle Sniper", 2, CHARACTER_CLASS.HUNTER, CARD_RARITY.EPIC)
def create_minion(self, player):
return Minion(2, 3, auras=[Aura(PowerTargetsMinions(), HeroSelector())])
Stonesplinter Trogg
2
Minion
Common
NIL
Neutral
Whenever your opponent casts a spell, gain +1 Attack.
3
2
-1
6
class StonesplinterTrogg(MinionCard):
def __init__(self):
super().__init__("Stonesplinter Trogg", 2, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(2, 3, effects=[Effect(SpellCast(player=EnemyPlayer()), ActionTag(Give(ChangeAttack(1)), SelfSelector()))])
Target Dummy
0
Minion
Rare
Mech
Neutral
<b>Taunt</b>
2
0
-1
6
class TargetDummy(MinionCard):
def __init__(self):
super().__init__("Target Dummy", 0, CHARACTER_CLASS.ALL, CARD_RARITY.RARE, minion_type=MINION_TYPE.MECH)
def create_minion(self, player):
return Minion(0, 2, taunt=True)
Time Rewinder
1
Spell
NIL
NIL
Neutral
Return a friendly minion to your hand.
-1
-1
-1
7
class TimeRewinder(SpellCard):
def __init__(self):
super().__init__("Time Rewinder", 1, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, False, target_func=hearthbreaker.targeting.find_friendly_minion_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.bounce()
Tinker's Sharpsword Oil
4
Spell
Common
NIL
Rogue
Give your weapon +3 Attack. <b>Combo:</b> Give a random friendly minion +3 Attack.
-1
-1
-1
16
class TinkersSharpswordOil(SpellCard):
def __init__(self):
super().__init__("Tinker's Sharpsword Oil", 4, CHARACTER_CLASS.ROGUE, CARD_RARITY.COMMON)
def use(self, player, game):
super().use(player, game)
player.weapon.base_attack += 3
player.hero.change_temp_attack(3)
if player.cards_played > 0:
targets = hearthbreaker.targeting.find_friendly_minion_battlecry_target(player.game, lambda x: x)
if targets is not None:
target = player.game.random_choice(targets)
target.add_buff(Buff(ChangeAttack(3)))
def can_use(self, player, game):
return super().can_use(player, game) and player.weapon is not None
Tinkertown Technician
3
Minion
Common
NIL
Neutral
<b>Battlecry:</b> If you have a Mech, gain +1/+1 and add a <b>Spare Part</b> to your hand.
3
3
-1
7
class TinkertownTechnician(MinionCard):
def __init__(self):
from hearthbreaker.cards.spells.neutral import spare_part_list
super().__init__("Tinkertown Technician", 3, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, battlecry=(Battlecry(Give([Buff(ChangeAttack(1)), Buff(ChangeHealth(1))]), SelfSelector(), GreaterThan(Count(MinionSelector(IsType(MINION_TYPE.MECH))), value=0)), Battlecry(AddCard(CardQuery(source=CARD_SOURCE.LIST, source_list=spare_part_list)), PlayerSelector(), GreaterThan(Count(MinionSelector(IsType(MINION_TYPE.MECH))), value=0))))
def create_minion(self, player):
return Minion(3, 3)
Toshley
6
Minion
Legendary
NIL
Neutral
<b>Battlecry and Deathrattle:</b> Add a <b>Spare Part</b> card to your hand.
7
5
-1
8
class Toshley(MinionCard):
def __init__(self):
from hearthbreaker.cards.spells.neutral import spare_part_list
super().__init__("Toshley", 6, CHARACTER_CLASS.ALL, CARD_RARITY.LEGENDARY, battlecry=Battlecry(AddCard(CardQuery(source=CARD_SOURCE.LIST, source_list=spare_part_list)), PlayerSelector()))
def create_minion(self, player):
from hearthbreaker.cards.spells.neutral import spare_part_list
return Minion(5, 7, deathrattle=Deathrattle(AddCard(CardQuery(source=CARD_SOURCE.LIST, source_list=spare_part_list)), PlayerSelector()))
Trade Prince Gallywix
6
Minion
Legendary
NIL
Rogue
Whenever your opponent casts a spell, gain a copy of it and give them a Coin.
8
5
-1
6
class TradePrinceGallywix(MinionCard):
def __init__(self):
super().__init__("Trade Prince Gallywix", 6, CHARACTER_CLASS.ROGUE, CARD_RARITY.LEGENDARY)
def create_minion(self, player):
return Minion(5, 8, effects=[Effect(SpellCast(Not(HasCardName("Gallywix's Coin")), EnemyPlayer()), ActionTag(AddCard(CardQuery(source=CARD_SOURCE.LAST_CARD)), PlayerSelector(FriendlyPlayer()))), Effect(SpellCast(Not(HasCardName("Gallywix's Coin")), EnemyPlayer()), ActionTag(AddCard(GallywixsCoin()), PlayerSelector(EnemyPlayer())))])
Tree of Life
9
Spell
Epic
NIL
Druid
Restore all characters to full Health.
-1
-1
-1
13
class TreeOfLife(SpellCard):
def __init__(self):
super().__init__("Tree of Life", 9, CHARACTER_CLASS.DRUID, CARD_RARITY.EPIC)
def use(self, player, game):
super().use(player, game)
targets = copy.copy(game.other_player.minions)
targets.extend(game.current_player.minions)
targets.append(game.other_player.hero)
targets.append(game.current_player.hero)
for target in targets:
target.heal(player.effective_heal_power(target.calculate_max_health()), self)
Troggzor the Earthinator
7
Minion
Legendary
NIL
Neutral
Whenever your opponent casts a spell, summon a Burly Rockjaw Trogg.
6
6
-1
6
class TroggzorTheEarthinator(MinionCard):
def __init__(self):
super().__init__("Troggzor the Earthinator", 7, CHARACTER_CLASS.ALL, CARD_RARITY.LEGENDARY)
def create_minion(self, player):
return Minion(6, 6, effects=[Effect(SpellCast(player=EnemyPlayer()), ActionTag(Summon(BurlyRockjawTrogg()), PlayerSelector()))])
Unstable Portal
2
Spell
Rare
NIL
Mage
Add a random minion to your hand. It costs (3) less.
-1
-1
-1
10
class UnstablePortal(SpellCard):
def __init__(self):
super().__init__("Unstable Portal", 2, CHARACTER_CLASS.MAGE, CARD_RARITY.RARE)
def use(self, player, game):
super().use(player, game)
query = CardQuery(conditions=[IsMinion()])
new_minon = query.get_card(player, player, self)
new_minon.add_buff(Buff(ManaChange(-3)))
player.hand.append(new_minon)
Upgraded Repair Bot
5
Minion
Rare
Mech
Priest
<b>Battlecry:</b> Give a friendly Mech +4 Health.
5
5
-1
6
class UpgradedRepairBot(MinionCard):
def __init__(self):
super().__init__("Upgraded Repair Bot", 5, CHARACTER_CLASS.PRIEST, CARD_RARITY.RARE, minion_type=MINION_TYPE.MECH, battlecry=Battlecry(Give(ChangeHealth(4)), MinionSelector(IsType(MINION_TYPE.MECH), picker=UserPicker())))
def create_minion(self, player):
return Minion(5, 5)
V-07-TR-0N
8
Minion
Legendary
Mech
Neutral
<b>Charge</b> NL <b>Mega-Windfury</b> <i>(Can attack four times a turn.)</i>
8
4
-1
6
class V07TR0N(MinionCard):
def __init__(self):
super().__init__("V-07-TR-0N", 8, CHARACTER_CLASS.ALL, CARD_RARITY.LEGENDARY, False, MINION_TYPE.MECH)
def create_minion(self, player):
return Minion(4, 8, charge=True, buffs=[Buff(MegaWindfury())])
Velen's Chosen
3
Spell
Common
NIL
Priest
Give a minion +2/+4 and <b>Spell Damage +1</b>.
-1
-1
-1
10
class VelensChosen(SpellCard):
def __init__(self):
super().__init__("Velen's Chosen", 3, CHARACTER_CLASS.PRIEST, CARD_RARITY.COMMON, target_func=hearthbreaker.targeting.find_minion_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.change_attack(2)
self.target.increase_health(4)
self.target.add_buff(Buff(SpellDamage(1)))
Vitality Totem
2
Minion
Rare
Totem
Shaman
At the end of your turn, restore 4 Health to your hero.
3
0
-1
6
class VitalityTotem(MinionCard):
def __init__(self):
super().__init__("Vitality Totem", 2, CHARACTER_CLASS.SHAMAN, CARD_RARITY.RARE, minion_type=MINION_TYPE.TOTEM)
def create_minion(self, player):
return Minion(0, 3, effects=[Effect(TurnEnded(), ActionTag(Heal(4), HeroSelector()))])
Vol'jin
5
Minion
Legendary
NIL
Priest
<b>Battlecry:</b> Swap Health with another minion.
2
6
-1
6
class Voljin(MinionCard):
def __init__(self):
super().__init__("Vol'jin", 5, CHARACTER_CLASS.PRIEST, CARD_RARITY.LEGENDARY, battlecry=Battlecry(SwapStats("health", "health", True), MinionSelector(players=BothPlayer(), picker=UserPicker())))
def create_minion(self, player):
return Minion(6, 2)
Warbot
1
Minion
Common
Mech
Warrior
<b>Enrage:</b> +1 Attack.
3
1
-1
6
class Warbot(MinionCard):
def __init__(self):
super().__init__("Warbot", 1, CHARACTER_CLASS.WARRIOR, CARD_RARITY.COMMON, minion_type=MINION_TYPE.MECH)
def create_minion(self, player):
return Minion(1, 3, enrage=[Aura(ChangeAttack(1), SelfSelector())])
Wee Spellstopper
4
Minion
Epic
NIL
Mage
Adjacent minions can't be targeted by spells or Hero Powers.
5
2
-1
6
class WeeSpellstopper(MinionCard):
def __init__(self):
super().__init__("Wee Spellstopper", 4, CHARACTER_CLASS.MAGE, CARD_RARITY.EPIC)
def create_minion(self, player):
return Minion(2, 5, auras=[Aura(NoSpellTarget(), MinionSelector(Adjacent()))])
Whirling Blades
1
Spell
NIL
NIL
Neutral
Give a minion +1 Attack.
-1
-1
-1
7
class WhirlingBlades(SpellCard):
def __init__(self):
super().__init__("Whirling Blades", 1, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, False, target_func=hearthbreaker.targeting.find_minion_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.change_attack(1)
Whirling Zap-o-matic
2
Minion
Common
Mech
Shaman
<b>Windfury</b>
2
3
-1
6
class WhirlingZapomatic(MinionCard):
def __init__(self):
super().__init__("Whirling Zap-o-matic", 2, CHARACTER_CLASS.SHAMAN, CARD_RARITY.COMMON, minion_type=MINION_TYPE.MECH)
def create_minion(self, p):
return Minion(3, 2, windfury=True)
Anub'ar Ambusher
4
Minion
Common
NIL
Rogue
<b>Deathrattle:</b> Return a random friendly minion to your hand.
5
5
-1
6
class AnubarAmbusher(MinionCard):
def __init__(self):
super().__init__("Anub'ar Ambusher", 4, CHARACTER_CLASS.ROGUE, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(5, 5, deathrattle=Deathrattle(Bounce(), MinionSelector(picker=RandomPicker())))
Avenge
1
Spell
Common
NIL
Paladin
<b>Secret:</b> When one of your minions dies, give a random friendly minion +3/+2.
-1
-1
-1
16
class Avenge(SecretCard):
def __init__(self):
super().__init__("Avenge", 1, CHARACTER_CLASS.PALADIN, CARD_RARITY.COMMON)
def _reveal(self, dead_minion, attacker):
if len([minion for minion in self.player.minions if not minion.dead]) > 0:
target = self.player.game.random_choice(self.player.minions)
target.change_attack(3)
target.increase_health(2)
super().reveal()
def activate(self, player):
player.bind("minion_died", self._reveal)
def deactivate(self, player):
player.unbind("minion_died", self._reveal)
Baron Rivendare
4
Minion
Legendary
NIL
Neutral
Your minions trigger their <b>Deathrattles</b> twice.
7
1
-1
6
class BaronRivendare(MinionCard):
def __init__(self):
super().__init__("Baron Rivendare", 4, CHARACTER_CLASS.ALL, CARD_RARITY.LEGENDARY)
def create_minion(self, player):
return Minion(1, 7, auras=[Aura(DoubleDeathrattle(), PlayerSelector())])
Dancing Swords
3
Minion
Common
NIL
Neutral
<b>Deathrattle:</b> Your opponent draws a card.
4
4
-1
6
class DancingSwords(MinionCard):
def __init__(self):
super().__init__("Dancing Swords", 3, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(4, 4, deathrattle=Deathrattle(Draw(), PlayerSelector(EnemyPlayer())))
Dark Cultist
3
Minion
Common
NIL
Priest
<b>Deathrattle:</b> Give a random friendly minion +3 Health.
4
3
-1
6
class DarkCultist(MinionCard):
def __init__(self):
super().__init__("Dark Cultist", 3, CHARACTER_CLASS.PRIEST, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(3, 4, deathrattle=Deathrattle(Give(ChangeHealth(3)), MinionSelector(picker=RandomPicker())))
Death's Bite
4
Weapon
Common
NIL
Warrior
<b>Deathrattle:</b> Deal 1 damage to all minions.
-1
4
2
6
class DeathsBite(WeaponCard):
def __init__(self):
super().__init__("Death's Bite", 4, CHARACTER_CLASS.WARRIOR, CARD_RARITY.COMMON)
def create_weapon(self, player):
return Weapon(4, 2, deathrattle=Deathrattle(Damage(1), MinionSelector(players=BothPlayer())))
Deathlord
3
Minion
Rare
NIL
Neutral
<b>Taunt. Deathrattle:</b> Your opponent puts a minion from their deck into the battlefield.
8
2
-1
6
class Deathlord(MinionCard):
def __init__(self):
super().__init__("Deathlord", 3, CHARACTER_CLASS.ALL, CARD_RARITY.RARE)
def create_minion(self, player):
return Minion(2, 8, taunt=True, deathrattle=Deathrattle(Summon(CardQuery(conditions=[IsMinion()], source=CARD_SOURCE.MY_DECK)), PlayerSelector(EnemyPlayer())))
Duplicate
3
Spell
Common
NIL
Mage
<b>Secret:</b> When a friendly minion dies, put 2 copies of it into your hand.
-1
-1
-1
20
class Duplicate(SecretCard):
def __init__(self):
super().__init__("Duplicate", 3, CHARACTER_CLASS.MAGE, CARD_RARITY.COMMON)
self.player = None
def activate(self, player):
player.bind("minion_died", self._reveal)
self.player = player
def deactivate(self, player):
player.unbind("minion_died", self._reveal)
self.player = None
def _reveal(self, minion, by):
for c in range(0, 2):
if len(self.player.hand) < 10:
new_card = type(minion.card)()
self.player.hand.append(new_card)
new_card.attach(new_card, self.player)
super().reveal()
Echoing Ooze
2
Minion
Epic
NIL
Neutral
<b>Battlecry:</b> Summon an exact copy of this minion at the end of the turn.
2
1
-1
6
class EchoingOoze(MinionCard):
def __init__(self):
super().__init__("Echoing Ooze", 2, CHARACTER_CLASS.ALL, CARD_RARITY.EPIC, battlecry=Battlecry(GiveEffect(Effect(TurnEnded(), ActionTag(Duplicate(SelfSelector()), PlayerSelector()))), PlayerSelector()))
def create_minion(self, player):
return Minion(1, 2)
Feugen
5
Minion
Legendary
NIL
Neutral
NIL
7
4
-1
6
class Feugen(MinionCard):
def __init__(self):
super().__init__("Feugen", 5, CHARACTER_CLASS.ALL, CARD_RARITY.LEGENDARY)
def create_minion(self, player):
return Minion(4, 7, deathrattle=Deathrattle(Summon(Thaddius()), PlayerSelector(), InGraveyard(Stalagg())))
Feugen
5
Minion
Legendary
NIL
Neutral
<b>Deathrattle:</b> If Stalagg also died this game, summon Thaddius.
7
4
-1
6
class Feugen(MinionCard):
def __init__(self):
super().__init__("Feugen", 5, CHARACTER_CLASS.ALL, CARD_RARITY.LEGENDARY)
def create_minion(self, player):
return Minion(4, 7, deathrattle=Deathrattle(Summon(Thaddius()), PlayerSelector(), InGraveyard(Stalagg())))
Haunted Creeper
2
Minion
Common
Beast
Neutral
<b>Deathrattle:</b> Summon two 1/1 Spectral Spiders.
2
1
-1
6
class HauntedCreeper(MinionCard):
def __init__(self):
super().__init__("Haunted Creeper", 2, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, minion_type=MINION_TYPE.BEAST)
def create_minion(self, player):
return Minion(1, 2, deathrattle=Deathrattle(Summon(SpectralSpider(), 2), PlayerSelector()))
Kel'Thuzad
8
Minion
Legendary
NIL
Neutral
At the end of each turn, summon all friendly minions that died this turn.
8
6
-1
6
class KelThuzad(MinionCard):
def __init__(self):
super().__init__("Kel'Thuzad", 8, CHARACTER_CLASS.ALL, CARD_RARITY.LEGENDARY)
def create_minion(self, player):
return Minion(6, 8, effects=[Effect(TurnEnded(player=BothPlayer()), ActionTag(ResurrectFriendly(), PlayerSelector()))])
Loatheb
5
Minion
Legendary
NIL
Neutral
<b>Battlecry:</b> Enemy spells cost (5) more next turn.
5
5
-1
6
class Loatheb(MinionCard):
def __init__(self):
super().__init__("Loatheb", 5, CHARACTER_CLASS.ALL, CARD_RARITY.LEGENDARY, battlecry=Battlecry(GiveAura(AuraUntil(ManaChange(5), CardSelector(condition=IsSpell()), TurnEnded())), PlayerSelector(players=EnemyPlayer())))
def create_minion(self, player):
return Minion(5, 5)
Mad Scientist
2
Minion
Common
NIL
Neutral
<b>Deathrattle:</b> Put a <b>Secret</b> from your deck into the battlefield.
2
2
-1
6
class MadScientist(MinionCard):
def __init__(self):
super().__init__("Mad Scientist", 2, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(2, 2, deathrattle=Deathrattle(ApplySecret(CARD_SOURCE.MY_DECK), PlayerSelector()))
Maexxna
6
Minion
Legendary
Beast
Neutral
Destroy any minion damaged by this minion.
8
2
-1
6
class Maexxna(MinionCard):
def __init__(self):
super().__init__("Maexxna", 6, CHARACTER_CLASS.ALL, CARD_RARITY.LEGENDARY, minion_type=MINION_TYPE.BEAST)
def create_minion(self, player):
return Minion(2, 8, effects=[Effect(DidDamage(), ActionTag(Kill(), TargetSelector(IsMinion())))])
Nerub'ar Weblord
2
Minion
Common
NIL
Neutral
Minions with <b>Battlecry</b> cost (2) more.
4
1
-1
6
class NerubarWeblord(MinionCard):
def __init__(self):
super().__init__("Nerub'ar Weblord", 2, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(1, 4, auras=[Aura(ManaChange(2), CardSelector(BothPlayer(), HasBattlecry()))])
Nerubian
2
Minion
NIL
NIL
Neutral
NIL
4
4
-1
6
class Nerubian(MinionCard):
def __init__(self):
super().__init__("Nerubian", 3, CHARACTER_CLASS.ALL, CARD_RARITY.RARE, False)
def create_minion(self, p):
return Minion(4, 4)
Nerubian
2
Minion
NIL
NIL
Neutral
NIL
1
3
-1
6
class Nerubian(MinionCard):
def __init__(self):
super().__init__("Nerubian", 3, CHARACTER_CLASS.ALL, CARD_RARITY.RARE, False)
def create_minion(self, p):
return Minion(4, 4)
Nerubian
3
Minion
Rare
NIL
Neutral
NIL
4
4
-1
6
class Nerubian(MinionCard):
def __init__(self):
super().__init__("Nerubian", 3, CHARACTER_CLASS.ALL, CARD_RARITY.RARE, False)
def create_minion(self, p):
return Minion(4, 4)
Nerubian Egg
2
Minion
Rare
NIL
Neutral
<b>Deathrattle:</b> Summon a 4/4 Nerubian.
2
0
-1
6
class NerubianEgg(MinionCard):
def __init__(self):
super().__init__("Nerubian Egg", 2, CHARACTER_CLASS.ALL, CARD_RARITY.RARE)
def create_minion(self, player):
return Minion(0, 2, deathrattle=Deathrattle(Summon(Nerubian()), PlayerSelector()))
Poison Seeds
4
Spell
Common
NIL
Druid
Destroy all minions and summon 2/2 Treants to replace them.
-1
-1
-1
15
class PoisonSeeds(SpellCard):
def __init__(self):
super().__init__("Poison Seeds", 4, CHARACTER_CLASS.DRUID, CARD_RARITY.COMMON)
def use(self, player, game):
super().use(player, game)
from hearthbreaker.cards.minions.druid import PoisonSeedsTreant
targets = hearthbreaker.targeting.find_minion_spell_target(game, lambda m: True)
for target in targets:
target.die(None)
game.check_delayed()
for target in targets:
PoisonSeedsTreant().summon(target.player, target.game, len(target.player.minions))
Reincarnate
2
Spell
Common
NIL
Shaman
Destroy a minion, then return it to life with full Health.
-1
-1
-1
10
class Reincarnate(SpellCard):
def __init__(self):
super().__init__("Reincarnate", 2, CHARACTER_CLASS.SHAMAN, CARD_RARITY.COMMON, target_func=hearthbreaker.targeting.find_minion_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.die(self)
game.check_delayed()
self.target.card.summon(self.target.player, game, len(self.target.player.minions))
Shade of Naxxramas
3
Minion
Epic
NIL
Neutral
<b>Stealth.</b> At the start of your turn, gain +1/+1.
2
2
-1
6
class ShadeOfNaxxramas(MinionCard):
def __init__(self):
super().__init__("Shade of Naxxramas", 3, CHARACTER_CLASS.ALL, CARD_RARITY.EPIC)
def create_minion(self, player):
return Minion(2, 2, stealth=True, effects=[Effect(TurnStarted(), ActionTag(Give([Buff(ChangeAttack(1)), Buff(ChangeHealth(1))]), SelfSelector()))])
Slime
1
Minion
NIL
NIL
Neutral
<b>Taunt</b>
2
1
-1
6
class Slime(MinionCard):
def __init__(self):
super().__init__("Slime", 1, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, False)
def create_minion(self, p):
return Minion(1, 2, taunt=True)
Sludge Belcher
5
Minion
Rare
NIL
Neutral
<b>Taunt. NL Deathrattle:</b> Summon a 1/2 Slime with <b>Taunt</b>.
5
3
-1
6
class SludgeBelcher(MinionCard):
def __init__(self):
super().__init__("Sludge Belcher", 5, CHARACTER_CLASS.ALL, CARD_RARITY.RARE)
def create_minion(self, player):
return Minion(3, 5, taunt=True, deathrattle=Deathrattle(Summon(Slime()), PlayerSelector()))
Spectral Knight
5
Minion
Common
NIL
Neutral
Can't be targeted by spells or Hero Powers.
6
4
-1
6
class SpectralKnight(MinionCard):
def __init__(self):
super().__init__("Spectral Knight", 5, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(4, 6, spell_targetable=False)
Spectral Spider
1
Minion
NIL
NIL
Neutral
NIL
1
1
-1
6
class SpectralSpider(MinionCard):
def __init__(self):
super().__init__("Spectral Spider", 1, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, False)
def create_minion(self, player):
return Minion(1, 1)
Stalagg
5
Minion
Legendary
NIL
Neutral
NIL
4
7
-1
6
class Stalagg(MinionCard):
def __init__(self):
super().__init__("Stalagg", 5, CHARACTER_CLASS.ALL, CARD_RARITY.LEGENDARY)
def create_minion(self, player):
return Minion(7, 4, deathrattle=Deathrattle(Summon(Thaddius()), PlayerSelector(), InGraveyard(Feugen())))
Stalagg
5
Minion
Legendary
NIL
Neutral
<b>Deathrattle:</b> If Feugen also died this game, summon Thaddius.
4
7
-1
6
class Stalagg(MinionCard):
def __init__(self):
super().__init__("Stalagg", 5, CHARACTER_CLASS.ALL, CARD_RARITY.LEGENDARY)
def create_minion(self, player):
return Minion(7, 4, deathrattle=Deathrattle(Summon(Thaddius()), PlayerSelector(), InGraveyard(Feugen())))
Stoneskin Gargoyle
3
Minion
Common
NIL
Neutral
At the start of your turn, restore this minion to full Health.
4
1
-1
6
class StoneskinGargoyle(MinionCard):
def __init__(self):
super().__init__("Stoneskin Gargoyle", 3, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(1, 4, effects=[Effect(TurnStarted(), ActionTag(Heal(10000), SelfSelector()))])
Thaddius
10
Minion
Legendary
NIL
Neutral
NIL
11
11
-1
6
class Thaddius(MinionCard):
def __init__(self):
super().__init__("Thaddius", 10, CHARACTER_CLASS.ALL, CARD_RARITY.LEGENDARY, False)
def create_minion(self, player):
return Minion(11, 11)
Treant
1
Minion
NIL
NIL
Druid
NIL
2
2
-1
6
class Treant(MinionCard):
def __init__(self):
super().__init__("Treant", 1, CHARACTER_CLASS.DRUID, CARD_RARITY.COMMON)
def create_minion(self, _):
return Minion(2, 2)
Undertaker
1
Minion
Common
NIL
Neutral
Whenever you summon a minion with <b>Deathrattle</b>, gain +1 Attack.
2
1
-1
6
class Undertaker(MinionCard):
def __init__(self):
super().__init__("Undertaker", 1, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(1, 2, effects=[Effect(MinionSummoned(MinionHasDeathrattle()), ActionTag(Give(ChangeAttack(1)), SelfSelector()))])
Unstable Ghoul
2
Minion
Common
NIL
Neutral
<b>Taunt</b>. <b>Deathrattle:</b> Deal 1 damage to all minions.
3
1
-1
6
class UnstableGhoul(MinionCard):
def __init__(self):
super().__init__("Unstable Ghoul", 2, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(1, 3, deathrattle=Deathrattle(Damage(1), MinionSelector(players=BothPlayer())), taunt=True)
Voidcaller
4
Minion
Common
Demon
Warlock
<b>Deathrattle:</b> Put a random Demon from your hand into the battlefield.
4
3
-1
6
class Voidcaller(MinionCard):
def __init__(self):
super().__init__("Voidcaller", 4, CHARACTER_CLASS.WARLOCK, CARD_RARITY.COMMON, minion_type=MINION_TYPE.DEMON)
def create_minion(self, player):
return Minion(3, 4, deathrattle=Deathrattle(Summon(CardQuery(conditions=[IsType(MINION_TYPE.DEMON)], source=CARD_SOURCE.MY_HAND)), PlayerSelector()))
Wailing Soul
4
Minion
Rare
NIL
Neutral
<b>Battlecry: Silence</b> your other minions.
5
3
-1
6
class WailingSoul(MinionCard):
def __init__(self):
super().__init__("Wailing Soul", 4, CHARACTER_CLASS.ALL, CARD_RARITY.RARE, battlecry=Battlecry(Silence(), MinionSelector()))
def create_minion(self, player):
return Minion(3, 5)
Webspinner
1
Minion
Common
Beast
Hunter
<b>Deathrattle:</b> Add a random Beast card to your hand.
1
1
-1
6
class Webspinner(MinionCard):
def __init__(self):
super().__init__("Webspinner", 1, CHARACTER_CLASS.HUNTER, CARD_RARITY.COMMON, minion_type=MINION_TYPE.BEAST)
def create_minion(self, player):
return Minion(1, 1, deathrattle=Deathrattle(AddCard(CardQuery(conditions=[IsType(MINION_TYPE.BEAST)])), PlayerSelector()))
Zombie Chow
1
Minion
Common
NIL
Neutral
<b>Deathrattle:</b> Restore 5 Health to the enemy hero.
3
2
-1
6
class ZombieChow(MinionCard):
def __init__(self):
super().__init__("Zombie Chow", 1, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(2, 3, deathrattle=Deathrattle(Heal(5), HeroSelector(EnemyPlayer())))
Abomination
5
Minion
Rare
NIL
Neutral
<b>Taunt</b>. <b>Deathrattle:</b> Deal 2 damage to ALL characters.
4
4
-1
6
class Abomination(MinionCard):
def __init__(self):
super().__init__("Abomination", 5, CHARACTER_CLASS.ALL, CARD_RARITY.RARE)
def create_minion(self, player):
return Minion(4, 4, deathrattle=Deathrattle(Damage(2), CharacterSelector(players=BothPlayer())), taunt=True)
Abusive Sergeant
1
Minion
Common
NIL
Neutral
<b>Battlecry:</b> Give a minion +2 Attack this turn.
1
2
-1
6
class AbusiveSergeant(MinionCard):
def __init__(self):
super().__init__("Abusive Sergeant", 1, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, battlecry=Battlecry(Give(BuffUntil(ChangeAttack(2), TurnEnded(player=CurrentPlayer()))), MinionSelector(players=BothPlayer(), picker=UserPicker())))
def create_minion(self, player):
return Minion(2, 1)
Acolyte of Pain
3
Minion
Common
NIL
Neutral
Whenever this minion takes damage, draw a card.
3
1
-1
6
class AcolyteOfPain(MinionCard):
def __init__(self):
super().__init__("Acolyte of Pain", 3, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(1, 3, effects=[Effect(Damaged(), ActionTag(Draw(), PlayerSelector()))])
Al'Akir the Windlord
8
Minion
Legendary
NIL
Shaman
<b>Windfury, Charge, Divine Shield, Taunt</b>
5
3
-1
6
class AlAkirTheWindlord(MinionCard):
def __init__(self):
super().__init__("Al'Akir the Windlord", 8, CHARACTER_CLASS.SHAMAN, CARD_RARITY.LEGENDARY)
def create_minion(self, player):
return Minion(3, 5, windfury=True, charge=True, divine_shield=True, taunt=True)
Alarm-o-Bot
3
Minion
Rare
Mech
Neutral
At the start of your turn, swap this minion with a random one in your hand.
3
0
-1
6
class AlarmoBot(MinionCard):
def __init__(self):
super().__init__("Alarm-o-Bot", 3, CHARACTER_CLASS.ALL, CARD_RARITY.RARE, minion_type=MINION_TYPE.MECH)
def create_minion(self, player):
return Minion(0, 3, effects=[Effect(TurnStarted(), ActionTag(SwapWithHand(), PlayerSelector()))])
Aldor Peacekeeper
3
Minion
Rare
NIL
Paladin
<b>Battlecry:</b> Change an enemy minion's Attack to 1.
3
3
-1
6
class AldorPeacekeeper(MinionCard):
def __init__(self):
super().__init__("Aldor Peacekeeper", 3, CHARACTER_CLASS.PALADIN, CARD_RARITY.RARE, battlecry=Battlecry(Give(SetAttack(1)), MinionSelector(condition=None, players=EnemyPlayer())))
def create_minion(self, player):
return Minion(3, 3)
Alexstrasza
9
Minion
Legendary
Dragon
Neutral
<b>Battlecry:</b> Set a hero's remaining Health to 15.
8
8
-1
6
class Alexstrasza(MinionCard):
def __init__(self):
super().__init__("Alexstrasza", 9, CHARACTER_CLASS.ALL, CARD_RARITY.LEGENDARY, minion_type=MINION_TYPE.DRAGON, battlecry=Battlecry(SetHealth(15), HeroSelector(players=BothPlayer(), picker=UserPicker())))
def create_minion(self, player):
return Minion(8, 8)
Amani Berserker
2
Minion
Common
NIL
Neutral
<b>Enrage:</b> +3 Attack
3
2
-1
6
class AmaniBerserker(MinionCard):
def __init__(self):
super().__init__("Amani Berserker", 2, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(2, 3, enrage=[Aura(ChangeAttack(3), SelfSelector())])
Ancestral Spirit
2
Spell
Rare
NIL
Shaman
Give a minion "<b>Deathrattle:</b> Resummon this minion."
-1
-1
-1
7
class AncestralSpirit(SpellCard):
def __init__(self):
super().__init__("Ancestral Spirit", 2, CHARACTER_CLASS.SHAMAN, CARD_RARITY.RARE, target_func=hearthbreaker.targeting.find_minion_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.deathrattle.append(Deathrattle(Summon(self.target.card), PlayerSelector()))
Ancient Brewmaster
4
Minion
Common
NIL
Neutral
<b>Battlecry:</b> Return a friendly minion from the battlefield to your hand.
4
5
-1
6
class AncientBrewmaster(MinionCard):
def __init__(self):
super().__init__("Ancient Brewmaster", 4, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, battlecry=Battlecry(Bounce(), MinionSelector(picker=UserPicker())))
def create_minion(self, player):
return Minion(5, 4)
Ancient Mage
4
Minion
Rare
NIL
Neutral
<b>Battlecry:</b> Give adjacent minions <b>Spell Damage +1</b>.
5
2
-1
6
class AncientMage(MinionCard):
def __init__(self):
super().__init__("Ancient Mage", 4, CHARACTER_CLASS.ALL, CARD_RARITY.RARE, battlecry=Battlecry(Give(SpellDamage(1)), MinionSelector(condition=Adjacent())))
def create_minion(self, player):
return Minion(2, 5)
Ancient Watcher
2
Minion
Rare
NIL
Neutral
Can't attack.
5
4
-1
6
class AncientWatcher(MinionCard):
def __init__(self):
super().__init__("Ancient Watcher", 2, CHARACTER_CLASS.ALL, CARD_RARITY.RARE)
def create_minion(self, player):
return Minion(4, 5, buffs=[Buff(CantAttack())])
Ancient of Lore
7
Minion
Epic
NIL
Druid
<b>Choose One -</b> Draw 2 cards; or Restore 5 Health.
5
5
-1
10
class AncientOfLore(MinionCard):
def __init__(self):
super().__init__("Ancient of Lore", 7, CHARACTER_CLASS.DRUID, CARD_RARITY.EPIC, choices=[
Choice(AncientSecrets(), Heal(5), HeroSelector()),
Choice(AncientTeachings(), Draw(3), PlayerSelector())
])
def create_minion(self, player):
return Minion(5, 5)
Ancient of War
7
Minion
Epic
NIL
Druid
<b>Choose One</b> - NL +5 Attack; or +5 Health and <b>Taunt</b>.
5
5
-1
10
class AncientOfWar(MinionCard):
def __init__(self):
super().__init__("Ancient of War", 7, CHARACTER_CLASS.DRUID, CARD_RARITY.EPIC, choices=[
Choice(Health(), Give([Buff(ChangeHealth(5)), Buff(Taunt())]), SelfSelector()),
Choice(Attack(), Give([Buff(ChangeAttack(5))]), SelfSelector()),
])
def create_minion(self, player):
return Minion(5, 5)
Angry Chicken
1
Minion
Rare
Beast
Neutral
<b>Enrage:</b> +5 Attack.
1
1
-1
6
class AngryChicken(MinionCard):
def __init__(self):
super().__init__("Angry Chicken", 1, CHARACTER_CLASS.ALL, CARD_RARITY.RARE, minion_type=MINION_TYPE.BEAST)
def create_minion(self, player):
return Minion(1, 1, enrage=[Aura(ChangeAttack(5), SelfSelector())])
Arathi Weaponsmith
4
Minion
Common
NIL
Warrior
<b>Battlecry:</b> Equip a 2/2 weapon.
3
3
-1
6
class ArathiWeaponsmith(MinionCard):
def __init__(self):
super().__init__("Arathi Weaponsmith", 4, CHARACTER_CLASS.WARRIOR, CARD_RARITY.COMMON, battlecry=Battlecry(Equip(BattleAxe()), PlayerSelector()))
def create_minion(self, player):
return Minion(3, 3)
Arcane Golem
3
Minion
Rare
NIL
Neutral
<b>Charge</b>. <b>Battlecry:</b> Give your opponent a Mana Crystal.
2
4
-1
6
class ArcaneGolem(MinionCard):
def __init__(self):
super().__init__("Arcane Golem", 3, CHARACTER_CLASS.ALL, CARD_RARITY.RARE, battlecry=Battlecry(GiveManaCrystal(), PlayerSelector(players=EnemyPlayer())))
def create_minion(self, player):
return Minion(4, 2, charge=True)
Archmage Antonidas
7
Minion
Legendary
NIL
Mage
Whenever you cast a spell, add a 'Fireball' spell to your hand.
7
5
-1
6
class ArchmageAntonidas(MinionCard):
def __init__(self):
super().__init__("Archmage Antonidas", 7, CHARACTER_CLASS.MAGE, CARD_RARITY.LEGENDARY)
def create_minion(self, player):
return Minion(5, 7, effects=[Effect(SpellCast(), ActionTag(AddCard(hearthbreaker.cards.Fireball()), PlayerSelector()))])
Argent Commander
6
Minion
Rare
NIL
Neutral
<b>Charge</b> NL <b>Divine Shield</b>
2
4
-1
6
class ArgentCommander(MinionCard):
def __init__(self):
super().__init__("Argent Commander", 6, CHARACTER_CLASS.ALL, CARD_RARITY.RARE)
def create_minion(self, player):
return Minion(4, 2, divine_shield=True, charge=True)
Argent Protector
2
Minion
Common
NIL
Paladin
<b>Battlecry:</b> Give a friendly minion <b>Divine Shield</b>.
2
2
-1
6
class ArgentProtector(MinionCard):
def __init__(self):
super().__init__("Argent Protector", 2, CHARACTER_CLASS.PALADIN, CARD_RARITY.COMMON, battlecry=Battlecry(Give(DivineShield()), MinionSelector()))
def create_minion(self, player):
return Minion(2, 2)
Argent Squire
1
Minion
Common
NIL
Neutral
<b>Divine Shield</b>
1
1
-1
6
class ArgentSquire(MinionCard):
def __init__(self):
super().__init__("Argent Squire", 1, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(1, 1, divine_shield=True)
Armorsmith
2
Minion
Rare
NIL
Warrior
Whenever a friendly minion takes damage, gain 1 Armor.
4
1
-1
6
class Armorsmith(MinionCard):
def __init__(self):
super().__init__("Armorsmith", 2, CHARACTER_CLASS.WARRIOR, CARD_RARITY.RARE)
def create_minion(self, player):
return Minion(1, 4, effects=[Effect(CharacterDamaged(condition=IsMinion()), ActionTag(IncreaseArmor(), HeroSelector()))])
Ashbringer
5
Weapon
Legendary
NIL
Paladin
NIL
-1
5
3
7
class Ashbringer(WeaponCard):
def __init__(self):
super().__init__("Ashbringer", 5, CHARACTER_CLASS.PALADIN, CARD_RARITY.LEGENDARY, False)
def create_weapon(self, player):
weapon = Weapon(5, 3)
return weapon
Auchenai Soulpriest
4
Minion
Rare
NIL
Priest
Your cards and powers that restore Health now deal damage instead.
5
3
-1
6
class AuchenaiSoulpriest(MinionCard):
def __init__(self):
super().__init__("Auchenai Soulpriest", 4, CHARACTER_CLASS.PRIEST, CARD_RARITY.RARE)
def create_minion(self, player):
return Minion(3, 5, auras=[Aura(HealAsDamage(), PlayerSelector())])
Avenging Wrath
6
Spell
Epic
NIL
Paladin
Deal $8 damage randomly split among all enemies.
-1
-1
-1
11
class AvengingWrath(SpellCard):
def __init__(self):
super().__init__("Avenging Wrath", 6, CHARACTER_CLASS.PALADIN, CARD_RARITY.EPIC)
def use(self, player, game):
super().use(player, game)
for i in range(0, player.effective_spell_damage(8)):
targets = copy.copy(game.other_player.minions)
targets.append(game.other_player.hero)
target = game.random_choice(targets)
target.damage(1, self)
Azure Drake
5
Minion
Rare
Dragon
Neutral
<b>Spell Damage +1</b>. <b>Battlecry:</b> Draw a card.
4
4
-1
6
class AzureDrake(MinionCard):
def __init__(self):
super().__init__("Azure Drake", 5, CHARACTER_CLASS.ALL, CARD_RARITY.RARE, minion_type=MINION_TYPE.DRAGON, battlecry=Battlecry(Draw(), PlayerSelector()))
def create_minion(self, player):
return Minion(4, 4, spell_damage=1)
Baine Bloodhoof
4
Minion
Legendary
NIL
Neutral
NIL
5
4
-1
6
class BaineBloodhoof(MinionCard):
def __init__(self):
super().__init__("Baine Bloodhoof", 4, CHARACTER_CLASS.ALL, CARD_RARITY.LEGENDARY, False)
def create_minion(self, player):
return Minion(4, 5)
Bananas
1
Spell
NIL
NIL
Neutral
Give a minion +1/+1.
-1
-1
-1
8
class Bananas(SpellCard):
def __init__(self):
super().__init__("Bananas", 1, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, False, hearthbreaker.targeting.find_minion_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.change_attack(1)
self.target.increase_health(1)
Bane of Doom
5
Spell
Epic
NIL
Warlock
Deal $2 damage to a character. If that kills it, summon a random Demon.
-1
-1
-1
12
class BaneOfDoom(SpellCard):
def __init__(self):
super().__init__("Bane of Doom", 5, CHARACTER_CLASS.WARLOCK, CARD_RARITY.EPIC, target_func=hearthbreaker.targeting.find_spell_target)
def use(self, player, game):
super().use(player, game)
if self.target.health <= player.effective_spell_damage(2) and \ (isinstance(self.target, Minion) and not self.target.divine_shield):
self.target.damage(player.effective_spell_damage(2), self)
demons = CardQuery(conditions=[IsType(MINION_TYPE.DEMON)])
demons.get_card(player, player, self).summon(player, game, len(player.minions))
else:
self.target.damage(player.effective_spell_damage(2), self)
Baron Geddon
7
Minion
Legendary
NIL
Neutral
At the end of your turn, deal 2 damage to ALL other characters.
5
7
-1
6
class BaronGeddon(MinionCard):
def __init__(self):
super().__init__("Baron Geddon", 7, CHARACTER_CLASS.ALL, CARD_RARITY.LEGENDARY)
def create_minion(self, player):
return Minion(7, 5, effects=[Effect(TurnEnded(), ActionTag(Damage(2), CharacterSelector(players=BothPlayer())))])
Battle Axe
1
Weapon
NIL
NIL
Warrior
NIL
-1
2
2
6
class BattleAxe(WeaponCard):
def __init__(self):
super().__init__("Battle Axe", 1, CHARACTER_CLASS.WARRIOR, CARD_RARITY.COMMON, False)
def create_weapon(self, player):
return Weapon(2, 2)
Battle Rage
2
Spell
Common
NIL
Warrior
Draw a card for each damaged friendly character.
-1
-1
-1
17
class BattleRage(SpellCard):
def __init__(self):
super().__init__("Battle Rage", 2, CHARACTER_CLASS.WARRIOR, CARD_RARITY.COMMON)
def use(self, player, game):
def damaged_character(character):
return character.health < character.calculate_max_health()
super().use(player, game)
characters = copy.copy(player.minions)
characters.append(player.hero)
characters = [character for character in characters if damaged_character(character)]
for i in range(0, len(characters)):
player.draw()
Bestial Wrath
1
Spell
Epic
NIL
Hunter
Give a friendly Beast +2 Attack and <b>Immune</b> this turn.
-1
-1
-1
8
class BestialWrath(SpellCard):
def __init__(self):
super().__init__("Bestial Wrath", 1, CHARACTER_CLASS.HUNTER, CARD_RARITY.EPIC, target_func=hearthbreaker.targeting.find_friendly_minion_spell_target, filter_func=lambda minion: minion.card.minion_type is MINION_TYPE.BEAST and minion.spell_targetable())
def use(self, player, game):
super().use(player, game)
self.target.add_buff(BuffUntil(Immune(), TurnEnded(player=CurrentPlayer())))
self.target.change_temp_attack(2)
Betrayal
2
Spell
Common
NIL
Rogue
Force an enemy minion to deal its damage to the minions next to it.
-1
-1
-1
23
class Betrayal(SpellCard):
def __init__(self):
super().__init__("Betrayal", 2, CHARACTER_CLASS.ROGUE, CARD_RARITY.COMMON, target_func=hearthbreaker.targeting.find_enemy_minion_spell_target)
def use(self, player, game):
super().use(player, game)
left_minion = None
right_minion = None
index = self.target.index
if index > 0:
left_minion = game.other_player.minions[index - 1]
if index < min(len(game.other_player.minions) - 1, 6):
right_minion = game.other_player.minions[index + 1]
original_immune = self.target.immune
self.target.immune = True
if left_minion is not None:
left_minion.damage(self.target.calculate_attack(), self.target)
if right_minion is not None:
right_minion.damage(self.target.calculate_attack(), self.target)
self.target.immune = original_immune
Big Game Hunter
3
Minion
Epic
NIL
Neutral
<b>Battlecry:</b> Destroy a minion with an Attack of 7 or more.
2
4
-1
6
class BigGameHunter(MinionCard):
def __init__(self):
super().__init__("Big Game Hunter", 3, CHARACTER_CLASS.ALL, CARD_RARITY.EPIC, battlecry=Battlecry(Kill(), MinionSelector(AttackGreaterThan(6), BothPlayer())))
def create_minion(self, player):
return Minion(4, 2)
Bite
4
Spell
Rare
NIL
Druid
Give your hero +4 Attack this turn and 4 Armor.
-1
-1
-1
8
class Bite(SpellCard):
def __init__(self):
super().__init__("Bite", 4, CHARACTER_CLASS.DRUID, CARD_RARITY.RARE)
def use(self, player, game):
super().use(player, game)
player.hero.change_temp_attack(4)
player.hero.increase_armor(4)
Blade Flurry
2
Spell
Rare
NIL
Rogue
Destroy your weapon and deal its damage to all enemies.
-1
-1
-1
15
class BladeFlurry(SpellCard):
def __init__(self):
super().__init__("Blade Flurry", 2, CHARACTER_CLASS.ROGUE, CARD_RARITY.RARE)
def use(self, player, game):
super().use(player, game)
if player.weapon is not None:
attack_power = player.effective_spell_damage(player.hero.calculate_attack())
player.weapon.destroy()
for minion in copy.copy(game.other_player.minions):
minion.damage(attack_power, self)
game.other_player.hero.damage(attack_power, self)
Blessed Champion
5
Spell
Rare
NIL
Paladin
Double a minion's Attack.
-1
-1
-1
7
class BlessedChampion(SpellCard):
def __init__(self):
super().__init__("Blessed Champion", 5, CHARACTER_CLASS.PALADIN, CARD_RARITY.RARE, target_func=hearthbreaker.targeting.find_minion_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.add_buff(Buff(DoubleAttack()))
Blessing of Wisdom
1
Spell
Common
NIL
Paladin
Choose a minion. Whenever it attacks, draw a card.
-1
-1
-1
11
class BlessingOfWisdom(SpellCard):
def __init__(self):
super().__init__("Blessing of Wisdom", 1, CHARACTER_CLASS.PALADIN, CARD_RARITY.COMMON, target_func=hearthbreaker.targeting.find_minion_spell_target)
def use(self, player, game):
super().use(player, game)
if player is game.players[0]:
draw_player = PlayerOne()
else:
draw_player = PlayerTwo()
self.target.add_effect(Effect(Attack(), ActionTag(Draw(), PlayerSelector(draw_player))))
Blizzard
6
Spell
Rare
NIL
Mage
Deal $2 damage to all enemy minions and <b>Freeze</b> them.
-1
-1
-1
10
class Blizzard(SpellCard):
def __init__(self):
super().__init__("Blizzard", 6, CHARACTER_CLASS.MAGE, CARD_RARITY.RARE)
def use(self, player, game):
super().use(player, game)
for minion in copy.copy(game.other_player.minions):
minion.damage(player.effective_spell_damage(2), self)
for minion in game.other_player.minions:
minion.add_buff(Buff(Frozen()))
Blood Fury
3
Weapon
NIL
NIL
Warlock
NIL
-1
3
8
6
class BloodFury(WeaponCard):
def __init__(self):
super().__init__("Blood Fury", 3, CHARACTER_CLASS.WARLOCK, CARD_RARITY.RARE, False)
def create_weapon(self, player):
return Weapon(3, 8)
Blood Imp
1
Minion
Common
Demon
Warlock
<b>Stealth</b>. At the end of your turn, give another random friendly minion +1 Health.
1
0
-1
6
class BloodImp(MinionCard):
def __init__(self):
super().__init__("Blood Imp", 1, CHARACTER_CLASS.WARLOCK, CARD_RARITY.COMMON, minion_type=MINION_TYPE.DEMON)
def create_minion(self, player):
return Minion(0, 1, stealth=True, effects=[Effect(TurnEnded(), ActionTag(Give(ChangeHealth(1)), MinionSelector(picker=RandomPicker())))])
Blood Knight
3
Minion
Epic
NIL
Neutral
<b>Battlecry:</b> All minions lose <b>Divine Shield</b>. Gain +3/+3 for each Shield lost.
3
3
-1
6
class BloodKnight(MinionCard):
def __init__(self):
super().__init__("Blood Knight", 3, CHARACTER_CLASS.ALL, CARD_RARITY.EPIC, battlecry=(Battlecry([Give([Buff(ChangeAttack(Count(MinionSelector(HasDivineShield(), BothPlayer())), 3)), Buff(ChangeHealth(Count(MinionSelector(HasDivineShield(), BothPlayer())), 3))])], SelfSelector()), Battlecry(RemoveDivineShields(), (MinionSelector(HasDivineShield(), BothPlayer())))))
def create_minion(self, player):
return Minion(3, 3)
Bloodmage Thalnos
2
Minion
Legendary
NIL
Neutral
<b>Spell Damage +1</b>. <b>Deathrattle:</b> Draw a card.
1
1
-1
6
class BloodmageThalnos(MinionCard):
def __init__(self):
super().__init__("Bloodmage Thalnos", 2, CHARACTER_CLASS.ALL, CARD_RARITY.LEGENDARY)
def create_minion(self, player):
return Minion(1, 1, spell_damage=1, deathrattle=Deathrattle(Draw(), PlayerSelector()))
Bloodsail Corsair
1
Minion
Rare
Pirate
Neutral
<b>Battlecry:</b> Remove 1 Durability from your opponent's weapon.
2
1
-1
6
class BloodsailCorsair(MinionCard):
def __init__(self):
super().__init__("Bloodsail Corsair", 1, CHARACTER_CLASS.ALL, CARD_RARITY.RARE, minion_type=MINION_TYPE.PIRATE, battlecry=Battlecry(DecreaseDurability(), WeaponSelector(EnemyPlayer())))
def create_minion(self, player):
return Minion(1, 2)
Bloodsail Raider
2
Minion
Common
Pirate
Neutral
<b>Battlecry:</b> Gain Attack equal to the Attack of your weapon.
3
2
-1
6
class BloodsailRaider(MinionCard):
def __init__(self):
super().__init__("Bloodsail Raider", 2, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, minion_type=MINION_TYPE.PIRATE, battlecry=Battlecry(Give(Buff(ChangeAttack(Attribute("base_attack", WeaponSelector())))), SelfSelector()))
def create_minion(self, player):
return Minion(2, 3)
Brawl
5
Spell
Epic
NIL
Warrior
Destroy all minions except one. <i>(chosen randomly)</i>
-1
-1
-1
18
class Brawl(SpellCard):
def __init__(self):
super().__init__("Brawl", 5, CHARACTER_CLASS.WARRIOR, CARD_RARITY.EPIC)
def can_use(self, player, game):
return super().can_use(player, game) and len(player.minions) + len(player.opponent.minions) >= 2
def use(self, player, game):
super().use(player, game)
minions = copy.copy(player.minions)
minions.extend(game.other_player.minions)
if len(minions) > 1:
survivor = game.random_choice(minions)
for minion in minions:
if minion is not survivor:
minion.die(self)
Cabal Shadow Priest
6
Minion
Epic
NIL
Priest
<b>Battlecry:</b> Take control of an enemy minion that has 2 or less Attack.
5
4
-1
6
class CabalShadowPriest(MinionCard):
def __init__(self):
super().__init__("Cabal Shadow Priest", 6, CHARACTER_CLASS.PRIEST, CARD_RARITY.EPIC, battlecry=Battlecry(Steal(), MinionSelector(AttackLessThanOrEqualTo(2), players=EnemyPlayer(), picker=UserPicker())))
def create_minion(self, player):
return Minion(4, 5)
Cairne Bloodhoof
6
Minion
Legendary
NIL
Neutral
<b>Deathrattle:</b> Summon a 4/5 Baine Bloodhoof.
5
4
-1
6
class CairneBloodhoof(MinionCard):
def __init__(self):
super().__init__("Cairne Bloodhoof", 6, CHARACTER_CLASS.ALL, CARD_RARITY.LEGENDARY)
def create_minion(self, player):
return Minion(4, 5, deathrattle=Deathrattle(Summon(BaineBloodhoof()), PlayerSelector()))
Captain Greenskin
5
Minion
Legendary
Pirate
Neutral
<b>Battlecry:</b> Give your weapon +1/+1.
4
5
-1
6
class CaptainGreenskin(MinionCard):
def __init__(self):
super().__init__("Captain Greenskin", 5, CHARACTER_CLASS.ALL, CARD_RARITY.LEGENDARY, minion_type=MINION_TYPE.PIRATE, battlecry=Battlecry([IncreaseWeaponAttack(1), IncreaseDurability()], WeaponSelector()))
def create_minion(self, player):
return Minion(5, 4)
Cenarius
9
Minion
Legendary
NIL
Druid
<b>Choose One</b> - Give your other minions +2/+2; or Summon two 2/2 Treants with <b>Taunt</b>.
8
5
-1
9
class Cenarius(MinionCard):
def __init__(self):
super().__init__("Cenarius", 9, CHARACTER_CLASS.DRUID, CARD_RARITY.LEGENDARY, choices=[
Choice(IncreaseStats(), Give([Buff(ChangeAttack(2)), Buff(ChangeHealth(2)), Buff(Taunt())]), MinionSelector()),
Choice(SummonTreants(), Summon(TauntTreant(), 2), PlayerSelector())
])
def create_minion(self, player):
return Minion(5, 8)
Circle of Healing
0
Spell
Common
NIL
Priest
Restore #4 Health to ALL minions.
-1
-1
-1
12
class CircleOfHealing(SpellCard):
def __init__(self):
super().__init__("Circle of Healing", 0, CHARACTER_CLASS.PRIEST, CARD_RARITY.COMMON)
def use(self, player, game):
super().use(player, game)
targets = copy.copy(game.other_player.minions)
targets.extend(player.minions)
for minion in targets:
minion.heal(player.effective_heal_power(4), self)
Cold Blood
1
Spell
Common
NIL
Rogue
Give a minion +2 Attack. <b>Combo:</b> +4 Attack instead.
-1
-1
-1
11
class ColdBlood(SpellCard):
def __init__(self):
super().__init__("Cold Blood", 1, CHARACTER_CLASS.ROGUE, CARD_RARITY.COMMON, target_func=hearthbreaker.targeting.find_minion_spell_target)
def use(self, player, game):
super().use(player, game)
if player.cards_played > 0:
self.target.change_attack(4)
else:
self.target.change_attack(2)
Coldlight Oracle
3
Minion
Rare
Murloc
Neutral
<b>Battlecry:</b> Each player draws 2 cards.
2
2
-1
6
class ColdlightOracle(MinionCard):
def __init__(self):
super().__init__("Coldlight Oracle", 3, CHARACTER_CLASS.ALL, CARD_RARITY.RARE, minion_type=MINION_TYPE.MURLOC, battlecry=Battlecry(Draw(2), PlayerSelector(players=BothPlayer())))
def create_minion(self, player):
return Minion(2, 2)
Coldlight Seer
3
Minion
Rare
Murloc
Neutral
<b>Battlecry:</b> Give ALL other Murlocs +2 Health.
3
2
-1
6
class ColdlightSeer(MinionCard):
def __init__(self):
super().__init__("Coldlight Seer", 3, CHARACTER_CLASS.ALL, CARD_RARITY.RARE, minion_type=MINION_TYPE.MURLOC, battlecry=Battlecry(Give(ChangeHealth(2)), MinionSelector(IsType(MINION_TYPE.MURLOC), BothPlayer())))
def create_minion(self, player):
return Minion(2, 3)
Commanding Shout
2
Spell
Rare
NIL
Warrior
Your minions can't be reduced below 1 Health this turn. Draw a card.
-1
-1
-1
9
class CommandingShout(SpellCard):
def __init__(self):
super().__init__("Commanding Shout", 2, CHARACTER_CLASS.WARRIOR, CARD_RARITY.RARE)
def use(self, player, game):
super().use(player, game)
player.add_aura(AuraUntil(MinimumHealth(1), MinionSelector(), TurnEnded()))
player.draw()
Conceal
1
Spell
Common
NIL
Rogue
Give your minions <b>Stealth</b> until your next turn.
-1
-1
-1
9
class Conceal(SpellCard):
def __init__(self):
super().__init__("Conceal", 1, CHARACTER_CLASS.ROGUE, CARD_RARITY.COMMON)
def use(self, player, game):
super().use(player, game)
for minion in player.minions:
if not minion.stealth:
minion.add_buff(BuffUntil(Stealth(), TurnStarted()))
Cone of Cold
4
Spell
Common
NIL
Mage
<b>Freeze</b> a minion and the minions next to it, and deal $1 damage to them.
-1
-1
-1
21
class ConeOfCold(SpellCard):
def __init__(self):
super().__init__("Cone of Cold", 4, CHARACTER_CLASS.MAGE, CARD_RARITY.COMMON, target_func=hearthbreaker.targeting.find_minion_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.add_buff(Buff(Frozen()))
index = self.target.index
if self.target.index < len(self.target.player.minions) - 1:
minion = self.target.player.minions[index + 1]
minion.damage(player.effective_spell_damage(1), self)
minion.add_buff(Buff(Frozen()))
self.target.damage(player.effective_spell_damage(1), self)
if self.target.index > 0:
minion = self.target.player.minions[index - 1]
minion.damage(player.effective_spell_damage(1), self)
minion.add_buff(Buff(Frozen()))
Counterspell
3
Spell
Rare
NIL
Mage
<b>Secret:</b> When your opponent casts a spell, <b>Counter</b> it.
-1
-1
-1
17
class Counterspell(SecretCard):
def __init__(self):
super().__init__("Counterspell", 3, CHARACTER_CLASS.MAGE, CARD_RARITY.RARE)
def use(self, player, game):
super().use(player, game)
def _reveal(self, card, index):
if card.is_spell():
card.cancel = True
super().reveal()
def activate(self, player):
player.game.current_player.bind("card_played", self._reveal)
def deactivate(self, player):
player.game.current_player.unbind("card_played", self._reveal)
Crazed Alchemist
2
Minion
Rare
NIL
Neutral
<b>Battlecry:</b> Swap the Attack and Health of a minion.
2
2
-1
6
class CrazedAlchemist(MinionCard):
def __init__(self):
super().__init__("Crazed Alchemist", 2, CHARACTER_CLASS.ALL, CARD_RARITY.RARE, battlecry=Battlecry(SwapStats('health', 'attack', False), MinionSelector(players=BothPlayer(), picker=UserPicker())))
def create_minion(self, player):
return Minion(2, 2)
Cruel Taskmaster
2
Minion
Common
NIL
Warrior
<b>Battlecry:</b> Deal 1 damage to a minion and give it +2 Attack.
2
2
-1
6
class CruelTaskmaster(MinionCard):
def __init__(self):
super().__init__("Cruel Taskmaster", 2, CHARACTER_CLASS.WARRIOR, CARD_RARITY.COMMON, battlecry=Battlecry([Damage(1), Give(ChangeAttack(2))], MinionSelector(players=BothPlayer(), picker=UserPicker())))
def create_minion(self, player):
return Minion(2, 2)
Cult Master
4
Minion
Common
NIL
Neutral
Whenever one of your other minions dies, draw a card.
2
4
-1
6
class CultMaster(MinionCard):
def __init__(self):
super().__init__("Cult Master", 4, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON)
def create_minion(self, player):
return Minion(4, 2, effects=[Effect(MinionDied(), ActionTag(Draw(), PlayerSelector()))])
Damaged Golem
1
Minion
Common
Mech
Neutral
NIL
1
2
-1
6
class DamagedGolem(MinionCard):
def __init__(self):
super().__init__("Damaged Golem", 1, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, False, minion_type=MINION_TYPE.MECH)
def create_minion(self, player):
return Minion(2, 1)
Dark Iron Dwarf
4
Minion
Common
NIL
Neutral
<b>Battlecry:</b> Give a minion +2 Attack this turn.
4
4
-1
6
class DarkIronDwarf(MinionCard):
def __init__(self):
super().__init__("Dark Iron Dwarf", 4, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, battlecry=Battlecry(Give(BuffUntil(ChangeAttack(2), TurnEnded(player=CurrentPlayer()))), MinionSelector(players=BothPlayer(), picker=UserPicker())))
def create_minion(self, player):
return Minion(4, 4)
Deadly Shot
3
Spell
Common
NIL
Hunter
Destroy a random enemy minion.
-1
-1
-1
13
class DeadlyShot(SpellCard):
def __init__(self):
super().__init__("Deadly Shot", 3, CHARACTER_CLASS.HUNTER, CARD_RARITY.COMMON)
def use(self, player, game):
super().use(player, game)
targets = hearthbreaker.targeting.find_enemy_minion_battlecry_target(player.game, lambda x: True)
target = game.random_choice(targets)
target.die(None)
game.check_delayed()
def can_use(self, player, game):
return super().can_use(player, game) and len(game.other_player.minions) >= 1
Deathwing
10
Minion
Legendary
Dragon
Neutral
<b>Battlecry:</b> Destroy all other minions and discard your hand.
12
12
-1
6
class Deathwing(MinionCard):
def __init__(self):
super().__init__("Deathwing", 10, CHARACTER_CLASS.ALL, CARD_RARITY.LEGENDARY, minion_type=MINION_TYPE.DRAGON, battlecry=(Battlecry(Kill(), MinionSelector(players=BothPlayer())), Battlecry(Discard(amount=Count(CardSelector())), PlayerSelector())))
def create_minion(self, player):
return Minion(12, 12)
Defender
1
Minion
Common
NIL
Paladin
NIL
1
2
-1
6
class DefenderMinion(MinionCard):
def __init__(self):
super().__init__("Defender", 1, CHARACTER_CLASS.PALADIN, CARD_RARITY.COMMON)
def create_minion(self, p):
return Minion(2, 1)
Defender of Argus
4
Minion
Rare
NIL
Neutral
<b>Battlecry:</b> Give adjacent minions +1/+1 and <b>Taunt</b>.
3
2
-1
6
class DefenderOfArgus(MinionCard):
def __init__(self):
super().__init__("Defender of Argus", 4, CHARACTER_CLASS.ALL, CARD_RARITY.RARE, battlecry=Battlecry(Give([ Buff(Taunt()), Buff(ChangeAttack(1)), Buff(ChangeHealth(1)) ]), MinionSelector(Adjacent())))
def create_minion(self, player):
return Minion(2, 3)
Defias Bandit
1
Minion
NIL
NIL
Rogue
NIL
1
2
-1
6
class DefiasBandit(MinionCard):
def __init__(self):
super().__init__("Defias Bandit", 1, CHARACTER_CLASS.ROGUE, CARD_RARITY.COMMON, False)
def create_minion(self, player):
return Minion(2, 1)
Defias Ringleader
2
Minion
Common
NIL
Rogue
<b>Combo:</b> Summon a 2/1 Defias Bandit.
2
2
-1
6
class DefiasRingleader(MinionCard):
def __init__(self):
super().__init__("Defias Ringleader", 2, CHARACTER_CLASS.ROGUE, CARD_RARITY.COMMON, combo=Battlecry(Summon(DefiasBandit()), PlayerSelector()))
def create_minion(self, player):
return Minion(2, 2)
Demolisher
3
Minion
Rare
Mech
Neutral
At the start of your turn, deal 2 damage to a random enemy.
4
1
-1
6
class Demolisher(MinionCard):
def __init__(self):
super().__init__("Demolisher", 3, CHARACTER_CLASS.ALL, CARD_RARITY.RARE, minion_type=MINION_TYPE.MECH)
def create_minion(self, player):
return Minion(1, 4, effects=[Effect(TurnStarted(), ActionTag(Damage(2), CharacterSelector(players=EnemyPlayer(), picker=RandomPicker())))])
Demonfire
2
Spell
Common
NIL
Warlock
Deal $2 damage to a minion. If it’s a friendly Demon, give it +2/+2 instead.
-1
-1
-1
12
class Demonfire(SpellCard):
def __init__(self):
super().__init__("Demonfire", 2, CHARACTER_CLASS.WARLOCK, CARD_RARITY.COMMON, target_func=hearthbreaker.targeting.find_minion_spell_target)
def use(self, player, game):
super().use(player, game)
targets = copy.copy(player.game.current_player.minions)
if self.target.card.minion_type is MINION_TYPE.DEMON and self.target in targets:
self.target.change_attack(2)
self.target.increase_health(2)
else:
self.target.damage(player.effective_spell_damage(2), self)
Demonfire
0
Enchantment
Common
NIL
Warlock
This Demon has +2/+2.
-1
-1
-1
12
class Demonfire(SpellCard):
def __init__(self):
super().__init__("Demonfire", 2, CHARACTER_CLASS.WARLOCK, CARD_RARITY.COMMON, target_func=hearthbreaker.targeting.find_minion_spell_target)
def use(self, player, game):
super().use(player, game)
targets = copy.copy(player.game.current_player.minions)
if self.target.card.minion_type is MINION_TYPE.DEMON and self.target in targets:
self.target.change_attack(2)
self.target.increase_health(2)
else:
self.target.damage(player.effective_spell_damage(2), self)
Devilsaur
5
Minion
Common
Beast
Neutral
NIL
5
5
-1
6
class Devilsaur(MinionCard):
def __init__(self):
super().__init__("Devilsaur", 5, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, False, minion_type=MINION_TYPE.BEAST)
def create_minion(self, player):
return Minion(5, 5)
Dire Wolf Alpha
2
Minion
Common
Beast
Neutral
Adjacent minions have +1 Attack.
2
2
-1
6
class DireWolfAlpha(MinionCard):
def __init__(self):
super().__init__("Dire Wolf Alpha", 2, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, minion_type=MINION_TYPE.BEAST)
def create_minion(self, player):
return Minion(2, 2, auras=[Aura(ChangeAttack(1), MinionSelector(Adjacent()))])
Divine Favor
3
Spell
Rare
NIL
Paladin
Draw cards until you have as many in hand as your opponent.
-1
-1
-1
9
class DivineFavor(SpellCard):
def __init__(self):
super().__init__("Divine Favor", 3, CHARACTER_CLASS.PALADIN, CARD_RARITY.RARE)
def use(self, player, game):
super().use(player, game)
difference = len(game.other_player.hand) - len(player.hand)
for i in range(0, difference):
player.draw()
Doomguard
5
Minion
Rare
Demon
Warlock
<b>Charge</b>. <b>Battlecry:</b> Discard two random cards.
7
5
-1
6
class Doomguard(MinionCard):
def __init__(self):
super().__init__("Doomguard", 5, CHARACTER_CLASS.WARLOCK, CARD_RARITY.RARE, minion_type=MINION_TYPE.DEMON, battlecry=Battlecry(Discard(amount=2), PlayerSelector()))
def create_minion(self, player):
return Minion(5, 7, charge=True)
Doomhammer
5
Weapon
Epic
NIL
Shaman
<b>Windfury, Overload:</b> (2)
-1
2
8
6
class Doomhammer(WeaponCard):
def __init__(self):
super().__init__("Doomhammer", 5, CHARACTER_CLASS.SHAMAN, CARD_RARITY.EPIC, overload=2)
def create_weapon(self, player):
return Weapon(2, 8, buffs=[Buff(Windfury())])
Doomsayer
2
Minion
Epic
NIL
Neutral
At the start of your turn, destroy ALL minions.
7
0
-1
6
class Doomsayer(MinionCard):
def __init__(self):
super().__init__("Doomsayer", 2, CHARACTER_CLASS.ALL, CARD_RARITY.EPIC)
def create_minion(self, player):
return Minion(0, 7, effects=[Effect(TurnStarted(), ActionTag(Kill(), MinionSelector(condition=None, players=BothPlayer())))])
Dread Corsair
4
Minion
Common
Pirate
Neutral
<b>Taunt.</b> Costs (1) less per Attack of your weapon.
3
3
-1
6
class DreadCorsair(MinionCard):
def __init__(self):
super().__init__("Dread Corsair", 4, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, minion_type=MINION_TYPE.PIRATE, buffs=[Buff(ManaChange(Attribute("attack", WeaponSelector()), -1))])
def create_minion(self, player):
return Minion(3, 3, taunt=True)
Dream
0
Spell
NIL
NIL
Dream
Return a minion to its owner's hand.
-1
-1
-1
7
class Dream(SpellCard):
def __init__(self):
super().__init__("Dream", 0, CHARACTER_CLASS.DREAM, CARD_RARITY.COMMON, False, hearthbreaker.targeting.find_minion_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.bounce()
Druid of the Claw
5
Minion
Common
Beast
Druid
<b>Taunt</b>
6
4
-1
9
class DruidOfTheClaw(MinionCard):
def __init__(self):
super().__init__("Druid of the Claw", 5, CHARACTER_CLASS.DRUID, CARD_RARITY.COMMON, choices=[
Choice(CatForm(), Transform(CatDruid()), SelfSelector()),
Choice(BearForm(), Transform(BearDruid()), SelfSelector())
])
def create_minion(self, player):
return Minion(4, 4)
Druid of the Claw
5
Minion
Common
NIL
Druid
<b>Choose One -</b> <b>Charge</b>; or +2 Health and <b>Taunt</b>.
4
4
-1
9
class DruidOfTheClaw(MinionCard):
def __init__(self):
super().__init__("Druid of the Claw", 5, CHARACTER_CLASS.DRUID, CARD_RARITY.COMMON, choices=[
Choice(CatForm(), Transform(CatDruid()), SelfSelector()),
Choice(BearForm(), Transform(BearDruid()), SelfSelector())
])
def create_minion(self, player):
return Minion(4, 4)
Druid of the Claw
5
Minion
Common
Beast
Druid
<b>Charge</b>
4
4
-1
9
class DruidOfTheClaw(MinionCard):
def __init__(self):
super().__init__("Druid of the Claw", 5, CHARACTER_CLASS.DRUID, CARD_RARITY.COMMON, choices=[
Choice(CatForm(), Transform(CatDruid()), SelfSelector()),
Choice(BearForm(), Transform(BearDruid()), SelfSelector())
])
def create_minion(self, player):
return Minion(4, 4)
Dust Devil
1
Minion
Common
NIL
Shaman
<b>Windfury</b>. <b>Overload:</b> (2)
1
3
-1
6
class DustDevil(MinionCard):
def __init__(self):
super().__init__("Dust Devil", 1, CHARACTER_CLASS.SHAMAN, CARD_RARITY.COMMON, overload=2)
def create_minion(self, player):
return Minion(3, 1, windfury=True)
Eaglehorn Bow
3
Weapon
Rare
NIL
Hunter
Whenever a friendly <b>Secret</b> is revealed, gain +1 Durability.
-1
3
2
6
class EaglehornBow(WeaponCard):
def __init__(self):
super().__init__("Eaglehorn Bow", 3, CHARACTER_CLASS.HUNTER, CARD_RARITY.RARE)
def create_weapon(self, player):
return Weapon(3, 2, effects=[Effect(SecretRevealed(), ActionTag(IncreaseDurability(), WeaponSelector()))])
Earth Elemental
5
Minion
Epic
NIL
Shaman
<b>Taunt</b>. <b>Overload:</b> (3)
8
7
-1
6
class EarthElemental(MinionCard):
def __init__(self):
super().__init__("Earth Elemental", 5, CHARACTER_CLASS.SHAMAN, CARD_RARITY.EPIC, overload=3)
def create_minion(self, player):
return Minion(7, 8, taunt=True)
Earth Shock
1
Spell
Common
NIL
Shaman
<b>Silence</b> a minion, then deal $1 damage to it.
-1
-1
-1
9
class EarthShock(SpellCard):
def __init__(self):
super().__init__("Earth Shock", 1, CHARACTER_CLASS.SHAMAN, CARD_RARITY.COMMON, target_func=hearthbreaker.targeting.find_minion_spell_target)
def use(self, player, game):
super().use(player, game)
self.target.silence()
self.target.damage(player.effective_spell_damage(1), self)
Earthen Ring Farseer
3
Minion
Common
NIL
Neutral
<b>Battlecry:</b> Restore 3 Health.
3
3
-1
6
class EarthenRingFarseer(MinionCard):
def __init__(self):
super().__init__("Earthen Ring Farseer", 3, CHARACTER_CLASS.ALL, CARD_RARITY.COMMON, battlecry=Battlecry(Heal(3), CharacterSelector(players=BothPlayer(), picker=UserPicker())))
def create_minion(self, player):
return Minion(3, 3)
Edwin VanCleef
3
Minion
Legendary
NIL
Rogue
<b>Combo:</b> Gain +2/+2 for each card played earlier this turn.
2
2
-1
6
class EdwinVanCleef(MinionCard):
def __init__(self):
super().__init__("Edwin VanCleef", 3, CHARACTER_CLASS.ROGUE, CARD_RARITY.LEGENDARY, battlecry=Battlecry(Give([Buff(ChangeAttack(Attribute("cards_played", PlayerSelector()), 2)), Buff(ChangeHealth(Attribute("cards_played", PlayerSelector()), 2))]), SelfSelector()))
def create_minion(self, player):
return Minion(2, 2)
Emerald Drake
4
Minion
NIL
Dragon
Dream
NIL
6
7
-1
6
class EmeraldDrake(MinionCard):
def __init__(self):
super().__init__("Emerald Drake", 4, CHARACTER_CLASS.DREAM, CARD_RARITY.COMMON, False, MINION_TYPE.DRAGON)
def create_minion(self, player):
return Minion(7, 6)
Emperor Cobra
3
Minion
Rare
Beast
Neutral
Destroy any minion damaged by this minion.
3
2
-1
6
class EmperorCobra(MinionCard):
def __init__(self):
super().__init__("Emperor Cobra", 3, CHARACTER_CLASS.ALL, CARD_RARITY.RARE, minion_type=MINION_TYPE.BEAST)
def create_minion(self, player):
return Minion(2, 3, effects=[Effect(DidDamage(), ActionTag(Kill(), TargetSelector(IsMinion())))])
Equality
2
Spell
Rare
NIL
Paladin
Change the Health of ALL minions to 1.
-1
-1
-1
15
class Equality(SpellCard):
def __init__(self):
super().__init__("Equality", 2, CHARACTER_CLASS.PALADIN, CARD_RARITY.RARE)
def use(self, player, game):
super().use(player, game)
targets = copy.copy(game.other_player.minions)
targets.extend(player.minions)
for minion in targets:
minion.set_health_to(1)
def can_use(self, player, game):
return super().can_use(player, game) and (len(player.minions) > 0 or len(game.other_player.minions) > 0)
Ethereal Arcanist
4
Minion
Rare
NIL
Mage
If you control a <b>Secret</b> at the end of your turn, gain +2/+2.
3
3
-1
6
class EtherealArcanist(MinionCard):
def __init__(self):
super().__init__("Ethereal Arcanist", 4, CHARACTER_CLASS.MAGE, CARD_RARITY.RARE)
def create_minion(self, player):
return Minion(3, 3, effects=[Effect(TurnEnded(HasSecret()), ActionTag(Give(ChangeAttack(2)), SelfSelector())), Effect(TurnEnded(HasSecret()), ActionTag(Give(ChangeHealth(2)), SelfSelector()))])
Eviscerate
2
Spell
Common
NIL
Rogue
Deal $2 damage. <b>Combo:</b> Deal $4 damage instead.
-1
-1
-1
11
class Eviscerate(SpellCard):
def __init__(self):
super().__init__("Eviscerate", 2, CHARACTER_CLASS.ROGUE, CARD_RARITY.COMMON, target_func=hearthbreaker.targeting.find_spell_target)
def use(self, player, game):
super().use(player, game)
if player.cards_played > 0:
self.target.damage(player.effective_spell_damage(4), self)
else:
self.target.damage(player.effective_spell_damage(2), self)
Explosive Shot
5
Spell
Rare
NIL
Hunter
Deal $5 damage to a minion and $2 damage to adjacent ones.
-1
-1
-1
17
class ExplosiveShot(SpellCard):
def __init__(self):
super().__init__("Explosive Shot", 5, CHARACTER_CLASS.HUNTER, CARD_RARITY.RARE, target_func=hearthbreaker.targeting.find_minion_spell_target)
def use(self, player, game):
super().use(player, game)
index = self.target.index
if self.target.index < len(self.target.player.minions) - 1:
minion = self.target.player.minions[index + 1]
minion.damage(player.effective_spell_damage(2), self)
self.target.damage(player.effective_spell_damage(5), self)
if self.target.index > 0:
minion = self.target.player.minions[index - 1]
minion.damage(player.effective_spell_damage(2), self)
Explosive Trap
2
Spell
Common
NIL
Hunter
<b>Secret:</b> When your hero is attacked, deal $2 damage to all enemies.
-1
-1
-1
19
class ExplosiveTrap(SecretCard):
def __init__(self):
super().__init__("Explo
gitextract_qfr27zus/
├── CONTRIBUTING
├── LICENSE
├── readme.md
└── third_party/
├── hearthstone/
│ ├── LICENSE
│ ├── README.google
│ ├── card_data_hs.txt
│ ├── dev_hs.in
│ ├── dev_hs.out
│ ├── splits_hs.txt
│ ├── test_hs.in
│ ├── test_hs.out
│ ├── train_hs.in
│ └── train_hs.out
└── magic/
├── LICENSE
├── README.google
├── card_data_magic.txt
├── dev_magic.in
├── dev_magic.out
├── splits_magic.txt
├── test_magic.in
├── test_magic.out
├── train_magic.in
└── train_magic.out
Condensed preview — 23 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (6,169K chars).
[
{
"path": "CONTRIBUTING",
"chars": 1450,
"preview": "Want to contribute? Great! First, read this page (including the small print at the end).\n\n### Before you contribute\nBefo"
},
{
"path": "LICENSE",
"chars": 552,
"preview": "Copyright 2016 Google Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file ex"
},
{
"path": "readme.md",
"chars": 3142,
"preview": "# Collectible Card Game to Code Dataset #\n\nThis dataset contains the language to code datasets described in our paper:\n\n"
},
{
"path": "third_party/hearthstone/LICENSE",
"chars": 1078,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2014 Daniel Yule\n\nPermission is hereby granted, free of charge, to any person obtai"
},
{
"path": "third_party/hearthstone/README.google",
"chars": 407,
"preview": "URL: https://github.com/danielyule/hearthbreaker\nVersion: f09fcca823bd9bdaac5d216e7dbbf38a599d51e4\nLicense: MIT\nLicense "
},
{
"path": "third_party/hearthstone/card_data_hs.txt",
"chars": 298740,
"preview": "Acidic Swamp Ooze\n2\nMinion\nCommon\nNIL\nNeutral\n<b>Battlecry:</b> Destroy your opponent's weapon.\n2\n3\n-1\n6\nclass AcidicSwa"
},
{
"path": "third_party/hearthstone/dev_hs.in",
"chars": 11896,
"preview": "Assassin's Blade NAME_END 3 ATK_END -1 DEF_END 5 COST_END 4 DUR_END Weapon TYPE_END Rogue PLAYER_CLS_END NIL RACE_END Co"
},
{
"path": "third_party/hearthstone/dev_hs.out",
"chars": 23409,
"preview": "class AssassinsBlade(WeaponCard):§ def __init__(self):§ super().__init__(\"Assassin's Blade\", 5, CHARACTER_CLAS"
},
{
"path": "third_party/hearthstone/splits_hs.txt",
"chars": 1330,
"preview": "0\n0\n0\n0\n0\n0\n0\n0\n2\n1\n0\n0\n0\n0\n0\n0\n0\n0\n2\n1\n0\n0\n0\n0\n0\n0\n0\n0\n2\n1\n0\n0\n0\n0\n0\n0\n0\n0\n2\n1\n0\n0\n0\n0\n0\n0\n0\n0\n2\n1\n0\n0\n0\n0\n0\n0\n0\n0\n2\n1\n"
},
{
"path": "third_party/hearthstone/test_hs.in",
"chars": 11933,
"preview": "Archmage NAME_END 4 ATK_END 7 DEF_END 6 COST_END -1 DUR_END Minion TYPE_END Neutral PLAYER_CLS_END NIL RACE_END Common R"
},
{
"path": "third_party/hearthstone/test_hs.out",
"chars": 24006,
"preview": "class Archmage(MinionCard):§ def __init__(self):§ super().__init__(\"Archmage\", 6, CHARACTER_CLASS.ALL, CARD_RA"
},
{
"path": "third_party/hearthstone/train_hs.in",
"chars": 96159,
"preview": "Acidic Swamp Ooze NAME_END 3 ATK_END 2 DEF_END 2 COST_END -1 DUR_END Minion TYPE_END Neutral PLAYER_CLS_END NIL RACE_END"
},
{
"path": "third_party/hearthstone/train_hs.out",
"chars": 187751,
"preview": "class AcidicSwampOoze(MinionCard):§ def __init__(self):§ super().__init__(\"Acidic Swamp Ooze\", 2, CHARACTER_CL"
},
{
"path": "third_party/magic/LICENSE",
"chars": 1530,
"preview": "Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.\n\nRedistribution and use in source and binary forms, w"
},
{
"path": "third_party/magic/README.google",
"chars": 396,
"preview": "URL: https://github.com/magefree/mage\nVersion: 6a0554966edfa5df900bb33dddb50285b1b61fb5\nLicense: BSD\nLicense File: LICEN"
},
{
"path": "third_party/magic/dev_magic.in",
"chars": 199196,
"preview": "Colossal Might NAME_END NIL ATK_END NIL DEF_END {R}{G} COST_END NIL DUR_END Instant TYPE_END Alara Reborn PLAYER_CLS_END"
},
{
"path": "third_party/magic/dev_magic.out",
"chars": 730588,
"preview": "public class ColossalMight extends CardImpl {§public ColossalMight (UUID ownerId) {§super(ownerId, 51, \"Colossal Might\","
},
{
"path": "third_party/magic/splits_magic.txt",
"chars": 26594,
"preview": "0\n0\n0\n0\n0\n0\n0\n0\n0\n0\n0\n0\n0\n0\n0\n0\n0\n0\n2\n1\n0\n0\n0\n0\n0\n0\n0\n0\n0\n0\n0\n0\n0\n0\n0\n0\n0\n0\n2\n1\n0\n0\n0\n0\n0\n0\n0\n0\n0\n0\n0\n0\n0\n0\n0\n0\n0\n0\n2\n1\n"
},
{
"path": "third_party/magic/test_magic.in",
"chars": 196934,
"preview": "Cloven Casting NAME_END NIL ATK_END NIL DEF_END {5}{U}{R} COST_END NIL DUR_END Enchantment TYPE_END Alara Reborn PLAYER_"
},
{
"path": "third_party/magic/test_magic.out",
"chars": 693347,
"preview": "public class ClovenCasting extends CardImpl {§private static final FilterSpell filter = new FilterSpell(\"a multicolored "
},
{
"path": "third_party/magic/train_magic.in",
"chars": 3550380,
"preview": "Ageless Entity NAME_END 4 ATK_END 4 DEF_END {3}{G}{G} COST_END NIL DUR_END Creature - Elemental TYPE_END Duel Decks: Aja"
}
]
// ... and 2 more files (download for full content)
About this extraction
This page contains the full source code of the deepmind/card2code GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 23 files (34.8 MB), approximately 1.5M tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.