mirror of
https://github.com/correl/mage.git
synced 2024-11-25 03:00:11 +00:00
[AFR] Implemented Hama Pashar, Ruin Seeker
This commit is contained in:
parent
14d8beb5c5
commit
6046c4e0d7
3 changed files with 139 additions and 6 deletions
77
Mage.Sets/src/mage/cards/h/HamaPasharRuinSeeker.java
Normal file
77
Mage.Sets/src/mage/cards/h/HamaPasharRuinSeeker.java
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
package mage.cards.h;
|
||||||
|
|
||||||
|
import mage.MageInt;
|
||||||
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.common.SimpleStaticAbility;
|
||||||
|
import mage.abilities.effects.ReplacementEffectImpl;
|
||||||
|
import mage.cards.CardImpl;
|
||||||
|
import mage.cards.CardSetInfo;
|
||||||
|
import mage.constants.*;
|
||||||
|
import mage.game.Game;
|
||||||
|
import mage.game.events.GameEvent;
|
||||||
|
import mage.game.events.NumberOfTriggersEvent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public final class HamaPasharRuinSeeker extends CardImpl {
|
||||||
|
|
||||||
|
public HamaPasharRuinSeeker(UUID ownerId, CardSetInfo setInfo) {
|
||||||
|
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}{U}");
|
||||||
|
|
||||||
|
this.addSuperType(SuperType.LEGENDARY);
|
||||||
|
this.subtype.add(SubType.HUMAN);
|
||||||
|
this.subtype.add(SubType.WIZARD);
|
||||||
|
this.power = new MageInt(2);
|
||||||
|
this.toughness = new MageInt(3);
|
||||||
|
|
||||||
|
// Room abilities of dungeons you own trigger an additional time.
|
||||||
|
this.addAbility(new SimpleStaticAbility(new HamaPasharRuinSeekerEffect()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private HamaPasharRuinSeeker(final HamaPasharRuinSeeker card) {
|
||||||
|
super(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HamaPasharRuinSeeker copy() {
|
||||||
|
return new HamaPasharRuinSeeker(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class HamaPasharRuinSeekerEffect extends ReplacementEffectImpl {
|
||||||
|
|
||||||
|
HamaPasharRuinSeekerEffect() {
|
||||||
|
super(Duration.WhileOnBattlefield, Outcome.Benefit);
|
||||||
|
staticText = "room abilities of dungeons you own trigger an additional time";
|
||||||
|
}
|
||||||
|
|
||||||
|
private HamaPasharRuinSeekerEffect(final HamaPasharRuinSeekerEffect effect) {
|
||||||
|
super(effect);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HamaPasharRuinSeekerEffect copy() {
|
||||||
|
return new HamaPasharRuinSeekerEffect(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean checksEventType(GameEvent event, Game game) {
|
||||||
|
return event.getType() == GameEvent.EventType.NUMBER_OF_TRIGGERS;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean applies(GameEvent event, Ability source, Game game) {
|
||||||
|
GameEvent gameEvent = ((NumberOfTriggersEvent) event).getSourceEvent();
|
||||||
|
return gameEvent.getType() == GameEvent.EventType.ROOM_ENTERED
|
||||||
|
&& source.isControlledBy(gameEvent.getPlayerId());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean replaceEvent(GameEvent event, Ability source, Game game) {
|
||||||
|
event.setAmount(event.getAmount() + 1);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
|
@ -70,6 +70,7 @@ public final class AdventuresInTheForgottenRealms extends ExpansionSet {
|
||||||
cards.add(new SetCardInfo("Grim Wanderer", 107, Rarity.UNCOMMON, mage.cards.g.GrimWanderer.class));
|
cards.add(new SetCardInfo("Grim Wanderer", 107, Rarity.UNCOMMON, mage.cards.g.GrimWanderer.class));
|
||||||
cards.add(new SetCardInfo("Guild Thief", 61, Rarity.UNCOMMON, mage.cards.g.GuildThief.class));
|
cards.add(new SetCardInfo("Guild Thief", 61, Rarity.UNCOMMON, mage.cards.g.GuildThief.class));
|
||||||
cards.add(new SetCardInfo("Half-Elf Monk", 19, Rarity.COMMON, mage.cards.h.HalfElfMonk.class));
|
cards.add(new SetCardInfo("Half-Elf Monk", 19, Rarity.COMMON, mage.cards.h.HalfElfMonk.class));
|
||||||
|
cards.add(new SetCardInfo("Hama Pashar, Ruin Seeker", 224, Rarity.UNCOMMON, mage.cards.h.HamaPasharRuinSeeker.class));
|
||||||
cards.add(new SetCardInfo("Hive of the Eye Tyrant", 258, Rarity.RARE, mage.cards.h.HiveOfTheEyeTyrant.class));
|
cards.add(new SetCardInfo("Hive of the Eye Tyrant", 258, Rarity.RARE, mage.cards.h.HiveOfTheEyeTyrant.class));
|
||||||
cards.add(new SetCardInfo("Hobgoblin Captain", 148, Rarity.COMMON, mage.cards.h.HobgoblinCaptain.class));
|
cards.add(new SetCardInfo("Hobgoblin Captain", 148, Rarity.COMMON, mage.cards.h.HobgoblinCaptain.class));
|
||||||
cards.add(new SetCardInfo("Hunter's Mark", 188, Rarity.UNCOMMON, mage.cards.h.HuntersMark.class));
|
cards.add(new SetCardInfo("Hunter's Mark", 188, Rarity.UNCOMMON, mage.cards.h.HuntersMark.class));
|
||||||
|
|
|
@ -27,6 +27,7 @@ public class DungeonTest extends CardTestPlayerBase {
|
||||||
private static final String GLOOM_STALKER = "Gloom Stalker";
|
private static final String GLOOM_STALKER = "Gloom Stalker";
|
||||||
private static final String DUNGEON_CRAWLER = "Dungeon Crawler";
|
private static final String DUNGEON_CRAWLER = "Dungeon Crawler";
|
||||||
private static final String SILVERCOAT_LION = "Silvercoat Lion";
|
private static final String SILVERCOAT_LION = "Silvercoat Lion";
|
||||||
|
private static final String HAMA_PASHAR_RUIN_SEEKER = "Hama Pashar, Ruin Seeker";
|
||||||
|
|
||||||
private void makeTester() {
|
private void makeTester() {
|
||||||
makeTester(playerA);
|
makeTester(playerA);
|
||||||
|
@ -87,7 +88,7 @@ public class DungeonTest extends CardTestPlayerBase {
|
||||||
execute();
|
execute();
|
||||||
assertAllCommandsUsed();
|
assertAllCommandsUsed();
|
||||||
|
|
||||||
assertPowerToughness(playerA, FLAMESPEAKER_ADEPT, 4, 3);
|
assertPowerToughness(playerA, FLAMESPEAKER_ADEPT, 2 + 2, 3);
|
||||||
assertPermanentCount(playerA, "Goblin", 0);
|
assertPermanentCount(playerA, "Goblin", 0);
|
||||||
assertDungeonRoom(LOST_MINE_OF_PHANDELVER, "Cave Entrance");
|
assertDungeonRoom(LOST_MINE_OF_PHANDELVER, "Cave Entrance");
|
||||||
assertLife(playerA, 20);
|
assertLife(playerA, 20);
|
||||||
|
@ -110,7 +111,7 @@ public class DungeonTest extends CardTestPlayerBase {
|
||||||
execute();
|
execute();
|
||||||
assertAllCommandsUsed();
|
assertAllCommandsUsed();
|
||||||
|
|
||||||
assertPowerToughness(playerA, FLAMESPEAKER_ADEPT, 4, 3);
|
assertPowerToughness(playerA, FLAMESPEAKER_ADEPT, 2 + 2, 3);
|
||||||
assertPermanentCount(playerA, "Goblin", 1);
|
assertPermanentCount(playerA, "Goblin", 1);
|
||||||
assertDungeonRoom(LOST_MINE_OF_PHANDELVER, "Goblin Lair");
|
assertDungeonRoom(LOST_MINE_OF_PHANDELVER, "Goblin Lair");
|
||||||
assertLife(playerA, 20);
|
assertLife(playerA, 20);
|
||||||
|
@ -136,7 +137,7 @@ public class DungeonTest extends CardTestPlayerBase {
|
||||||
execute();
|
execute();
|
||||||
assertAllCommandsUsed();
|
assertAllCommandsUsed();
|
||||||
|
|
||||||
assertPowerToughness(playerA, FLAMESPEAKER_ADEPT, 4, 3);
|
assertPowerToughness(playerA, FLAMESPEAKER_ADEPT, 2 + 2, 3);
|
||||||
assertPermanentCount(playerA, "Goblin", 1);
|
assertPermanentCount(playerA, "Goblin", 1);
|
||||||
assertDungeonRoom(LOST_MINE_OF_PHANDELVER, "Dark Pool");
|
assertDungeonRoom(LOST_MINE_OF_PHANDELVER, "Dark Pool");
|
||||||
assertLife(playerA, 20 + 1);
|
assertLife(playerA, 20 + 1);
|
||||||
|
@ -164,7 +165,7 @@ public class DungeonTest extends CardTestPlayerBase {
|
||||||
execute();
|
execute();
|
||||||
assertAllCommandsUsed();
|
assertAllCommandsUsed();
|
||||||
|
|
||||||
assertPowerToughness(playerA, FLAMESPEAKER_ADEPT, 4, 3);
|
assertPowerToughness(playerA, FLAMESPEAKER_ADEPT, 2 + 2, 3);
|
||||||
assertPermanentCount(playerA, "Goblin", 1);
|
assertPermanentCount(playerA, "Goblin", 1);
|
||||||
assertDungeonRoom(null, null);
|
assertDungeonRoom(null, null);
|
||||||
assertLife(playerA, 20 + 1);
|
assertLife(playerA, 20 + 1);
|
||||||
|
@ -283,8 +284,8 @@ public class DungeonTest extends CardTestPlayerBase {
|
||||||
execute();
|
execute();
|
||||||
assertAllCommandsUsed();
|
assertAllCommandsUsed();
|
||||||
|
|
||||||
assertPowerToughness(playerA, FLAMESPEAKER_ADEPT, 4, 3);
|
assertPowerToughness(playerA, FLAMESPEAKER_ADEPT, 2 + 2, 3);
|
||||||
assertPowerToughness(playerB, FLAMESPEAKER_ADEPT, 6, 3);
|
assertPowerToughness(playerB, FLAMESPEAKER_ADEPT, 2 + 2 + 2, 3);
|
||||||
assertPermanentCount(playerA, "Goblin", 1);
|
assertPermanentCount(playerA, "Goblin", 1);
|
||||||
assertPermanentCount(playerB, "Treasure", 1);
|
assertPermanentCount(playerB, "Treasure", 1);
|
||||||
assertDungeonRoom(playerA, LOST_MINE_OF_PHANDELVER, "Dark Pool");
|
assertDungeonRoom(playerA, LOST_MINE_OF_PHANDELVER, "Dark Pool");
|
||||||
|
@ -384,4 +385,58 @@ public class DungeonTest extends CardTestPlayerBase {
|
||||||
assertHandCount(playerA, DUNGEON_CRAWLER, 1);
|
assertHandCount(playerA, DUNGEON_CRAWLER, 1);
|
||||||
assertDungeonRoom(null, null);
|
assertDungeonRoom(null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test__HamaPasharRuinSeeker_DoubleController() {
|
||||||
|
makeTester();
|
||||||
|
addCard(Zone.BATTLEFIELD, playerA, FLAMESPEAKER_ADEPT);
|
||||||
|
addCard(Zone.BATTLEFIELD, playerA, HAMA_PASHAR_RUIN_SEEKER);
|
||||||
|
|
||||||
|
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{0}:");
|
||||||
|
setChoice(playerA, LOST_MINE_OF_PHANDELVER);
|
||||||
|
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||||
|
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{0}:");
|
||||||
|
setChoice(playerA, "Yes"); // Goblin Lair
|
||||||
|
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||||
|
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{0}:");
|
||||||
|
setChoice(playerA, "No"); // Dark Pool
|
||||||
|
|
||||||
|
setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
|
||||||
|
execute();
|
||||||
|
assertAllCommandsUsed();
|
||||||
|
|
||||||
|
assertPowerToughness(playerA, FLAMESPEAKER_ADEPT, 2 + 2 + 2, 3);
|
||||||
|
assertPermanentCount(playerA, "Goblin", 2);
|
||||||
|
assertDungeonRoom(LOST_MINE_OF_PHANDELVER, "Dark Pool");
|
||||||
|
assertLife(playerA, 20 + 1 + 1);
|
||||||
|
assertLife(playerB, 20 - 1 - 1);
|
||||||
|
assertHandCount(playerA, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test__HamaPasharRuinSeeker_DontDoubleOpponent() {
|
||||||
|
makeTester();
|
||||||
|
addCard(Zone.BATTLEFIELD, playerA, FLAMESPEAKER_ADEPT);
|
||||||
|
addCard(Zone.BATTLEFIELD, playerB, HAMA_PASHAR_RUIN_SEEKER);
|
||||||
|
|
||||||
|
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{0}:");
|
||||||
|
setChoice(playerA, LOST_MINE_OF_PHANDELVER);
|
||||||
|
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||||
|
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{0}:");
|
||||||
|
setChoice(playerA, "Yes"); // Goblin Lair
|
||||||
|
waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN);
|
||||||
|
activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{0}:");
|
||||||
|
setChoice(playerA, "No"); // Dark Pool
|
||||||
|
|
||||||
|
setStopAt(1, PhaseStep.POSTCOMBAT_MAIN);
|
||||||
|
execute();
|
||||||
|
assertAllCommandsUsed();
|
||||||
|
|
||||||
|
assertPowerToughness(playerA, FLAMESPEAKER_ADEPT, 2 + 2, 3);
|
||||||
|
assertPermanentCount(playerA, "Goblin", 1);
|
||||||
|
assertDungeonRoom(LOST_MINE_OF_PHANDELVER, "Dark Pool");
|
||||||
|
assertLife(playerA, 20 + 1);
|
||||||
|
assertLife(playerB, 20 - 1);
|
||||||
|
assertHandCount(playerA, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue