Commit graph

12920 commits

Author SHA1 Message Date
Oleg Agafonov
60112c6be5 test framework: added commands to check declared attackers and blockers creatures (useful for AI tests, see checkAttackers and checkBlockers) 2024-12-31 22:08:13 +04:00
Grath
6b9532febd
[refactor/bugfix] use rule 802.2a where appropriate. (#13179)
* [refactor/bugfix] use rule 802.2a where appropriate.

Many effects which relied on getDefendingPlayerId would fail if the attacking creature had been removed from combat before they resolved, in which case the defending player ID would be null. This fixes these issues.

* Add test for removing attacking creature with Defending Player triggered ability.

Change allowFormer to be true by default, reduce falses to only necessary cases.
2024-12-25 14:18:01 -05:00
Grath
8de9fb03a4
Break deadlock for one must/can't be blocked pair. (#13182)
Handle the case where a 'must be blocked if able' creature is attacking but there aren't enough available creatures to block it.
2024-12-25 14:17:40 -05:00
Oleg Agafonov
f4572faf8b AI, combat: fixed that computer blocking an attacker by biggest creature instead optimal;
refactor: fixed that Defiant Vanguard depends on debug data;
2024-12-25 18:43:26 +04:00
Grath
9055179f77 [PIP] Implement Yes Man, Personal Securitron 2024-12-18 15:15:34 -05:00
Cameron Merkel
73b63d14ad
TargetAmount refactors (#13128)
* Add minimum and maximum target counts as parameters for TargetAmount and its subclasses; update/add several rules comments (and one actual text) for clarity; remove unused imports

* Get amount+description from target instead of parameters for DistributeCountersEffect and DamageMultiEffect; additions to TargetImpl.getDescription to accommodate

* Create separate method to check if "any number" phrasing should be used, override it in TargetAmount

* Check instanceof TargetAmount before casting

* Add new constructors to chain off of for TargetCreaturePermanentAmount & TargetCreatureOrPlaneswalkerAmount

* Fix text for Storm the Seedcore

* Use Integer.MAX_VALUE instead of 0 to represent no maximum targets

* Add comment about getUseAnyNumber()

* Use amount-only constructors in some TargetAmount subclasses, add clarifying documentation

* Fix a few calls

* Require more specific filters
2024-12-17 19:23:18 -05:00
Oleg Agafonov
2955535927 tests: added tests for auto-lands suggestion in deck editor and tourney (related to #13127) 2024-12-16 21:50:27 +04:00
PurpleCrowbar
bdf9f09500 Remove all sets lacking token images from token image database 2024-12-16 02:07:59 +00:00
Oleg Agafonov
4bce1e0a9a When you cast this spell - fixed that it required double cost for cards with alternative costs like Evoke (example: Nulldrifter, #12843) 2024-12-14 21:47:55 +04:00
Oleg Agafonov
ea0b0915a5 Triggered abilities - fixed that sacrice trigger doesn't work on itself (related to #13089, regression from #13088) 2024-12-14 16:59:20 +04:00
Oleg Agafonov
b855434a24 refactor: fixed dies events support in single cards (part 8, related to #13089, continue from #13088); 2024-12-14 15:48:32 +04:00
PurpleCrowbar
315edbb3be Remove DIS and INV from sets with token images 2024-12-13 20:43:57 +00:00
PurpleCrowbar
b559ed6a63 [FDN] Implement Quilled Greatwurm 2024-12-13 19:03:45 +00:00
xenohedron
8a13fbd24f Revert "Revert "[FDN] Implement Banner of Kinship""
This reverts commit 072410eff0.
2024-12-12 23:47:15 -05:00
xenohedron
072410eff0 Revert "[FDN] Implement Banner of Kinship"
This reverts commit bbfda7c479.
2024-12-12 23:02:08 -05:00
PurpleCrowbar
bbfda7c479 [FDN] Implement Banner of Kinship 2024-12-12 17:36:01 +00:00
xenohedron
24687eb4af implement [CLB] Hezrou 2024-12-08 20:27:17 -05:00
xenohedron
94db57e9d4 cleanup obsolete comment 2024-12-08 20:27:17 -05:00
Oleg Agafonov
8af7a492c8 refactor: fixed dies events support in single cards (part 7, related to #13089, continue from #13088); 2024-12-07 14:39:52 +04:00
Oleg Agafonov
2949444089 refactor: removed useless code on ChoiceCreatureType usage, removed possibly infinite code (game freezes) (related to #13106); 2024-12-05 01:03:13 +04:00
xenohedron
d2e7d100ee adjust start of extra turn log message 2024-12-02 20:22:21 -05:00
PurpleCrowbar
9ddafd16ed
[MB2] Implement Hish of the Snake Cult (#13102) 2024-12-02 18:44:58 -05:00
Grath
02db93b75c Correct UntapTargetCost similarly to UntapSourceCost per 118.11 2024-12-01 12:21:24 -05:00
Grath
8f3cd5a106 [DSC] Implement Fear of Sleep Paralysis
Also fix UntapSourceCost to allow 'consuming a stun counter' to count as paying untap cost, per rule 118.11, but only if Fear of Sleep Paralysis isn't making stun permanent.
2024-12-01 12:02:59 -05:00
Oleg Agafonov
c6bec887b9 Triggered abilities - fixed that it can trigger from hand or library (related to #13089, regression from #13088) 2024-12-01 15:28:30 +04:00
xenohedron
f06a4c772b fix MB2 playtest card legality (resolves #13090) 2024-11-30 20:25:47 -05:00
xenohedron
682a9d1aa6 refactor: remove unused class and constructors 2024-11-30 15:44:58 -05:00
xenohedron
4edce76732 refactor: simplify DistributeCountersEffect constructors 2024-11-30 14:27:37 -05:00
xenohedron
ab81e45cc9 text update: "of their choice" of the top or bottom 2024-11-30 14:27:37 -05:00
xenohedron
6f43e76c9e followup text fixes 2024-11-30 14:27:37 -05:00
xenohedron
729869ec36 update text: sacrifice "of their choice" 2024-11-30 14:27:35 -05:00
Oleg Agafonov
b1f914bbf4 version bump 2024-11-30 22:42:47 +04:00
Oleg Agafonov
b1024d23fc refactor: fixed dies events support in single cards (part 6); 2024-11-30 16:56:00 +04:00
Oleg Agafonov
d49ff89a81 refactor: shared logic for diff implementation of isInUseableZone, improved docs and readability; 2024-11-30 04:23:45 +04:00
Oleg Agafonov
57ef74da90 Recover abilities - fixed that it doesn't ask to pay a cost on multiple triggers; 2024-11-30 04:23:36 +04:00
Oleg Agafonov
6d55e4b9e6 refactor: fixed dies events support in single cards (part 5); 2024-11-30 04:23:35 +04:00
Oleg Agafonov
740a9347ae refactor: removed some usages of short LKI, moved static ability's useable zone logic to basic ability implementation; 2024-11-30 04:23:23 +04:00
Oleg Agafonov
52ebba4cd1 refactor: removed outdated code 2024-11-30 04:23:23 +04:00
Oleg Agafonov
fdbc5d6409 docs: added additional notes for 616, related to #13062 2024-11-30 04:23:21 +04:00
Oleg Agafonov
0689c56597 refactor: fixed dies events support in single cards (part 4); 2024-11-30 04:23:21 +04:00
Oleg Agafonov
dc9f349828 refactor: fixed dies events support in single cards (part 3); 2024-11-30 04:23:21 +04:00
Oleg Agafonov
c3343110f3 refactor: fixed dies events support in single cards (part 2); 2024-11-30 04:23:21 +04:00
Oleg Agafonov
66b338c6fc dies triggers improves:
* tests: added additional tests and verify/runtime checks for wrong die trigger settings;
* refactor: removed some usage of short LKI ;
* fixed dies events support in "or trigger" and "conditional trigger" (use cases like sacrifice cost);
* fixed dies events support in shared triggered abilities (use cases like sacrifice cost);
2024-11-30 04:23:21 +04:00
xenohedron
d6cf207a8b
Introduce new batch event for life lost for a specific player (#13071)
* Introduce new batch event for life lost for a specific player

closes #12202, fix #10805

* implement [DSC] Valgavoth, Harrower of Souls

* text fixes
2024-11-19 23:41:34 -05:00
xenohedron
95e986dee7 add reminder text for Flanking ability 2024-11-19 23:22:35 -05:00
xenohedron
d06d594934
rework batch events (#13066)
* add new framework for batch triggers

apply for tapped, untapped, sacrificed, milled

simplify Ob Nixilis, Captive Kingpin

* add a verify check

* fix mistakes

* add simple tests

* another test

* zone change - enters battlefield

* zone change: not battlefield

* zone change - leaves battlefield

* fix Kaya Spirit's Justice

* rename OneOrMoreCombatDamagePlayerTriggeredAbility

* refactor OneOrMoreDamagePlayerTriggeredAbility

* new YoureDealtDamageTriggeredAbility

* new OpponentDealtNoncombatDamageTriggeredAbility

* rework Risona, Asari Commander

* simplify War Elemental

* Add damage batch by source

rework some delayed triggered abilities

* fix Mindblade Render

* rework Initiative and a few others

* [temp] initiative test

* refactor: common style for DealsDamageSourceTriggeredAbility

* refactor cards to use common DealsDamageSourceTriggeredAbility

* update damage players batch triggers

* fix mistake in initiative

* new DealtDamageAnyTriggeredAbility

* new DealtCombatDamageToSourceTriggeredAbility

* update dealt damage to permanent batch triggered abilities

* refactor Hot Soup and param in DealtDamageAttachedTriggeredAbility

* a few more permanent batch triggered abilities

* fix mistake

* update some more damage batch triggers

* add test for Phyrexian Negator

* update Felix Five-Boots and enable test

update Wayta, Trainer Prodigy to align

* update damage batch by source triggers

* undo mistaken change

* fix verify

* cleanup unused methods

* Revert "[temp] initiative test"

This reverts commit 11ed19295f.

* Revert "add a verify check"

This reverts commit e7de47a656.

* fixes from checking text discrepancies

* fix Shriekwood Devourer

* merge fix

---------

Co-authored-by: Susucre <34709007+Susucre@users.noreply.github.com>
2024-11-19 21:23:08 -05:00
theelk801
10f03d0d12 [DSC] Implement Formless Genesis 2024-11-18 19:23:45 -05:00
xenohedron
0e1fa94a11 refactor: SimpleActivatedAbility default zone (cards X Y Z, emblems, tokens) 2024-11-16 23:04:53 -05:00
xenohedron
139ca1ebe1 refactor: SimpleStaticAbility default zone (second line) 2024-11-16 23:04:53 -05:00
xenohedron
ca6d0302b7 refactor: SimpleStaticAbility default zone (separate line) 2024-11-16 23:04:53 -05:00