mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 02:30:08 -08:00
[DSK] Implement Grand Entryway // Elegant Rotunda
This commit is contained in:
parent
a5483496f8
commit
caba72094e
10 changed files with 57 additions and 20 deletions
|
|
@ -27,7 +27,7 @@ public final class BottomlessPoolLockerRoom extends RoomCard {
|
||||||
// Whenever one or more creatures you control deal combat damage to a player, draw a card.
|
// Whenever one or more creatures you control deal combat damage to a player, draw a card.
|
||||||
super(ownerId, setInfo,
|
super(ownerId, setInfo,
|
||||||
new CardType[] { CardType.ENCHANTMENT },
|
new CardType[] { CardType.ENCHANTMENT },
|
||||||
"{U}", "{4}{U}", SpellAbilityType.SPLIT);
|
"{U}", "{4}{U}");
|
||||||
this.subtype.add(SubType.ROOM);
|
this.subtype.add(SubType.ROOM);
|
||||||
|
|
||||||
// Left half ability - "When you unlock this door, return up to one target creature to its owner’s hand."
|
// Left half ability - "When you unlock this door, return up to one target creature to its owner’s hand."
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,6 @@ import mage.abilities.keyword.ConvokeAbility;
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.cards.RoomCard;
|
import mage.cards.RoomCard;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.SpellAbilityType;
|
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.filter.StaticFilters;
|
import mage.filter.StaticFilters;
|
||||||
import mage.filter.common.FilterNonlandCard;
|
import mage.filter.common.FilterNonlandCard;
|
||||||
|
|
@ -30,7 +29,7 @@ public final class DazzlingTheaterPropRoom extends RoomCard {
|
||||||
}
|
}
|
||||||
|
|
||||||
public DazzlingTheaterPropRoom(UUID ownerId, CardSetInfo setInfo) {
|
public DazzlingTheaterPropRoom(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{W}", "{2}{W}", SpellAbilityType.SPLIT);
|
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{W}", "{2}{W}");
|
||||||
this.subtype.add(SubType.ROOM);
|
this.subtype.add(SubType.ROOM);
|
||||||
|
|
||||||
// Dazzling Theater: Creature spells you cast have convoke.
|
// Dazzling Theater: Creature spells you cast have convoke.
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ public final class DollmakersShopPorcelainGallery extends RoomCard {
|
||||||
}
|
}
|
||||||
|
|
||||||
public DollmakersShopPorcelainGallery(UUID ownerId, CardSetInfo setInfo) {
|
public DollmakersShopPorcelainGallery(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}", "{4}{W}{W}", SpellAbilityType.SPLIT);
|
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}", "{4}{W}{W}");
|
||||||
this.subtype.add(SubType.ROOM);
|
this.subtype.add(SubType.ROOM);
|
||||||
|
|
||||||
// Dollmaker's Shop: Whenever one or more non-Toy creatures you control attack a player, create a 1/1 white Toy artifact creature token.
|
// Dollmaker's Shop: Whenever one or more non-Toy creatures you control attack a player, create a 1/1 white Toy artifact creature token.
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,6 @@ import mage.abilities.effects.common.ReturnFromYourGraveyardToBattlefieldAllEffe
|
||||||
import mage.cards.CardSetInfo;
|
import mage.cards.CardSetInfo;
|
||||||
import mage.cards.RoomCard;
|
import mage.cards.RoomCard;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.SpellAbilityType;
|
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.filter.StaticFilters;
|
import mage.filter.StaticFilters;
|
||||||
|
|
||||||
|
|
@ -21,7 +20,7 @@ import java.util.UUID;
|
||||||
public final class FuneralRoomAwakeningHall extends RoomCard {
|
public final class FuneralRoomAwakeningHall extends RoomCard {
|
||||||
|
|
||||||
public FuneralRoomAwakeningHall(UUID ownerId, CardSetInfo setInfo) {
|
public FuneralRoomAwakeningHall(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{B}", "{6}{B}{B}", SpellAbilityType.SPLIT);
|
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{B}", "{6}{B}{B}");
|
||||||
this.subtype.add(SubType.ROOM);
|
this.subtype.add(SubType.ROOM);
|
||||||
|
|
||||||
// Funeral Room: Whenever a creature you control dies, each opponent loses 1 life and you gain 1 life.
|
// Funeral Room: Whenever a creature you control dies, each opponent loses 1 life and you gain 1 life.
|
||||||
|
|
|
||||||
42
Mage.Sets/src/mage/cards/g/GrandEntrywayElegantRotunda.java
Normal file
42
Mage.Sets/src/mage/cards/g/GrandEntrywayElegantRotunda.java
Normal file
|
|
@ -0,0 +1,42 @@
|
||||||
|
package mage.cards.g;
|
||||||
|
|
||||||
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.common.UnlockThisDoorTriggeredAbility;
|
||||||
|
import mage.abilities.effects.common.CreateTokenEffect;
|
||||||
|
import mage.abilities.effects.common.counter.AddCountersTargetEffect;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.cards.RoomCard;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.counters.CounterType;
|
||||||
|
import mage.game.permanent.token.GlimmerToken;
|
||||||
|
import mage.target.common.TargetCreaturePermanent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public final class GrandEntrywayElegantRotunda extends RoomCard {
|
||||||
|
public GrandEntrywayElegantRotunda(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}", "{2}{W}");
|
||||||
|
|
||||||
|
// Grand Entryway
|
||||||
|
// When you unlock this door, create a 1/1 white Glimmer enchantment creature token.
|
||||||
|
this.getLeftHalfCard().addAbility(new UnlockThisDoorTriggeredAbility(new CreateTokenEffect(new GlimmerToken()), false, true));
|
||||||
|
|
||||||
|
// Elegant Rotunda
|
||||||
|
// When you unlock this door, put a +1/+1 counter on each of up to two target creatures.
|
||||||
|
Ability ability = new UnlockThisDoorTriggeredAbility(new AddCountersTargetEffect(CounterType.P1P1.createInstance()), false, false);
|
||||||
|
ability.addTarget(new TargetCreaturePermanent(0, 2));
|
||||||
|
this.getRightHalfCard().addAbility(ability);
|
||||||
|
}
|
||||||
|
|
||||||
|
private GrandEntrywayElegantRotunda(final GrandEntrywayElegantRotunda card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GrandEntrywayElegantRotunda copy() {
|
||||||
|
return new GrandEntrywayElegantRotunda(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -8,7 +8,6 @@ import mage.cards.CardSetInfo;
|
||||||
import mage.cards.RoomCard;
|
import mage.cards.RoomCard;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.ComparisonType;
|
import mage.constants.ComparisonType;
|
||||||
import mage.constants.SpellAbilityType;
|
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.counters.CounterType;
|
import mage.counters.CounterType;
|
||||||
import mage.filter.FilterCard;
|
import mage.filter.FilterCard;
|
||||||
|
|
@ -42,7 +41,7 @@ public final class SurgicalSuiteHospitalRoom extends RoomCard {
|
||||||
// Whenever you attack, put a +1/+1 counter on target attacking creature.
|
// Whenever you attack, put a +1/+1 counter on target attacking creature.
|
||||||
super(ownerId, setInfo,
|
super(ownerId, setInfo,
|
||||||
new CardType[] { CardType.ENCHANTMENT },
|
new CardType[] { CardType.ENCHANTMENT },
|
||||||
"{1}{W}", "{3}{W}", SpellAbilityType.SPLIT);
|
"{1}{W}", "{3}{W}");
|
||||||
this.subtype.add(SubType.ROOM);
|
this.subtype.add(SubType.ROOM);
|
||||||
|
|
||||||
// Left half ability - "When you unlock this door, return target creature card with mana value 3 or less from your graveyard to the battlefield."
|
// Left half ability - "When you unlock this door, return target creature card with mana value 3 or less from your graveyard to the battlefield."
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,6 @@ import mage.cards.CardSetInfo;
|
||||||
import mage.cards.RoomCard;
|
import mage.cards.RoomCard;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.Outcome;
|
import mage.constants.Outcome;
|
||||||
import mage.constants.SpellAbilityType;
|
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.filter.common.FilterControlledPermanent;
|
import mage.filter.common.FilterControlledPermanent;
|
||||||
import mage.game.Game;
|
import mage.game.Game;
|
||||||
|
|
@ -35,7 +34,7 @@ public final class UnholyAnnexRitualChamber extends RoomCard {
|
||||||
}
|
}
|
||||||
|
|
||||||
public UnholyAnnexRitualChamber(UUID ownerId, CardSetInfo setInfo) {
|
public UnholyAnnexRitualChamber(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{B}", "{3}{B}{B}", SpellAbilityType.SPLIT);
|
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{B}", "{3}{B}{B}");
|
||||||
this.subtype.add(SubType.ROOM);
|
this.subtype.add(SubType.ROOM);
|
||||||
|
|
||||||
// Unholy Annex: At the beginning of your end step, draw a card. If you control a Demon, each opponent loses 2 life and you gain 2 life. Otherwise, you lose 2 life.
|
// Unholy Annex: At the beginning of your end step, draw a card. If you control a Demon, each opponent loses 2 life and you gain 2 life. Otherwise, you lose 2 life.
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,6 @@ import mage.cards.CardSetInfo;
|
||||||
import mage.cards.RoomCard;
|
import mage.cards.RoomCard;
|
||||||
import mage.constants.CardType;
|
import mage.constants.CardType;
|
||||||
import mage.constants.Duration;
|
import mage.constants.Duration;
|
||||||
import mage.constants.SpellAbilityType;
|
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
import mage.filter.StaticFilters;
|
import mage.filter.StaticFilters;
|
||||||
|
|
||||||
|
|
@ -20,7 +19,7 @@ import java.util.UUID;
|
||||||
public final class WalkInClosetForgottenCellar extends RoomCard {
|
public final class WalkInClosetForgottenCellar extends RoomCard {
|
||||||
|
|
||||||
public WalkInClosetForgottenCellar(UUID ownerId, CardSetInfo setInfo) {
|
public WalkInClosetForgottenCellar(UUID ownerId, CardSetInfo setInfo) {
|
||||||
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{G}", "{3}{G}{G}", SpellAbilityType.SPLIT);
|
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{G}", "{3}{G}{G}");
|
||||||
this.subtype.add(SubType.ROOM);
|
this.subtype.add(SubType.ROOM);
|
||||||
|
|
||||||
// Walk-In Closet: You may play lands from your graveyard.
|
// Walk-In Closet: You may play lands from your graveyard.
|
||||||
|
|
|
||||||
|
|
@ -158,6 +158,8 @@ public final class DuskmournHouseOfHorror extends ExpansionSet {
|
||||||
cards.add(new SetCardInfo("Gloomlake Verge", 260, Rarity.RARE, mage.cards.g.GloomlakeVerge.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Gloomlake Verge", 260, Rarity.RARE, mage.cards.g.GloomlakeVerge.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Gloomlake Verge", 331, Rarity.RARE, mage.cards.g.GloomlakeVerge.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Gloomlake Verge", 331, Rarity.RARE, mage.cards.g.GloomlakeVerge.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Grab the Prize", 138, Rarity.COMMON, mage.cards.g.GrabThePrize.class));
|
cards.add(new SetCardInfo("Grab the Prize", 138, Rarity.COMMON, mage.cards.g.GrabThePrize.class));
|
||||||
|
cards.add(new SetCardInfo("Grand Entryway // Elegant Rotunda", 287, Rarity.COMMON, mage.cards.g.GrandEntrywayElegantRotunda.class, NON_FULL_USE_VARIOUS));
|
||||||
|
cards.add(new SetCardInfo("Grand Entryway // Elegant Rotunda", 15, Rarity.COMMON, mage.cards.g.GrandEntrywayElegantRotunda.class, NON_FULL_USE_VARIOUS));
|
||||||
cards.add(new SetCardInfo("Grasping Longneck", 180, Rarity.COMMON, mage.cards.g.GraspingLongneck.class));
|
cards.add(new SetCardInfo("Grasping Longneck", 180, Rarity.COMMON, mage.cards.g.GraspingLongneck.class));
|
||||||
cards.add(new SetCardInfo("Gremlin Tamer", 215, Rarity.UNCOMMON, mage.cards.g.GremlinTamer.class));
|
cards.add(new SetCardInfo("Gremlin Tamer", 215, Rarity.UNCOMMON, mage.cards.g.GremlinTamer.class));
|
||||||
cards.add(new SetCardInfo("Grievous Wound", 102, Rarity.RARE, mage.cards.g.GrievousWound.class, NON_FULL_USE_VARIOUS));
|
cards.add(new SetCardInfo("Grievous Wound", 102, Rarity.RARE, mage.cards.g.GrievousWound.class, NON_FULL_USE_VARIOUS));
|
||||||
|
|
|
||||||
|
|
@ -22,19 +22,18 @@ import java.util.UUID;
|
||||||
public abstract class RoomCard extends SplitCard {
|
public abstract class RoomCard extends SplitCard {
|
||||||
private SpellAbilityType lastCastHalf = null;
|
private SpellAbilityType lastCastHalf = null;
|
||||||
|
|
||||||
protected RoomCard(UUID ownerId, CardSetInfo setInfo, CardType[] types, String costsLeft,
|
protected RoomCard(UUID ownerId, CardSetInfo setInfo, CardType[] types, String costsLeft, String costsRight) {
|
||||||
String costsRight, SpellAbilityType spellAbilityType) {
|
super(ownerId, setInfo, costsLeft, costsRight, SpellAbilityType.SPLIT, types);
|
||||||
super(ownerId, setInfo, costsLeft, costsRight, spellAbilityType, types);
|
|
||||||
|
|
||||||
String[] names = setInfo.getName().split(" // ");
|
String[] names = setInfo.getName().split(" // ");
|
||||||
|
|
||||||
leftHalfCard = new RoomCardHalfImpl(
|
leftHalfCard = new RoomCardHalfImpl(
|
||||||
this.getOwnerId(), new CardSetInfo(names[0], setInfo.getExpansionSetCode(), setInfo.getCardNumber(),
|
this.getOwnerId(), new CardSetInfo(names[0], setInfo.getExpansionSetCode(), setInfo.getCardNumber(),
|
||||||
setInfo.getRarity(), setInfo.getGraphicInfo()),
|
setInfo.getRarity(), setInfo.getGraphicInfo()),
|
||||||
types, costsLeft, this, SpellAbilityType.SPLIT_LEFT);
|
types, costsLeft, this, SpellAbilityType.SPLIT_LEFT);
|
||||||
rightHalfCard = new RoomCardHalfImpl(
|
rightHalfCard = new RoomCardHalfImpl(
|
||||||
this.getOwnerId(), new CardSetInfo(names[1], setInfo.getExpansionSetCode(), setInfo.getCardNumber(),
|
this.getOwnerId(), new CardSetInfo(names[1], setInfo.getExpansionSetCode(), setInfo.getCardNumber(),
|
||||||
setInfo.getRarity(), setInfo.getGraphicInfo()),
|
setInfo.getRarity(), setInfo.getGraphicInfo()),
|
||||||
types, costsRight, this, SpellAbilityType.SPLIT_RIGHT);
|
types, costsRight, this, SpellAbilityType.SPLIT_RIGHT);
|
||||||
|
|
||||||
// Add the one-shot effect to unlock a door on cast -> ETB
|
// Add the one-shot effect to unlock a door on cast -> ETB
|
||||||
|
|
@ -113,7 +112,7 @@ public abstract class RoomCard extends SplitCard {
|
||||||
|
|
||||||
Abilities<Ability> rightAbilities = roomCard.getRightHalfCard().getAbilities();
|
Abilities<Ability> rightAbilities = roomCard.getRightHalfCard().getAbilities();
|
||||||
for (Ability ability : rightAbilities) {
|
for (Ability ability : rightAbilities) {
|
||||||
permanent.addAbility(ability, roomCard.getRightHalfCard().getId(), game,true);
|
permanent.addAbility(ability, roomCard.getRightHalfCard().getId(), game, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -173,4 +172,3 @@ class RoomEnterUnlockEffect extends OneShotEffect {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue