master #66

Open
Failure wants to merge 0 commits from External:master into master
Owner
No description provided.
* Refactor AutumnTailKitsuneSage to use CreatureToken

* Refactor AzamukiTreacheryIncarnate to use CreatureToken

* Refactor DokaiWeaverofLife to use CreatureToken

* Refactor GokaTheUnjust to use CreatureToken

* Refactor IchigaWhoTopplesOaks to use CreatureToken

* Refactor JarakuTheInterloper to use CreatureToken

* Refactor KenzoTheHardhearted to use CreatureToken

* Refactor KaisoMemoryOfLoyaltyToken to use CreatureToken

* Refactor NighteyesTheDesecratorToken to use CreatureToken

* Refactor Scarmaker to use CreatureToken

* Refactor ShidakoBroodmistress to use CreatureToken

* Refactor TomoyaTheRevealer to use CreatureToken

* Refactor StabwhiskerTheOdious to use CreatureToken
* fix TestPlayer not supporting complex filters during graveyard cards targetting

* fix incorrect player UUID

* fix a couple other of filtering not provided the source/playerID
* [SOS] Update Choreographed Sparks comment

* [ECL] Update Spry and Mighty Oracle text
Not working since this was trying to add counters to ability target,
when we already have a reference to the entering permanent and can just
add counters directly to it.

Fixes https://github.com/magefree/mage/issues/14764

Co-authored-by: matoro <matoro@users.noreply.github.com>
Rework OverloadAbility
* Refactor Serpentine Ambush to use common BecomesCreatureTargetEffect

* [SOS] Implement Fractalize
* [SOS] Implement Wildgrowth Archaic

* Add ColorsOfManaSpentToCastCount.countColors(Mana) static helper and use it in WildgrowthArchaic
My understanding of this is: the reason why TargetCard does not
support the battlefield as a zone is because cards don't exist on the
battlefield, permanents do.  So we must instead choose permanents rather
than cards.  This will change the interface to selecting target
permanents on the battlefield for ordering, rather than the card
selection popup.  It also skips asking about tokens, but this could be
changed.

Fixes https://github.com/magefree/mage/issues/14351

Co-authored-by: matoro <matoro@users.noreply.github.com>
* [minor] Make color identity violation messaging clearer

* Tweak to show the nice mana symbols when deck building violations are present
Killian, Decisive Mentor should trigger for anyone's creatures that meet the filter of being enchanted by an aura you control
* [SLD] Sync So Salty SLD

* [SLD] Slime Against Humanity reprints
1 passing; 1 failing as Casualty is not properly implemented.
* Set fromZone for copied spells to stack

Spells on the stack seem to use a separate `fromZone` member variable to
track where they were cast from, independent of the zone of the card or
the object.  This should be unconditionally set to the stack for copied
spells rather than inheriting the zone of the parent spell.

This sets it in the constructor rather than `Spell.setZone()` to keep
the field `final`.

* Check source zone of spells rather than copy status to check if cast

Adds a clearer `Spell.wasCast()` to check if a spell was cast rather
than checking `!StackObject.isCopy()`.

---------

Co-authored-by: matoro <matoro@users.noreply.github.com>
Omniscience's cast-for-free effect should not apply to casts from other
players' hands when allowed via e.g. Sen Triplets.

Co-authored-by: matoro <matoro@users.noreply.github.com>
It seems that `playManaAbility()` is called at a different time (earier)
than `playAbility()` and thus its events (`MANA_ADDED` etc) get the new
ID in them and not the old one, whereas this is not the case for events
fired by playing non-mana abilities.  Since no stack object is created
for mana abilities, generating a new ID should not be necessary.

Fixes: b814837eb8
See: https://github.com/magefree/mage/pull/14382
See: https://github.com/magefree/mage/issues/14381

Co-authored-by: matoro <matoro@users.noreply.github.com>
* [PMEI] Add 2026 Counterspell promo

* [PSPL] Add reprints

* [SCH] Add reprints
Correct Zaffai and the Tempests to restrict to casting spells from the controller's hand, and not any hand
* [minor] Remove duplicate/redundant assignment

* [SOS] Implement Geometer's Arthropod

* Reimplement part of the card on PR feedback
* WIP

* [FRA] Implement Stingcaster Mage

* [FRA] Additional printings

* Scryfall has FRA now
* [HOC] Start set and reprints

* Add to mtg-sets-data

---------

Co-authored-by: Evan Kranzler <theelk801@gmail.com>
* [SOC] Implement Ceaseless Conflict

* PR comment, missing game.processAction() prior to creating tokens
* [fix] Depthshaker Titan not sacrificing artifacts due to objects eluding filter at end-step time

* Clean up unused withCopyToPointer function

* Clean up copyToPointer dangling field
* Update DoubleCountersTargetEffect to iterate over multiple targets if present
* [SOC] Implement Lattice Library

* [SOC] Implement Nev, the Practical Dean

* [SOC] Implement Owlin Spiralmancer

* [SOC] Implement Zimone, Infinite Analyst

* Register cards in set

* PR comments to take zone change checks into consideration

* Introduce common Watcher for first X spell, and migrate to using it
* SLD MagicCon reprints

* [SLD] Goblin Storm

* [SLD] Goblin Storm token
This is backwards, the Opus condition is true if 5 or more mana was
spent, in which case the extra effect should occur, not the main effect.
Spot checked several cards with Opus and all of them were using it this
way.

Co-authored-by: matoro <matoro@users.noreply.github.com>
* simplify Well of Knowledge implementation, add test

* add test for Lethal Vapors, remove activatorId from SkipNextTurnSourceEffect

* remove activatorId from Lightning Storm

* add test for Volrath's Curse, adjust it and Lost in Thought to not use activatorId

* remove activatorId entirely

* set controller id when activating special action

* simplify implementation again

* remove wrong param from test

* simplify Well of Knowledge test

* apply fix to specialManaPayment as well
Linked to https://github.com/magefree/mage/issues/12206

Heavily based off https://github.com/magefree/mage/pull/12422 especially
the root cause of the engine change, so I've credited the original
submitter in this commit.

Co-authored-by: grimreap124 <19590931+grimreap124@users.noreply.github.com>
Adds a little hint showing what value for number of colors of mana spent
is used for converge abilities.

Fixes https://github.com/magefree/mage/issues/14758

Co-authored-by: matoro <matoro@users.noreply.github.com>
* Refactor to consistent cost reduction for graveyard instant/sorceries

* [SOC] Implement Furygale Flocking
* [SLD] Sync reprints, 11/05/2026

* [PMEI] Sync and correct collector numbers, 11/05/2026

* [PW26] Sync reprints, 11/05/2026
Was using GainAbilityAllEffect when it should be using GainAbilityControlledEffect.
* [PIP] Implement Aradesh, the Founder

* [fix] Correct printings for Harold and Bob, First Numens
* new standard method for finding enchanted object

* fix #9839

* fix other common classes similarly

* fix other custom classes similarly

---------

Co-authored-by: xenohedron <12538125+xenohedron@users.noreply.github.com>
* store info about blocked creatures for LKI to reference

* rework Gomazoa, add test

* fix Observed Stasis

* remove redundant method call

---------

Co-authored-by: xenohedron <12538125+xenohedron@users.noreply.github.com>
https://magic.wizards.com/en/news/announcements/banned-and-restricted-may-18-2026
Nexus of Becoming creates permanents out of cards that were in your hand, so it needs to be aware that DFCs are treated as their leftHalfCard (front face).

Fixes #14904
If using `VALUE_KEY_ENTER_TRANSFORMED` to return a card transformed,
then it needs to be passed the front side of the card rather than the
main card, to let the `ZonesHandler` logic take care of transforming it.

Fixes https://github.com/magefree/mage/issues/14903

Co-authored-by: matoro <matoro@users.noreply.github.com>
These cards added a new `ReturnExiledCardToHandEffect` but it doesn't
work because all of the relevant effects are leaves-battlefield triggers
which means the ZCC is plus one when they go off, so they don't find the
exile zone.  There's already an effect that has conditional logic for
this in `ReturnFromExileForSourceEffect`, so just reuse that.

Fixes https://github.com/magefree/mage/issues/14328

Co-authored-by: matoro <matoro@users.noreply.github.com>
Fixes https://github.com/magefree/mage/issues/14805
The default option for a player is to fail fast in unit tests, even
though this is only relevant for `TestPlayer`. The check was asserting
all three and thus never succeeding.  It should instead check that it's
not a test player OR that fail fast is disabled.  This also brings back
the old behavior of allowing the game to proceed up to 15 errors, but at
least this allows us to see tracebacks in crash reports again.

If possible, I think we should consolidate and/or close all of the
reports with hidden crash traces as they are virtually un-actionable.

Co-authored-by: matoro <matoro@users.noreply.github.com>
The TDFC transform flag should only last for one zone change, so it
needs to include the ZCC in the string key in addition to the card ID.

Co-authored-by: matoro <matoro@users.noreply.github.com>
AI player is not triggering ward when it targets opponent creatures
because it was unconditionally using `Target.add()` when choosing
targets instead of `Target.addTarget()` in the situations when it should
be targeting.

Co-authored-by: matoro <matoro@users.noreply.github.com>
* add method to check if permanent is a token

* update some cards checking PermanentToken
* fix method to allow wildcard subtypes

* add method for finding all cards from permanent left battlefield
* new player method for putting multiple cards nth from the top of library

* rework God Eternal triggered ability
* add test for Parallax Nexus

* fix Parallax Nexus

closes #13818, closes #13345

* merge ReturnFromExileEffect to ReturnFromExileForSourceEffect
closes #11677, closes #12055, closes #11683
* update DiesSourceTriggeredAbility for setting target pointer to cards left battlefield

* update dies return to hand

* fix locust scarab scorpion gods

* fix dies put on library

* fix return source to battlefield when dies

* update DiesCreatureTriggeredAbility

* ivory gargoyle, molten firebird

* presumed dead

* vincent valentine

* ashcloud phoenix

* Etrata the Silencer

* rework Mimic Vat

* Nightmare Shepherd

* rework dies attached trigger returns

* fix Ashnod's Intervention

* rework more dies attached trigger returns

* fix test checking wrong behavior (but was passing before due to unrelated hack)

* dies one or more

* a few more card fixes
- refactor: improved role assignment usage;
- for each card type targets - fixed that human and AI were able to choose any cards amount (example: Atraxa, Grand Unifier, #13964);
- Myriad Landscape - fixed that it allow to select any land types (close #14132);
Co-authored-by: matoro <matoro@users.noreply.github.com>
Two separate issues here:

* `TargetCardInHand` is limited to card in the hand of the ability's
  controller, need to use generic `TargetCard(Zone.HAND)` instead
* Was passing the wrong variable to `controller.choose()`, reusing the
  old one from the reveal choice

Co-authored-by: matoro <matoro@users.noreply.github.com>
Co-authored-by: matoro <matoro@users.noreply.github.com>
Co-authored-by: matoro <matoro@users.noreply.github.com>
Co-authored-by: Grath <1895280+Grath@users.noreply.github.com>
The current code looks specifically for `MageIdentifier.Default` to
prevent built-in alternate casting costs like Overload, but some cards
like Bolas's Citadel use their own specific `MageIdentifier` enums.
Prohibit all alternate casting costs when any of these is in effect.

Co-authored-by: matoro <matoro@users.noreply.github.com>
This centralizes into a pair of common effects the various cards with
all-zone attribute modification effects e.g. Arcane Adaptation,
Biotransference, Conspiracy, Leyline of Transformation, and Maskwood
Nexus.  A few others will continue to work with no chnges.  Specifically
I want to make sure that the code breaking objects into parts and
applying individually to each part is always reused for any future
implementations, so I've made the constructor fairly open-ended, taking
an arbitrary modifier lambda.  All of these cards can now correctly take
advantage of the shared code rather than having to implement it
individually.

Fixes https://github.com/magefree/mage/issues/14817

Co-authored-by: matoro <matoro@users.noreply.github.com>
Still is incorrect for cards that are both instant and sorcery. A custom condition is likely needed to handle that?

fix most of #14959
Co-authored-by: xenohedron <12538125+xenohedron@users.noreply.github.com>
* [YSOS] Add set and implement Grave Studies

* [YSOS] Implement Glorifying Verse

* [YSOS] Implement Corpseweaver Prodigy

* [YSOS] Implement Interdisciplinary Studies
* [LCC] Add reprints

* Fix rarities
* Finish Room implementations.

Implement Ghostly Dancer; fix logic error in Ghostly Keybearer if the room is fully locked; implement LockOrUnlockRoomTargetEffect.

* Clean up todo
part of #12428, related to #13774, closes #12162
* test suite for Mutate

* enable mutate cards

* add CREATURE_MUTATED event

* add SpellAbilityCastMode.MUTATE

* new implementation of Mutate

* implement [IKO] Brokkos, Apex of Forever

* add client support for mutate view

* fix mutate view in gui
Migrates `TargetCardWithDifferentNameInLibrary` to use `possibleTargets`
instead of `canTarget`.  Thanks to 06ba57a for pointing me at this
solution.  The human player already uses `possibleTargets`, so in order
to have the unit tests pick up on this change we also need to switch the
test player over to it.  It would also seem that the TODO to add alias
support to all `addTarget` variants has already been completed as it
worked correctly for me.

Co-authored-by: matoro <matoro@users.noreply.github.com>
* Add a test for Doctor Doom to ensure passing a filter into DiscardOneOrMoreCardsTriggeredAbility works
Stuff like Geometer's Arthropod tries to read the value of X out of the
costs tag, so set this in addition to the mana value on the stack when
paying an X-cost spell with alternative cost.

Co-authored-by: matoro <matoro@users.noreply.github.com>
* Sync scryfall data to mtg-cards-data.txt

Co-Authored-By: muz <git@mustaqila.li>

* Accept or prompt for space-seperated set codes

* Update script files, and ignore stuff that should never be committed as an artefact of running this script

---------

Co-authored-by: jmlundeen <jmlundee@yahoo.com>
* [MSH] Implement Mister Fantastic, Reed Richards

* PR comment. Switch to EntersBattlefieldOneOrMoreTriggeredAbility and …
* [fix] Correct Caretaker's Talent to semantically use the correct trig…
* dev: sync daily MSH spoilers
* [MSH] Implement Human Torch, Johnny Storm
Co-authored-by: Grath <1895280+Grath@users.noreply.github.com>
Co-authored-by: Grath <1895280+Grath@users.noreply.github.com>
Co-authored-by: Grath <1895280+Grath@users.noreply.github.com>
Co-authored-by: Grath <1895280+Grath@users.noreply.github.com>
Co-authored-by: Grath <1895280+Grath@users.noreply.github.com>
Co-authored-by: Grath <1895280+Grath@users.noreply.github.com>
Co-authored-by: Grath <1895280+Grath@users.noreply.github.com>
Co-authored-by: Grath <1895280+Grath@users.noreply.github.com>
Co-authored-by: Grath <1895280+Grath@users.noreply.github.com>
Co-authored-by: Grath <1895280+Grath@users.noreply.github.com>
Co-authored-by: Grath <1895280+Grath@users.noreply.github.com>
Co-authored-by: Grath <1895280+Grath@users.noreply.github.com>
Co-authored-by: Grath <1895280+Grath@users.noreply.github.com>
Co-authored-by: Grath <1895280+Grath@users.noreply.github.com>
Co-authored-by: Jmlundeen <98545818+Jmlundeen@users.noreply.github.com>
* [MSH] Implement Construct A Cosmic Cube

* Refactor Plan cards to use a common Ability class for their counter threshold flow

---------

Co-authored-by: Jmlundeen <98545818+Jmlundeen@users.noreply.github.com>
More spoilers for MSH
- fixed wrong tests folder for deck imports;
- fixed wrong card numbers processing in deck's layout (with * and + symbols, see #14976, close #7305, close #12846);
- improved error message and added more details on wrong deck for GUI;
* [SLD] Implement Hammerhead, Maggia Boss

* Add MSC printing
* [SLD] Implement Undead Hand Ninja

* Add MSC printing
* [MSH] Implement Frozen in Ice

* Merge remote-tracking branch 'XMage/master' into msh_frozen_in_ice
fix HYDRA Assault Robot target

fix Vision of Love type
* [SLD] Implement Tippy-Toe, Terrific Partner

* Add MSC printing
* Create SourceEnteredOrControlsBasicLandCondition

* [MSH] Implement Dark Fortress

* [MSH] Implement Gathering Place

* [MSH] Implement Gleaming Bastion

* [MSH] Implement Hidden Lair

* [MSH] Implement Training Compound
* Add HOB set

* [HOB] Implement An Unexpected Party

* [HOB] Implement My Precious

* [HOB] Implement Tom, Bert, and William

* [HOB] Implement Smaug the Magnificent

* Correct date for set

* [HOB] Reprints, extra printings, and scryfall info is up

* [HOB] Implement Bilbo, Luckwearer

* [HOB] Add spoiled tokens

* [HOB] Bilbo, Thief in the Night

* [HOB] Implement The Arkenstone

* PR comments

* Correct casting cost for The Arkenstone adventure

* [PW26] Add promo reprints from HOB
* [MSH] Implement Ant-Man, Colony Commander

* Switch to a reflexive ability
* [MSH] Implement Killmonger, Scourge of Wakanda

* Switch to a reflexive ability
* [dev] Slim down the issue tracking template. Github has a 65536 character limit and some Commander sets are breaching that now.

* Add a little set implementation burndown stats tracker
* [MSC] Resync implemented and reprinted cards

* [MSC] Implement Absorbing Man and Titania
* [fix] Correct Urza, Powerstone Prodigy to correctly trigger on discard effects

* [fix] Correct Mishra, Excavation Prodigy to correctly trigger on discard effects
* [MSC] Resync implemented and reprinted cards

* [temp] Declare Hero scene cards in mtg-cards-data to make gen-card usable

* [MSC] Implement Iron Man, Futurist Paragon

* [MSC] Implement Hulk, Always Angry

* [MSC] Implement Thor, Guardian of Midgard

* [MSC] Implement Black Widow, Intel Expert

* [MSC] Implement Captain America, Unbowed

* [MSC] Implement Hawkeye, Trick Shot

* Clean up temp card entries

* PR comments: Black Widow, Intel Expert

* PR comments: Hawkeye, Trick Shot

* PR comments

* PR comments

* [MSC] Add set information
* [MSH] Implement The Astonishing Ant-Man

* Update MarvelSuperHeroes.java
* [MSH] Implement Spider-Woman, Secret Agent

* Update MarvelSuperHeroes.java
Co-authored-by: Riley Jones <riajones88@gmail.com>
Fixes https://github.com/magefree/mage/issues/15409

Co-authored-by: matoro <matoro@users.noreply.github.com>
* [dev] Remove legacy script that's no longer needed

* [minor] Update project info for card counts

* [minor] Update badges to link to GHA build and correct typo
[MSH] Implement Thanos, the Mad Titan (#15434)
Some checks failed
Java CI with Maven / build (pull_request) Has been cancelled
958a090a15
Some checks failed
Java CI with Maven / build (pull_request) Has been cancelled
This pull request has changes conflicting with the target branch.
  • Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSupportCards.java
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u master:External-master
git switch External-master

Merge

Merge the changes and update on Forgejo.

Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.

git switch master
git merge --no-ff External-master
git switch External-master
git rebase master
git switch master
git merge --ff-only External-master
git switch External-master
git rebase master
git switch master
git merge --no-ff External-master
git switch master
git merge --squash External-master
git switch master
git merge --ff-only External-master
git switch master
git merge External-master
git push origin master
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Failure/foul-magics!66
No description provided.