Skip to content

Commit 3f0925b

Browse files
committed
Add (partial) Invulnerability
1 parent c94182c commit 3f0925b

File tree

3 files changed

+31
-2
lines changed

3 files changed

+31
-2
lines changed

effect_catalog.py

+24
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,30 @@ def tick(self):
7171
self.amount -= 1
7272

7373

74+
class Invulnerable(Effect):
75+
'''Prevents all damage. Great for testing!'''
76+
registers = [Message.BEFORE_ATTACK]
77+
priorities = [100] # Called last so it can cancel all other effects.
78+
79+
def __init__(self, host, amount):
80+
super().__init__(
81+
host,
82+
"Invulnerable",
83+
StackType.DURATION_AND_INTENSITY,
84+
EffectType.BUFF,
85+
"Prevents all damage.",
86+
amount,
87+
)
88+
89+
def callback(self, message, data):
90+
if message == Message.BEFORE_ATTACK:
91+
attacker, target, damage_dealer = data
92+
if self.host == target:
93+
damage_dealer.set_damage(0, "<buff>,.-~*´¨¯¨`*·~-.¸-INVULNERABLE-,.-~*´¨¯¨`*·~-.¸</buff>")
94+
else:
95+
pass
96+
97+
7498
class Strength(Effect):
7599
registers = [Message.BEFORE_ATTACK]
76100

entities.py

+4
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ def modify_damage(self, change: int, context: str, *args, **kwargs):
99
new_dmg = self.damage + change
1010
ansiprint(f"Damage modified from {self.damage} --> {new_dmg} by {context}.")
1111
self.damage = new_dmg
12+
def set_damage(self, new_dmg: int, context: str, *args, **kwargs):
13+
ansiprint(f"Damage modified from {self.damage} --> {new_dmg} by {context}.")
14+
self.damage = new_dmg
15+
1216

1317
class Action:
1418
def __init__(self, name, action, amount):

tests/test_game.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from ansi_tags import ansiprint
1212
from definitions import CardType
1313
from tests.fixtures import sleepless
14+
import effect_interface
1415

1516

1617
def replacement_clear_screen():
@@ -97,21 +98,21 @@ def patched_input(*args, **kwargs):
9798

9899

99100
@pytest.mark.timeout(10)
100-
@pytest.mark.parametrize("seed", list(range(10)))
101+
@pytest.mark.parametrize("seed", list(range(30)))
101102
def test_e2e(seed, monkeypatch, sleepless):
102103
'''Test the game from start to finish
103104
Plays with (more or less) random inputs to test the game.
104105
Seems to find lots of bugs, but very hard to repeat.
105106
'''
106107
ansiprint(f"<red><bold>Seed for this run is: {seed}</bold></red>")
107108
mygame = game.Game(seed=seed)
109+
effect_interface.apply_effect(mygame.player, None, "Invulnerable", 1) # IDDQD
108110
with monkeypatch.context() as m:
109111
m.setattr('builtins.input', autoplayer(mygame))
110112
displayer.clear = replacement_clear_screen
111113

112114
try:
113115
start = time.time()
114-
assert len(mygame.bus.subscribers) == 0
115116
mygame.start()
116117
except Exception as e:
117118
ansiprint(f"<red><bold>Failed with seed: {seed}</bold></red>")

0 commit comments

Comments
 (0)