From 488f6377e6f6fd3099bb927a986d548fbc1eb63f Mon Sep 17 00:00:00 2001 From: Florian Fischer Date: Fri, 15 Aug 2025 20:52:55 +0200 Subject: implement mace and add damage dealt events/triggers --- go/game/cardImplementations.go | 56 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 48 insertions(+), 8 deletions(-) (limited to 'go/game/cardImplementations.go') diff --git a/go/game/cardImplementations.go b/go/game/cardImplementations.go index 2a627a94..dcd11808 100644 --- a/go/game/cardImplementations.go +++ b/go/game/cardImplementations.go @@ -189,7 +189,7 @@ func (*pikemanImpl) onETB(s *LocalState, p Permanent) { type spearImpl struct{ cardImplementationBase } func (*spearImpl) onPile(p Permanent) { - // FIXME: add + // FIXME: support multiple flexAttacks p.(*Unit).Attack.flexAttack = pikeAttack() } @@ -198,6 +198,40 @@ func (*spearImpl) onUnpile(p Permanent) { p.(*Unit).Attack.flexAttack = nil } +type maceImpl struct { + cardImplementationBase + triggers map[Permanent]Trigger +} + +func (i *maceImpl) onPile(p Permanent) { + s := p.Controller().gameState + t := newDamageDealtByTrigger(p, false, func(s *LocalState, e Event) ActionResolveFunc { + return func(*LocalState) { + for _, a := range e.affected { + if u, ok := a.(*Unit); ok { + u.adjustMarks(UnitStates.Paralysis, 1) + } + } + } + }, "afflict paralysis on damage") + s.addTrigger(t) + // Remember trigger + i.triggers[p] = t +} + +func (i *maceImpl) onUnpile(p Permanent) { + s := p.Controller().gameState + s.removeTrigger(i.triggers[p]) +} + +type poisonDaggerImpl struct{ cardImplementationBase } + +func (*poisonDaggerImpl) onPile(p Permanent) { +} + +func (*poisonDaggerImpl) onUnpile(p Permanent) { +} + // ====== Magic Set ====== type attackImpl struct{ cardImplementationBase } @@ -511,10 +545,12 @@ func (*drownedSailorImpl) onDrop(sailor Permanent) { type flyingDutchmenImpl struct{ cardImplementationBase } func (*flyingDutchmenImpl) onETB(s *LocalState, p Permanent) { - s.addTrigger(newEnemyDeathTrigger(p, func(s *LocalState) { - sailor := NewCard("kraken/drowned_sailor") - if p.Tile().IsAvailableForCard(sailor) { - addPermanentToPile(p, NewUnit(sailor, nil, p.Controller())) + s.addTrigger(newEnemyDeathTrigger(p, func(*LocalState, Event) ActionResolveFunc { + return func(s *LocalState) { + sailor := NewCard("kraken/drowned_sailor") + if p.Tile().IsAvailableForCard(sailor) { + addPermanentToPile(p, NewUnit(sailor, nil, p.Controller())) + } } }, p.Card().getEffects()[1])) } @@ -685,8 +721,10 @@ func (*illusionistImpl) fullActions(u *Unit) []*FullAction { type illusionImpl struct{ cardImplementationBase } func (*illusionImpl) onETB(s *LocalState, p Permanent) { - s.addTrigger(newTargetedTrigger(p, true, func(s *LocalState) { - s.destroyPermanent(p) + s.addTrigger(newTargetedTrigger(p, true, func(*LocalState, Event) ActionResolveFunc { + return func(s *LocalState) { + s.destroyPermanent(p) + } }, p.Card().getEffects()[0])) } @@ -701,7 +739,9 @@ func init() { "base/wormtongue": &wormtongueImpl{}, "base/pikeman": &pikemanImpl{}, - "equipment/spear": &spearImpl{}, + "equipments/mace": &maceImpl{triggers: make(map[Permanent]Trigger)}, + "equipments/poison_dagger": &poisonDaggerImpl{}, + "equipments/spear": &spearImpl{}, "magic/attack!": &attackImpl{}, "magic/appear!": &appearImpl{}, -- cgit v1.2.3