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>
* no need to specify mana cost, just add cost
* handle all mana costs through addcost method only
* eliminate another constructor
* more constructor cleanup
* 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
* Add Hint to Confront the Unknown
* [WHO] Implement Five Hundred Year Diary
* [WHO] Implement Flatline
* [WHO] Implement Frost Fair Lure Fish
* [WHO] Implement Laser Screwdriver
* [WHO] Implement Sonic Screwdriver
* 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