diff options
| author | Florian Fischer <florian.fischer@muhq.space> | 2025-09-05 18:49:36 +0200 |
|---|---|---|
| committer | Florian Fischer <florian.fischer@muhq.space> | 2025-09-05 18:49:36 +0200 |
| commit | 9c76f93c057232c3d38a038db4ba72c7b4260ceb (patch) | |
| tree | 55a8d575788b5fc9e24e2254a81d79135fa6bb7f | |
| parent | 93b2e431cf8cf312e51078c4acbfcf687aaa8b9e (diff) | |
| download | muhqs-game-9c76f93c057232c3d38a038db4ba72c7b4260ceb.tar.gz muhqs-game-9c76f93c057232c3d38a038db4ba72c7b4260ceb.zip | |
implement magic/pierce!
| -rw-r--r-- | go/game/cardImplementations.go | 12 | ||||
| -rw-r--r-- | go/game/cardImplementations_test.go | 37 | ||||
| -rw-r--r-- | go/game/effect_test.go | 11 |
3 files changed, 60 insertions, 0 deletions
diff --git a/go/game/cardImplementations.go b/go/game/cardImplementations.go index f7f765d5..0780d6f9 100644 --- a/go/game/cardImplementations.go +++ b/go/game/cardImplementations.go @@ -324,6 +324,17 @@ func (*moreImpl) onPlay(a *PlayAction) { a.Controller().DrawN(2) } +type pierceImpl struct{ cardImplementationBase } + +func (*pierceImpl) playTargets() TargetDesc { + return newTargetDesc("unit") +} + +func (*pierceImpl) onPlay(a *PlayAction) { + u := a.Target().Selection()[0].(*Unit) + u.Controller().gameState.addEotEffect(newTmpEffect(u, "-1 armor")) +} + type mineImpl struct{ cardImplementationBase } func (*mineImpl) onPlay(a *PlayAction) { @@ -873,6 +884,7 @@ func init() { "magic/heal!": &healImpl{}, "magic/mine!": &mineImpl{}, "magic/more!": &moreImpl{}, + "magic/pierce!": &pierceImpl{}, "magic/ritual!": &ritualImpl{}, "magic/rush!": &rushImpl{}, "magic/select!": &selectImpl{}, diff --git a/go/game/cardImplementations_test.go b/go/game/cardImplementations_test.go index 43d69b76..ff41a752 100644 --- a/go/game/cardImplementations_test.go +++ b/go/game/cardImplementations_test.go @@ -419,3 +419,40 @@ symbols: t.Fatal("sailor not adding movement to fisher") } } + +func TestPierce(t *testing.T) { + s, _, p, _ := newMockState() + knight := s.addNewUnit(NewCard("base/knight"), Position{0, 0}, p) + archer := s.addNewUnit(NewCard("base/archer"), Position{1, 0}, p) + + pa := NewPlayAction(p, NewCard("magic/pierce!")) + pa.Target().AddSelection(knight) + s.ResolveAction(pa) + + x, err := knight.XEffect("armor") + if err != nil { + t.Fatal("unexpected", err) + } + if x != 0 { + t.Fatal("expected 0 armor") + } + + pa.Target().AddSelection(archer) + s.ResolveAction(pa) + x, err = archer.XEffect("armor") + if err != nil { + t.Fatal("unexpected", err) + } + if x != -1 { + t.Fatal("expected -1 armor") + } + + s.fight(knight, archer) + if knight.Damage() != 1 { + t.Fatal("Knight did not take 1 damage") + } + + if archer.Damage() != 2 { + t.Fatal("Archer did not take 2 damage") + } +} diff --git a/go/game/effect_test.go b/go/game/effect_test.go index e4db6334..09501863 100644 --- a/go/game/effect_test.go +++ b/go/game/effect_test.go @@ -17,6 +17,17 @@ func TestParseXEffect(t *testing.T) { t.Fatal("expected x == 1") } + e, err = parseXEffect("-1 armor") + if err != nil { + t.Fatal("unexpected", err) + } + if e.set { + t.Fatal("- xEffect reports as setting") + } + if e.x != -1 { + t.Fatal("expected x == -1") + } + _, err = parseXEffect("1: +1 armor") if err == nil { t.Fatal("parsed free action as X effect") |
