* 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
* [WOC] Implement Misleading Signpost
* moved effect to common file
* added unit test
* added battle to test
* updated effect name, fixed list of defenders
* fix test text
* added text for effect
* fixed target
* made changes as per PR comments
* added unit test for 508.7c
* implements Kharn the Betrayer
* added flavor text
* fixed test
* fixed issue with triggered ability not working
* removed diacritic
* added effect text to test
* fixed several issues as per PR comments
* fixed access
* updated Kharn to use PreventionEffect
* added unit test for control loss via other sources
* split effect into three classes for convenience
* added static filter
* refactored cards using effect
* fixed issues as per PR comments
* changed predicate and fixed text
* added unit test, fixed text issues with Baldin
* set static text
* changed outcome
* added stop to test
* fixs issues as per PR comments
* [WOE] Implement Curse of the Werefox
* apply review
* Fix aura (and equipment?) tokens not checking for protection on target
* fix targetting of reflexive trigger, by creating a custom fight effect.
* fix reflexive ability target.
* Rework adventures to exiles themself after applying other effects
* fix duelist
* finalize all adventures
* apply review
* add card name to error
* fix remaining adventures
* finalize the last adventures.
1a. Make `costs`, `manaCosts`, and `manaCostsToPay` private in `AbilityImpl` with access through getters/setters
1b. fix cost adjuster for imprinted cards affected by the above
2a. Lazy instantiation for rarely used `data` field in `TargetPointerImpl`
3a. Pre-allocate certain array sizes in `Modes` and `CostsImpl`
4a. Make `manaTemplate` private in `BasicManaEffect`, copy when passing outside the class
4b. Don't copy `manaTemplate` in copy constructor since it doesn't change
4c. Add comments explaining copy usage for `manaTemplate`
4d. Remove redundant variable assignment and make fields final
---------
Co-authored-by: xenohedron <xenohedron@users.noreply.github.com>
* Add Smoothed London Mulligan (similar to but weaker than MTGA's)
* Make SmoothedLondonMulligan extend LondonMulligan instead of copying code
* modified to be have no effect within +1/-1 of the expected lands
fixed tests by always putting nonchosen hand on the bottom
* Inherit the primary mulligan logic as well, add comments
* Make drawHand public and part of Mulligan, use it on opening 7
use Card::isLand instead of reimplementing it, remove unused imports
Use standard spacing
* Better account for half-land MDFCs
* Don't count TDFCs as half-lands
* Remove "crossover_point" calculation to make algorithm clearer
* Genericize the tests, undo changed access that's no longer needed, unbox bool
* Use standard case in function naming
* Add Override
* Add mulligan type to TableView info, add tourneyMatchOptions local variable
* Clean original values transmitted with CardView.originalObject
* Move RateCard to mage.Common, support cardView as argument.
* Clean PermanentView constructor for TestCardRenderDialog