diff --git a/entities.py b/entities.py
index 51eab9d7..39c4c2a4 100644
--- a/entities.py
+++ b/entities.py
@@ -139,7 +139,7 @@ def use_card(self, card, exhaust, pile, enemies, target: "Enemy"=None) -> None:
card.apply(origin=self, enemies=enemies)
elif card.target == TargetType.YOURSELF:
card.apply(origin=self)
- bus.publish(Message.ON_CARD_PLAY, (self, card, target))
+ bus.publish(Message.ON_CARD_PLAY, (self, card, target, enemies))
if (card.type == CardType.STATUS and items.relics["Medical Kit"] in self.player.relics):
exhaust = True
elif (card.type == CardType.CURSE and items.relics["Blue Candle"] in self.player.relics):
diff --git a/helper.py b/helper.py
index e5988657..260df998 100644
--- a/helper.py
+++ b/helper.py
@@ -441,7 +441,7 @@ def __init__(self, host, amount):
def callback(self, message, data):
if message == Message.ON_CARD_PLAY:
- origin, card, target = data
+ origin, card, target, enemies = data
if card.type == CardType.SKILL:
ei.apply_effect(origin, None, Strength, self.amount)
@@ -452,7 +452,7 @@ def __init__(self, host, amount):
def callback(self, message, data):
if message == Message.ON_CARD_PLAY:
- origin, card, target = data
+ origin, card, target, enemies = data
if card.type == CardType.SKILL:
# TODO: Exhaust the card
pass
@@ -463,6 +463,75 @@ class NoDraw(Effect):
def __init__(self, host, _):
super().__init__(host, "No Draw", StackType.NONE, EffectType.DEBUFF, "You may not draw any more cards this turn.")
+class Combust(Effect):
+ registers = [Message.END_OF_TURN]
+ def __init__(self, host, amount):
+ super().__init__(host, "Combust", StackType.INTENSITY, EffectType.BUFF, "At the end of your turn, deals X damage to ALL enemies.", amount)
+
+ def callback(self, message, data: tuple[Player, list[Enemy]]):
+ if message == Message.END_OF_TURN:
+ player, enemies = data
+ for enemy in enemies:
+ enemy.health -= self.amount
+
+class DarkEmbrace(Effect):
+ registers = [Message.ON_EXHAUST]
+ def __init__(self, target, amount=1):
+ # "Whenever a card is Exhausted, draw 1 card
+ super().__init__(None, name="Dark Embrace", stack_type=StackType.NONE, effect_type=EffectType.BUFF, info="Whenever a card is Exhausted, draw 1 card.", amount=amount)
+
+ def callback(self, message, data: tuple[Player, Card]):
+ if message == Message.END_OF_TURN:
+ player, card = data
+ player.draw_cards(self.amount)
+
+class Evolve(Effect):
+ registers = [Message.ON_CARD_PLAY]
+ def __init__(self, host, amount):
+ super().__init__(host, "Evolve", StackType.NONE, EffectType.BUFF, "Whenever you play a Status or Curse, draw 1 card.", amount)
+
+ def callback(self, message, data: tuple[Player, Card, Enemy]):
+ if message == Message.ON_CARD_PLAY:
+ origin, card, target, enemies = data
+ if card.type in (CardType.STATUS, CardType.CURSE):
+ origin.draw_cards(1)
+
+class FeelNoPain(Effect):
+ registers = [Message.ON_CARD_PLAY]
+ def __init__(self, host, amount):
+ super().__init__(host, "Feel No Pain", StackType.INTENSITY, EffectType.BUFF, "Whenever you play a Skill, gain X Block.", amount)
+
+ def callback(self, message, data):
+ if message == Message.ON_CARD_PLAY:
+ origin, card, target, enemies = data
+ if card.type == CardType.SKILL:
+ origin.blocking(block=self.amount, context=self.name)
+
+class FireBreathing(Effect):
+ registers = [Message.ON_CARD_PLAY]
+ def __init__(self, host, amount):
+ super().__init__(host, "Fire Breathing", StackType.INTENSITY, EffectType.BUFF, "Whenever you play an Attack, deal X damage to ALL enemies.", amount)
+
+ def callback(self, message, data: tuple[Player, Card, Enemy, list[Enemy]]):
+ if message == Message.ON_CARD_PLAY:
+ player, card, target, enemies = data
+ if card.type == CardType.ATTACK:
+ for enemy in enemies:
+ enemy.health -= self.amount
+
+class FlameBarrier(Effect):
+ # "Gain 12 Block. Whenever you're attacked this turn, deal 4 damage back."
+ registers = [Message.ON_ATTACKED]
+
+ def __init__(self, host, amount):
+ super().__init__(host, "Flame Barrier", StackType.NONE, EffectType.BUFF, "Gain 12 Block. Whenever you're attacked this turn, deal 4 damage back.", amount)
+
+ def callback(self, message, data):
+ if message == Message.ON_ATTACKED:
+ target = data
+ target.health -= 4
+
+
class EffectInterface:
"""Responsible for applying effects, creating buff/debuff dictionaries, and counting down certain effects"""
def __init__(self):
diff --git a/items.py b/items.py
index 3332c5eb..f4d08a27 100644
--- a/items.py
+++ b/items.py
@@ -535,7 +535,7 @@ def apply(self, origin):
class DarkEmbrace(Card):
def __init__(self):
- super().__init__("Dark Embrace", "Whenever a card is Exhausted, draw 1 card.", Rarity.UNCOMMON, PlayerClass.IRONCLAD, CardType.POWER, TargetType.YOURSELF, energy_cost=2)
+ super().__init__(name="Dark Embrace", info="Whenever a card is Exhausted, draw 1 card.", rarity=Rarity.UNCOMMON, player_class=PlayerClass.IRONCLAD, card_type=CardType.POWER, target=TargetType.YOURSELF, energy_cost=2)
self.upgrade_preview += f"{self.energy_cost} Energy -> 1 Energy"
def upgrade(self):
@@ -543,7 +543,7 @@ def upgrade(self):
self.energy_cost = 1
def apply(self, origin):
- ei.apply_effect(origin, None, "Dark Embrace")
+ ei.apply_effect(origin, None, "DarkEmbrace")
class Disarm(Card):
def __init__(self):
@@ -642,7 +642,7 @@ def upgrade(self):
self.info = "Whenever a card is Exhausted, gain 4 Block."
def apply(self, origin):
- ei.apply_effect(origin, None, "Feel No Pain", self.feel_no_pain)
+ ei.apply_effect(origin, None, "FeelNoPain", self.feel_no_pain)
class FireBreathing(Card):
def __init__(self):
@@ -656,7 +656,7 @@ def upgrade(self):
self.info = "Whenever you draw a Status or Curse card, deal 10 damage to ALL enemies."
def apply(self, origin):
- ei.apply_effect(origin, None, "Fire Breathing", self.fire_breathing)
+ ei.apply_effect(origin, None, "FireBreathing", self.fire_breathing)
class FlameBarrier(Card):
def __init__(self):