forked from External/mage
images: fixed miss images for double faced tokens like Incubator/Phyrexian (closes #11535);
This commit is contained in:
parent
725a27d6ad
commit
d5b582c1b3
2 changed files with 64 additions and 1 deletions
|
|
@ -1,6 +1,7 @@
|
|||
package org.mage.test.serverside;
|
||||
|
||||
import mage.MageObject;
|
||||
import mage.MageObjectImpl;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.costs.mana.ManaCostsImpl;
|
||||
|
|
@ -267,7 +268,7 @@ public class TokenImagesTest extends CardTestPlayerBase {
|
|||
.filter(card -> card instanceof PermanentToken)
|
||||
.sorted(Comparator.comparing(Card::getExpansionSetCode))
|
||||
.map(card -> (PermanentToken) card)
|
||||
.map(perm -> perm.getToken().getImageNumber())
|
||||
.map(MageObjectImpl::getImageNumber)
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
GameView gameView = new GameView(currentGame.getState(), currentGame, playerA.getId(), null);
|
||||
|
|
@ -610,4 +611,43 @@ public class TokenImagesTest extends CardTestPlayerBase {
|
|||
|
||||
assert_SacredCat(3 + 5 + 1, "AKH=3", "AKR=5", "MB1=1");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test_Abilities_Incubator_MustTransformWithSameSettings() {
|
||||
// bug with miss image data in tranformed incubator token: https://github.com/magefree/mage/issues/11535
|
||||
|
||||
// make sure random images take all 3 diff images
|
||||
int needIncubatorTokens = 30;
|
||||
int needPhyrexianTokens = 30 / 2;
|
||||
|
||||
// When Sculpted Perfection enters the battlefield, incubate 2. (Create an Incubator token with two +1/+1
|
||||
// counters on it and “{2}: Transform this artifact.” It transforms into a 0/0 Phyrexian artifact creature.)
|
||||
prepareCards_Inner(Zone.HAND, "Sculpted Perfection", 0, "MOM=" + needIncubatorTokens); // {2}{W}{B}
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Plains", 3 * needIncubatorTokens);
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Swamp", 1 * needIncubatorTokens);
|
||||
//
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Plains", 2 * needIncubatorTokens); // for transform
|
||||
|
||||
// prepare incubator tokens
|
||||
activate_Inner(needIncubatorTokens, "Cast Sculpted Perfection");
|
||||
|
||||
// transform tokens to Phyrexian
|
||||
activate_Inner(needPhyrexianTokens, "{2}: Transform");
|
||||
|
||||
|
||||
setStrictChooseMode(true);
|
||||
setStopAt(1, PhaseStep.BEGIN_COMBAT);
|
||||
execute();
|
||||
|
||||
// same set
|
||||
assert_Inner("Sculpted Perfection", 0, 0, needIncubatorTokens,
|
||||
"Incubator Token", needPhyrexianTokens, false, "MOM=" + needPhyrexianTokens);
|
||||
assert_Inner("Sculpted Perfection", 0, 0, needIncubatorTokens,
|
||||
"Phyrexian Token", needPhyrexianTokens, false, "MOM=" + needPhyrexianTokens);
|
||||
|
||||
// MOM-Incubator has 1 image (number is 0)
|
||||
assert_TokenImageNumber("Incubator Token", Arrays.asList(0));
|
||||
// MOM-Phyrexian has 3 images
|
||||
assert_TokenImageNumber("Phyrexian Token", Arrays.asList(1, 2, 3));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -279,10 +279,17 @@ public abstract class TokenImpl extends MageObjectImpl implements Token {
|
|||
}
|
||||
|
||||
// choose token's set code due source
|
||||
// front side
|
||||
TokenInfo tokenInfo = TokenImpl.generateTokenInfo((TokenImpl) token, game, source == null ? null : source.getSourceId());
|
||||
token.setExpansionSetCode(tokenInfo.getSetCode());
|
||||
//token.setCardNumber(""); // if token from a card then don't change a card number
|
||||
token.setImageNumber(tokenInfo.getImageNumber());
|
||||
if (token.getBackFace() != null) {
|
||||
// back side
|
||||
tokenInfo = TokenImpl.generateTokenInfo((TokenImpl) token.getBackFace(), game, source == null ? null : source.getSourceId());
|
||||
token.getBackFace().setExpansionSetCode(tokenInfo.getSetCode());
|
||||
token.getBackFace().setImageNumber(tokenInfo.getImageNumber());
|
||||
}
|
||||
|
||||
List<Permanent> needTokens = new ArrayList<>();
|
||||
List<Permanent> allowedTokens = new ArrayList<>();
|
||||
|
|
@ -484,6 +491,22 @@ public abstract class TokenImpl extends MageObjectImpl implements Token {
|
|||
return this.entersTransformed && this.backFace != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setExpansionSetCode(String expansionSetCode) {
|
||||
super.setExpansionSetCode(expansionSetCode);
|
||||
|
||||
// backface can have diff images (example: Incubator/Phyrexian in MOM set)
|
||||
// so it must be setup/copied manually
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setImageNumber(Integer imageNumber) {
|
||||
super.setImageNumber(imageNumber);
|
||||
|
||||
// backface can have diff images (example: Incubator/Phyrexian in MOM set)
|
||||
// so it must be setup/copied manually
|
||||
}
|
||||
|
||||
public static TokenImpl createTokenByClassName(String fullClassName) {
|
||||
try {
|
||||
Class<?> c = Class.forName(fullClassName);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue