* Implement Costs Tag Map system
* Use Costs Tag Map system to store X value for spells, abilities, and resolving permanents
* Store Bestow without target's tags
Change functions for getting tags and storing the tags of a new permanent
* Create and use deep copy function in CardUtil, add Copyable<T> to many classes
* Fix Hall Of the Bandit Lord infinite loop
* Add additional comments
* Don't store null/empty costs tags maps (saves memory)
* Fix two more Watchers with Ability variable
* Add check for exact collection types during deep copy
* Use generics instead of pure type erasure during deep copy
* convert more code to using deep copy helper, everything use Object copier, add EnumMap
* fix documentation
* Don't need the separate null checks anymore (handled in deepCopyObject)
* Minor cleanup
* Fix Subability copy bug (fix#10526 )
* Cards which copy abilities of other cards should not copy subabilities.
* Enable previously-failing tests
* Find more addAbility that should be done without subabilities
* Add documentation to addAbility function
* Add warning about not using basic addAbility when copying from a source
* Invert withSubabilities to fromExistingObject
- fixed broken cards with once per turn choose (example: Galadriel, Light of Valinor, closes#11362);
- fixed cheat to skip required mode by cancel button (example: Black Market Connections, closes#11149, closes#10611);
- fixed empty modes list if nothing available to choose;
- improved compatibility with max modes and other modification effects;
- fixed that non-valid modes can be selected in some use cases;
* Lynde trigger references objects
* Changed triggered ability auto-order to care about targets
* Copy card test
* When a copy effect comes in as a copy of an aura,
it checks if it's already attached before asking player to attach
* add comments and null check per review
---------
Co-authored-by: xenohedron <xenohedron@users.noreply.github.com>
* fixed code coverage data lost on failed tests;
* fixed code coverage report duplication and improved performance;
* fixed that sonar analyser can't see code coverage for some modules;
* added new aggregation module: Mage.Reports (used for code coverage report generation);
* reorganized pom and added additional instructions for jacoco and sonar usage;
* [LCI] Implement Spring-Loaded Sawblades / Bladewheel Chariot
* [LCI] Implement Sunbird Standard / Sunbird Effigy
* card filter needs to have an owner predicate
* [LCI] Implement Throne of the Grim Captain / The Grim Captain
* make default constructor for craft with artifact
* dedupe some code
* refactor constructors for simplicity
* add currently failing test
* Adds two tests on interactions between card-changing effects and Transform. One works, the other currently fails.
* add check that moonmist flip worked
Update `StackAbility::createSingleCopy` to properly set controller
Includes test coverage
---------
Co-authored-by: Rowan Gudmundsson <rowan.gudmundsson@oddball.io>
Co-authored-by: xenohedron <xenohedron@users.noreply.github.com>
* [MAT] Fix Feast of the Victorious Dead
* Fix Awaken the Maelstrom allowing no distribution in a case the player should distribute
* fix more cards distributing counters without targetting
Prototype is a SpellAbilityType, for which alternate costs are permitted. It has a continuous effect that applies on the battlefield as well as a method to modify the spell on the stack. Permanents have an isPrototyped flag that copy effects can check explicitly (same brittle method as transformed permanents use; reworking copy effects to streamline them is a separate scope).
Many test cases have been added to confirm functionality (thanks to Zerris for additional test suggestions).
---------
Co-authored-by: Susucre <34709007+Susucre@users.noreply.github.com>
Co-authored-by: Evan Kranzler <theelk801@gmail.com>
Co-authored-by: xenohedron <xenohedron@users.noreply.github.com>
* simplify LoyaltyAbility constructors
* remove unused constructors in ActivatedAbilityImpl
* cleanup
* remove null rule setting
* another unused constructor
* fix escape ability reminder text
* escape text adjustment
* simplify Trigons, remove Costs constructor
* rework Villainous Ogre, remove another class and constructor
* fix test using wrong text for trigon ability