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>
* 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
* [WOE] Implement Sharae of Numbing Depths
* change EventType.TAPPED's playerId to be the source's controller
There seems to have been no usage of the previous playerId, and it can be retrieve from the target anyway.
* apply review -- cleaner and check for creatures.
* Fix Ring-bearer choosing & add some GUI + logs
* use a ring svg in a separate gold panel
* use a fontawesome svg
* add a couple null checks, group icon with commander
* rework rinbearer logic according to review
* fix typo in game log
* small fixes
- fixed that copy effect doesn't restore original image after effect's end;
- removed outdated availableImageSetCodes (all images auto-selected from tokens database now, related to #10139);
- refactor command objects to use CommandObjectImpl;
- refactor planes/emblems/etc objects to use MageObjectImpl, added copyable support;
- refactor another game objects to remove some duplicated fields;
* remove skip
* initial implementation of the ring mechanic
* some changes
* rework ring-bearer choosing
* [LTR] Implement Call of the Ring
* update ring-bearer condition
- added tokens support in test render dialog;
- improved PT drawing;
- fixed broken second side switch button (related to #10231);
- fixed miss override in TokenImpl (all override with backFace must be removed, see todo);
* remove incubate skip
* initial implementation of DFC tokens
* separate incubator back face to separate class
* small refactor to token copy function
* token copies now have back faces as well
* effects which modify token copies now correctly apply to both faces
* add skip for exception
* tokens now enter transformed correctly
* [MOC] remove skip for incubate
* fix verify failure
* 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
- removed outdated code;
- updated logic to choose a set code for a tokens in different use cases (related to #10150);
- added many tests for client and server token's data (related to #10139);
- prepare for tokens database (related #6955);
* 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
* [NEO] Implemented Tamiyo, Compleated Sage
* replaced PhyrexianManaCost calls with ManaCostsImpl calls
* updated phyrexian mana implementation
* added phyrexian hybrid symbol support
* updated starting loyalty implementation for planeswalkers
* change compleated to singleton
* implemented Compleated ability
* added some missing loyalty setters
* changed when loyalty is added to a walker to fix bugs
* slight change to some tests to fix them from failing
* fixed token issue
* adding initial day/night support in game state
* remove card exclusion for testing
* added functional implementation to abilities from main branch
* functionally implemented NightCondition
* updated DayNightHint
* added support for nightbound entering transformed at night
* [MID] Implemented Unnatural Moonrise
* [MID] Implemented The Celestus
* added some docs
* changed access for state day/night methods
* added transformation to day/night switch
* re-added unfinished filter, removed day/night cards
* fixed some errors with transforming
* added hints to all day/night cards
* added transformation prevention plus a test
* added Immerwolf test
* [MID] Implemented Tovolar, Dire Overlord / Tovolar, The Midnight Scourge
* refactored some cards to not use isTransformable
* removed transformable parameter
* simplified some transform code
* fixed null pointer exception
* removed unnecessary canTransform method
* fixed a small error
* reworked implementation of rule 701.28f
* small change in transform logic
* fixed failiing test
* fixed verify failure
* small merge change
* added support for day/night switching based on spells cast
* [MID] Implemented Curse of Leeches / Leeching Lurkers
* moved day/night handling to untap step
* added tests for cards which set day and trigger from a change
* [MID] Implemented Ludevic, Necrogenius / Olag, Ludevic's Hubris
* added support for creatures transforming to match day/night when necessary
* fixed verify failures
* fixed another verify failure
* remove temporary verify skip
* added transform message
* removed unnecessary transform message
* [MID] Implemented Angelic Enforcer / Enduring Angel
* updated DayNightHint with more information
* fixed verify failure
* merge fix
* fixed Startled Awake / Persistent Nightmare / Moonmist interaction
* added another test for Moonmist
* merge fix
* merge fix
* [MID] Implemented Baneblade Scoundrel / Baneclaw Marauder
* merge fix
* [MID] various text fixes
* [MID] a few more text fixes
* Merge fix
* Improved transform game logs (hints, source), fixed day/night logs, fixed miss game param (due code style);
* fixed a test failure
* Merge fix
Co-authored-by: Oleg Agafonov <jaydi85@gmail.com>
* [AFR] Implemented Druid Class
* [AFR] Implemented Wizard Class
* [AFR] Implemented Cleric Class
* [AFR] Implemented Fighter Class
* reworked class ability implementation
* fixed an error with setting class level
* small reworking of class triggers
* added class level hint
* added tests
* small change
* added common class for reminder text
* 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