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
* Development Liberated Livestock
* Liberated Livestock version 1 - choose from hand or graveyard
* Liberated Livestock ready to merge into main
* Worked out some kinks and added author text
* Implemented changes suggested by xenohedron
* Removed game.pause / unpause
* adjust and cleanup
related to #11213, eliminate manual zone choice
align tests to new functionality
---------
Co-authored-by: xenohedron <xenohedron@users.noreply.github.com>
* adjust ExileThenReturnTargetEffect
* initial rework ExileReturnBattlefieldNextEndStepTargetEffect
(test coverage provided by CloudshiftTest)
* refactor some more cards
* refactor more straightforward cards
* add params and more refactoring
* text fixes
* maintain order in set
* fix Lae'zel's Acrobatics and add test
* 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
* new feature: Emblem Cards
Allows match/tournament creator to specify cards to give each player
emblem versions of (or just the starting player for symmetric effects).
Technical details:
- new UI for specifying emblem cards (.dck files)
- available for all match/tournament types
- new class `EmblemOfCard`
- new method `copyWithZone` on `AbilityImpl` (used to make abilities
work from command zone)
- new fields on `GameOptions` and `MatchOptions` for emblem cards
- emblems are granted after mulligans, before first turn (technically
after Planechase starting plane creation)
* fixes
* defaults for emblem cards in match options (fixes quick game buttons)
* minor fixes
* use DeckCardInfo instead of Card for emblem cards options
* restore accessible parent properties
* fix images for card emblems
* look up cards in a way that preserves which art
* fix typos; make Emblem.sourceObject protected
* add descriptions to planechase and emblem cards
* fixes
* add some unit tests for known working cards
* fix author name
* add explanation comment
* fix up tests
* copyWithZone: no longer modifies zone for singleton abilities
* directly check for MageSingleton
* Combine casting Transformed into a shared SpellAbility, apply transform effect before spell is cast
* Minor cleanup
* Use effect.apply() rather than game.applyEffects()
* Add test with Maskwood Nexus