Filth giving swampwalk to the wrong player
Just played a game where I had filth in my grave. Opponent reanimated it with a Puppeteer Clique, but killed it off with a Blasphemous Act before it got exiled. This somehow ended up with the creatures of my opponent (the one that reanimated it) having the swampwalk ability, but not my own.
Verified Bugged. Easier steps to reproduce:
- Have Filth in opponent's Graveyard with both players having creatures and swamps
- Cast Reanimate on Filth
- Cast Murder on Filth
Now your creatures have swampwalk, and your opponent's do not.
Filth - (Gatherer) (Scryfall) (EDHREC)
{3}{B} Creature — Incarnation 2/2 Swampwalk (This creature can't be blocked as long as defending player controls a Swamp.) As long as Filth is in your graveyard and you control a Swamp, creatures you control have swampwalk.
Reanimate - (Gatherer) (Scryfall) (EDHREC)
{B} Sorcery Put target creature card from a graveyard onto the battlefield under your control. You lose life equal to its mana value.
Murder - (Gatherer) (Scryfall) (EDHREC)
{1}{B}{B} Instant Destroy target creature.
The problem is more fundamental than that, because GainAbilityControlledEffect is simply using Ability.getControllerId to determine which player is "you". If Ability.getControllerId doesn't work reliably than it's a very deep problem in the rules engine.
No, it shouldn't. Putting a card another player owns onto the battlefield under your control is not the same as having them put the card onto the battlefield and then gaining control of that permanent. The distinction is important in multiplayer games--it affects what happens when a player leaves the game.
Example: Alex casts Bribery, which reads, “Search target opponent’s library for a creature card and put that card onto the battlefield under your control. Then that player shuffles their library,” targeting Bianca. Alex puts Serra Angel onto the battlefield from Bianca’s library. If Bianca leaves the game, Serra Angel also leaves the game. If, instead, Alex leaves the game, Serra Angel is exiled
If reanimate worked the way you think it does, the Serra Angel in this example would stay on the battlefield and revert to its owner's control. But that isn't how it works.