Commit graph

155 commits

Author SHA1 Message Date
Oleg Agafonov
7a1d22d459 merge fix 2024-12-31 22:33:10 +04:00
Oleg Agafonov
b2279a8e9c tests: added many use cases for must be blocked, must blocking and menace effects (related to #13182) 2024-12-31 22:12:42 +04:00
Oleg Agafonov
23a414e074 refactor, combat: improved declare blockers code, added docs, added additional runtime checks for AI, added debug info 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
a9bdf2eb18 test framework: improved aiXXX commands support:
- added more options for priority control (play single priority, play multiple priorities until stack resolved);
- added more options for step control (play single step, play multiple steps);
- improved compatibility with AI and real time commands (now check commands can be called inside AI controlled steps);
- added tests for assign non-blocked damage;
2024-10-26 11:55:19 +04:00
PurpleCrowbar
43d7da9581 Fix players who have lost being valid attack targets 2024-07-27 19:45:22 +01:00
xenohedron
fdd244786b refactor: improve method name (related to 86fa9278) 2024-06-13 00:43:51 -04:00
xenohedron
33fe4730ae
Fix first strike damage logic (#12297)
* add tests for first strike rules

* fix first strike damage logic per 702.7c

* add more test cases

* update logic to not check actual damage dealt

* add another test case

* adjust naming and docs
2024-05-26 20:01:01 -04:00
Oleg Agafonov
e4157fefb8 AI: improved combat support:
* added support to attack battle permanents (#10246);
* fixed that AI was able to attack multiple targets by single creature (#7434);
* added docs;
* added todos with another bugs or possible problems with AI combat;
2024-01-20 00:17:14 +04:00
Susucre
7c454fb24c
Rework AsThough handling to allow choosing/affecting a specific alternate cast (#11114)
* Rework AsThoughEffect

* some cleanup of MageIdentifer

* refactor ActivationStatus

* fix bolas's citadel

* fix a couple of the Alternative Cost being applied too broadly.

* fix Risen Executioneer

* allow cancellation of AsThough choice.

* fix One with the Multiverse

* cleanup cards needing their own MageIdentifier

* last couple of fixes

* apply reviews for cleaner code.

* some more cleanup
2023-10-02 18:42:54 -04:00
Susucre
eec5bceb71
fix game log message for Banding (#11021) 2023-08-25 21:10:51 -04:00
Oleg Agafonov
93cb4404e3 game: fixed game error in some multi blocker damage use cases (NPE error); 2023-08-25 19:32:28 +04:00
Susucre
f75b1c9f0a
Code cleanup: protect all copy constructors (#10750)
* apply regex to change public copy constructors to protected
* cleanup code using now protected constructors
* fix manaBuilder weird casting of Mana into ConditionalMana
2023-08-04 19:34:58 -04:00
Alex Vasile
6b5d4abb69
Add documentation to Cards and CardsImpl (#9019)
* Added minor documentation and TODO questions

* Fixed typo

* Address one set of comments

* merge fix

* remove commented code

---------

Co-authored-by: xenohedron <xenohedron@users.noreply.github.com>
2023-07-02 18:20:28 -04:00
Oleg Agafonov
49ce794c45 Merge fix 2023-06-09 07:03:32 +04:00
Oleg Agafonov
ae5bc90915 Fixed game error on attack order disconnects 2023-06-09 07:03:31 +04:00
Evan Kranzler
024c3081df
[BRC] Implement Rootpath Purifier (ready for review) (#10363)
* refactor check supertype methods

* change supertype to list to match card type

* refactor various subtype methods

* implement mageobjectattribute for supertype

* a few fixes

* [BRC] Implement Rootpath Purifier

* a few extra fixes

* more fixes

* add test for purifier
2023-05-13 10:48:07 -04:00
Oleg Agafonov
3c66dc8706 Additional fixes for 9d9916280a 2023-05-09 15:05:24 +04:00
Oleg Agafonov
9d9916280a Attacking you abilities and filters - fixed that planeswalker removes from a combat can cause a game error (NPE error, example: Curse of Hospitality) 2023-05-09 14:59:44 +04:00
Evan Kranzler
947351932b
Ready for Review: Implementing Battles (#10156)
* add types and subtypes

* add startingDefense attribute

* [MOM] Implement Invasion of Ravnica / Guildpact Paragon

* fix two small errors

* refactor various instances of "any target"

* fully implement defense counters

* battles can now be attacked

* [MOM] Implement Invasion of Dominaria / Serra Faithkeeper

* [MOM] Implement Invasion of Innistrad / Deluge of the Dead

* [MOM] Implement Invasion of Kaladesh / Aetherwing, Golden-Scale Flagship

* [MOM] Implement Invasion of Kamigawa / Rooftop Saboteurs

* [MOM] Implement Invasion of Karsus / Refraction Elemental

* [MOM] Implement Invasion of Tolvada / The Broken Sky

* simplify battle info ability

* fix verify failure

* some more fixes for attacking battles

* [MOM] Implement Invasion of Kaldheim / Pyre of the World Tree

* [MOM] Implement Invasion of Lorwyn / Winnowing Forces

* [MOM] Implement Invasion of Moag / Bloomwielder Dryads

* [MOM] Implement Invasion of Shandalar / Leyline Surge

* [MOM] Implement Invasion of Belenon / Belenon War Anthem

* [MOM] Implement Invasion of Pyrulea / Gargantuan Slabhorn

* [MOM] Implement Invasion of Vryn / Overloaded Mage-Ring

* [MOM] Implement Marshal of Zhalfir

* [MOM] Implement Sunfall

* implement protectors for sieges

* partially implement siege defeated trigger

* fix verify failure

* some updates to blocking

* [MOM] Implement Invasion of Mercadia / Kyren Flamewright

* [MOM] Implement Invasion of Theros / Ephara, Ever-Sheltering

* [MOM] Implement Invasion of Ulgrotha / Grandmother Ravi Sengir

* [MOM] Implement Invasion of Xerex / Vertex Paladin

* add initial battle test

* fix verify failure

* [MOM] Implement Invasion of Amonkhet / Lazotep Convert

* [MOM] update spoiler

* update how protectors are chosen

* update text

* battles can't block

* add control change test

* rename battle test for duel

* add multiplayer test

* [MOM] Implement Invasion of Alara / Awaken the Maelstrom

* [MOM] Implement Invasion of Eldraine

* [MOM] Implement Invasion of Ergamon / Truga Cliffhanger

* [MOM] Implement Invasion of Ixalan / Belligerent Regisaur

* battles now cast transformed (this is super hacky but we need to refactor TDFCs anyway)

* add TODO

* add ignore for randomly failing test

* a few small fixes

* add defense to MtgJsonCard (unused like loyalty)

* implement ProtectorIdPredicate

* small fixes
2023-04-13 20:03:16 -04:00
PurpleCrowbar
eb03669989 Fixed creatures that must attack being forced to attack players that have already lost the game 2023-02-03 02:23:57 +00:00
Alex W. Jackson
ecd43c07e2 Inform players of combat damage assignment order in log 2022-09-21 20:17:58 -04:00
Alex W. Jackson
c84d9d2168 Don't erase a permanent's attacking/blocking info when it leaves the battlefield. Kithkin Mourncaller and Kardur Doomscourge no longer need their own special TriggeredAbility class 2022-09-12 10:43:21 -04:00
Alex W. Jackson
d5e56f523d Add new EventType CREATURE_BLOCKS, which fires once per blocker (rather than once per blocker per attacker). Updated some abilities and cards to use it (still incomplete). Fixes #4285 2022-09-08 21:41:15 -04:00
Alex W. Jackson
a6c5209a2a Combat.getAttackers and Combat.getBlockers now return a Set instead of a List, so that two-headed blockers aren't included twice 2022-09-07 22:36:05 -04:00
Alex Vasile
1e4c64aacd Fix Goad + Planeswalker interaction. Fix #9148 2022-07-04 14:46:51 -04:00
Evan Kranzler
80e11b2052
(WIP) Replacing blocking/blocked by predicates (#8729)
* replaced blocking/blocked by predicates

* added test for knight of dusk (currently fails)

* added source parameter to filters and everything else that needs it

* some changes to various predicates

* test fix

* small changes to filter code

* merge fix

* fixed a test failure

* small change to Karn, Scion of Urza

* removed sourceId from filter methods and other similar places

* added new getobject method to fix some test failures

* a few more fixes

* fixed merge conflicts

* merge fix
2022-03-23 18:45:02 -04:00
Evan Kranzler
4591ac07cc
Reworking goad effects (ready for review) (#8034)
* changing goad to designation, refactored goad effects to be continuous

* [AFC] Implemented Vengeful Ancestor

* reworked effects which goad an attached creature

* updated goading implementation

* updated combat with new goad logic

* some more changes, added a test

* another fix

* update to test, still fails

* added more failing tests

* more failing tests

* added additional goad check

* small fix to two tests (still failing

* added a regular combat test (passes and fails randomly)

* fixed bug in computer player random selection

* some changes to how TargetDefender is handled

* removed unnecessary class

* more combat fixes, tests pass now

* removed tests which no longer work due to combat changes

* small merge fix

* [NEC] Implemented Komainu Battle Armor

* [NEC] Implemented Kaima, the Fractured Calm

* [NEC] added all variants
2022-02-15 09:18:21 -05:00
Oleg Agafonov
58566d2a7c * Game: fixed rollback and game freeze on select attackers step with disconnected people; 2021-09-05 20:03:36 +04:00
jeffwadsworth
43dbaf405b - Fixed #8067. Included weirddan455 fixes to Kardur Doomscourge as well. Added support for "remove from combat" to the 2 cards. Note that attacking creatures put into the graveyard is a special case. Test will follow. 2021-07-31 16:46:11 -05:00
Oleg Agafonov
daed98fb0b Fixed missing clear code in combat (maybe related to #7997); 2021-07-17 19:41:25 +04:00
Evan Kranzler
572104b8fc
Reworking card types in preparation for implementing Grist, the Hunger Tide (#7899)
Co-authored-by: Oleg Agafonov <jaydi85@gmail.com>
2021-07-09 07:28:43 +04:00
Max Behling
d3e57b7fb9
Implemented Thrasta, Tempest's Roar (#7835)
* Implemented ThrastaTempestsRoar
2021-05-24 11:42:11 +04:00
Evan Kranzler
0c3b294527 [C21] Implemented Combat Calligrapher 2021-04-27 20:06:49 -04:00
Evan Kranzler
5390963d38
Fix handling of damage to permanents (WIP) (#7592)
* initial refactor of damage events

* cleaned up some instances of classes that need to be removed

* removed old damage event classes

* removed outdated imports

* temporarily refactor Everlasting Torment (this will need to be changed more)

* updated damage handling to use new changes

* some reworking of lethal/excess damage plus a test

* updated damage marking to handle planeswalkers

* updated implementation of Phyrexian Unlife

* updated implementation of Everlasting Torment

* added some more excess damage tests

* small change to wither check
2021-02-22 17:11:24 -05:00
Evan Kranzler
a6255402e3 updated language for various user choices 2021-02-15 10:19:43 -05:00
Oleg Agafonov
2d96d36ec8 AsThough effects improves and fixes:
* AsThough: added documentation about code usage and restrictions;
* AsThough: added additional checks for correct usage;
* AsThough: simplified some code;
* PlayFromNotOwnHandZoneTargetEffect - added permanents support as targets;
* Release to the Wind - fixed that it can't cast exiled cards (#7415, #7416);
* Test framework: fixed that checkExileCount checking card's owner;
* GUI: fixed typo in Trample card icons;
2021-01-31 22:32:23 +04:00
Oleg Agafonov
a1da5ef437 * GUI: new reworked GUI and card render engine, card icons and dozens of other fixes (see full list in related PR); 2021-01-30 16:38:55 +04:00
Oleg Agafonov
35f5a8257b Refactor: replaced sourceId by source and introduced source param in some methods (part 2); 2020-12-13 02:01:49 +04:00
Oleg Agafonov
db239a1055 Refactor: replaced sourceId by source and introduced source param in some methods; 2020-12-12 20:23:19 +04:00
Evan Kranzler
042376d146 replaced hacky fix with a better one 2020-09-29 22:44:38 -04:00
Evan Kranzler
827ffb5fb2 changed how effects are applied for triggered abilities, added test (fixes #7083) 2020-09-29 18:55:51 -04:00
Oleg Agafonov
cf5b474c29 Fixed NPE on playersList usage 2020-08-25 23:41:41 +04:00
Oleg Agafonov
6fa4c0b8f2 Fixed NPE on playerList.getNext usage 2020-08-25 23:38:51 +04:00
Oleg Agafonov
adbe84c540 Improved freeze checks and canRespond/isInGame usage 2020-07-01 13:48:22 +04:00
LevelX2
1e36b39434 - Reworked SourceOnBattlefieldControlUnchangedCondition checking now the LOST_CONTROL event which solves the problem with the old code to not be able to detect all controller changes of layered changeController effects when applied later.
- Simplified and fixed some problems of the handling of the "Until end of your next turn" duration.
- Fixed that some continous effects changed controller but shouldn't dependant from their duration type. Controller chnage will now done duration type dependant.
  (that change fixes #6581 in a more general way undoing the effect specific changes of 2e8ece1dbd).
2020-06-10 22:28:23 +02:00
jeffwadsworth
84ec743b07 - Fixed #6599 #6405 #4999 #4270 2020-06-08 17:05:51 -05:00
Oleg Agafonov
8af43dc13a Ability refactor: new code to search abilities in cards and permanents; 2020-05-28 22:34:27 +04:00
htrajan
1dc305f329 -setStrictChooseMode and assertAllCommandsUsed in every test
-store filter info in GameState
-put instead of putIfAbsent
2020-04-16 19:21:54 -07:00