mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 20:28:00 +00:00
- Converting Grindstone to Script
This commit is contained in:
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -13740,7 +13740,6 @@ src/main/java/forge/card/ability/effects/UntapAllEffect.java -text
|
||||
src/main/java/forge/card/ability/effects/UntapEffect.java -text
|
||||
src/main/java/forge/card/ability/package-info.java svneol=native#text/plain
|
||||
src/main/java/forge/card/cardfactory/CardFactory.java svneol=native#text/plain
|
||||
src/main/java/forge/card/cardfactory/CardFactoryArtifacts.java -text
|
||||
src/main/java/forge/card/cardfactory/CardFactoryCreatures.java svneol=native#text/plain
|
||||
src/main/java/forge/card/cardfactory/CardFactorySorceries.java svneol=native#text/plain
|
||||
src/main/java/forge/card/cardfactory/CardFactoryUtil.java svneol=native#text/plain
|
||||
|
||||
@@ -1,6 +1,13 @@
|
||||
Name:Grindstone
|
||||
ManaCost:1
|
||||
Types:Artifact
|
||||
A:AB$ Repeat | Cost$ 3 T | ValidTgts$ Player | RepeatSubAbility$ DBCleanAndGrind | MaxRepeat$ MaxRepeats | RepeatCheckSVar$ MilledSharesColor | RepeatSVarCompare$ EQ2 | SubAbility$ DBCleanup | SpellDescription$ Put the top two cards of target player's library into that player's graveyard. If both cards share a color, repeat this process. | StackDescription$ SpellDescription
|
||||
SVar:DBCleanAndGrind:DB$ Cleanup | ClearRemembered$ True | SubAbility$ DBPeek
|
||||
SVar:DBPeek:DB$ PeekAndReveal | Defined$ Targeted | PeekAmount$ 2 | NoPeek$ True | NoReveal$ True | RememberPeeked$ True | SubAbility$ DBGrind
|
||||
SVar:DBGrind:DB$ Mill | NumCards$ 2 | Defined$ Targeted
|
||||
SVar:MaxRepeats:TargetedPlayer$CardsInLibrary
|
||||
SVar:MilledSharesColor:RememberedLKI$Valid Card.SharesColorWith Remembered
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/grindstone.jpg
|
||||
Oracle:{3}, {T}: Put the top two cards of target player's library into that player's graveyard. If both cards share a color, repeat this process.
|
||||
SetInfo:TMP Rare
|
||||
@@ -6516,6 +6516,12 @@ public class Card extends GameEntity implements Comparable<Card> {
|
||||
if (list.isEmpty() || !this.sharesColorWith(list.get(0))) {
|
||||
return false;
|
||||
}
|
||||
} else if (restriction.equals("Remembered")) {
|
||||
for (final Object obj : source.getRemembered()) {
|
||||
if (!(obj instanceof Card) || !this.sharesColorWith((Card) obj)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} else if (restriction.equals("Imprinted")) {
|
||||
for (final Card card : source.getImprinted()) {
|
||||
if (!this.sharesColorWith(card)) {
|
||||
|
||||
@@ -152,7 +152,11 @@ public final class CardUtil {
|
||||
|
||||
newCopy.setCounters(in.getCounters());
|
||||
newCopy.setExtrinsicKeyword(in.getExtrinsicKeyword());
|
||||
newCopy.setColor(in.getColor());
|
||||
//newCopy.setColor(in.getColor());
|
||||
// Determine the color for LKI copy, not just getColor
|
||||
ArrayList<CardColor> currentColor = new ArrayList<CardColor>();
|
||||
currentColor.add(in.determineColor());
|
||||
newCopy.setColor(currentColor);
|
||||
newCopy.setReceivedDamageFromThisTurn(in.getReceivedDamageFromThisTurn());
|
||||
newCopy.getDamageHistory().setCreatureGotBlockedThisTurn(in.getDamageHistory().getCreatureGotBlockedThisTurn());
|
||||
newCopy.setEnchanting(in.getEnchanting());
|
||||
|
||||
@@ -5,6 +5,7 @@ import java.util.List;
|
||||
|
||||
import forge.Card;
|
||||
import forge.CardLists;
|
||||
import forge.CardUtil;
|
||||
import forge.card.ability.AbilityUtils;
|
||||
import forge.card.ability.SpellAbilityEffect;
|
||||
import forge.card.spellability.AbilitySub;
|
||||
@@ -39,9 +40,10 @@ public class PeekAndRevealEffect extends SpellAbilityEffect {
|
||||
int numPeek = AbilityUtils.calculateAmount(sa.getSourceCard(), peekAmount, sa);
|
||||
|
||||
// Right now, this is only used on your own library.
|
||||
Player libraryToPeek = sa.getActivatingPlayer();
|
||||
List<Player> libraryPlayers = AbilityUtils.getDefinedPlayers(sa.getSourceCard(), sa.getParam("Defined"), sa);
|
||||
Player peekingPlayer = sa.getActivatingPlayer();
|
||||
|
||||
for(Player libraryToPeek : libraryPlayers) {
|
||||
final PlayerZone library = libraryToPeek.getZone(ZoneType.Library);
|
||||
numPeek = Math.min(numPeek, library.size());
|
||||
|
||||
@@ -51,11 +53,13 @@ public class PeekAndRevealEffect extends SpellAbilityEffect {
|
||||
}
|
||||
|
||||
List<Card> revealableCards = CardLists.getValidCards(peekCards, revealValid, sa.getActivatingPlayer(), sa.getSourceCard());
|
||||
boolean doReveal = !revealableCards.isEmpty();
|
||||
boolean doReveal = !sa.hasParam("NoReveal") && !revealableCards.isEmpty();
|
||||
|
||||
//peekingPlayer.showCards(peekCards)
|
||||
if (peekingPlayer.isHuman()) {
|
||||
if (!sa.hasParam("NoPeek")) {
|
||||
GuiChoose.one(source + "Revealing cards from library", peekCards);
|
||||
}
|
||||
if (doReveal && revealOptional) {
|
||||
StringBuilder question = new StringBuilder();
|
||||
question.append("Reveal cards to other players?");
|
||||
@@ -76,7 +80,12 @@ public class PeekAndRevealEffect extends SpellAbilityEffect {
|
||||
// Singletons.getModel().getGameAction().revealCardsToOtherPlayers(peekingPlayer, revealableCards);
|
||||
if (rememberRevealed) {
|
||||
for(Card c : revealableCards) {
|
||||
source.addRemembered(c);
|
||||
source.addRemembered(CardUtil.getLKICopy(c));
|
||||
}
|
||||
}
|
||||
} else if (sa.hasParam("RememberPeeked")) {
|
||||
for(Card c : revealableCards) {
|
||||
source.addRemembered(CardUtil.getLKICopy(c));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,99 +0,0 @@
|
||||
package forge.card.cardfactory;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
import forge.Card;
|
||||
import forge.card.cost.Cost;
|
||||
import forge.card.spellability.AbilityActivated;
|
||||
import forge.card.spellability.Target;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.zone.ZoneType;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
class CardFactoryArtifacts {
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this method.
|
||||
* @param card
|
||||
* @param cardName
|
||||
* @return
|
||||
*/
|
||||
public static void buildCard(final Card card, final String cardName) {
|
||||
|
||||
// *************** START *********** START **************************
|
||||
if (cardName.equals("Grindstone")) {
|
||||
|
||||
class AbilityGrindstone extends AbilityActivated {
|
||||
public AbilityGrindstone(final Card ca, final Cost co, final Target t) {
|
||||
super(ca, co, t);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AbilityActivated getCopy() {
|
||||
AbilityActivated res = new AbilityGrindstone(getSourceCard(),
|
||||
getPayCosts(), getTarget() == null ? null : new Target(getTarget()));
|
||||
CardFactory.copySpellAbility(this, res);
|
||||
return res;
|
||||
}
|
||||
|
||||
private static final long serialVersionUID = -6281219446216L;
|
||||
|
||||
@Override
|
||||
public boolean canPlayAI() {
|
||||
this.getTarget().resetTargets();
|
||||
Player human = getActivatingPlayer().getOpponent();
|
||||
final List<Card> libList = human.getCardsIn(ZoneType.Library);
|
||||
this.getTarget().addTarget(human);
|
||||
return !libList.isEmpty() && canTarget(human);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resolve() {
|
||||
final Player target = this.getTargetPlayer();
|
||||
final List<Card> library = new ArrayList<Card>(this.getTargetPlayer().getCardsIn(ZoneType.Library));
|
||||
|
||||
boolean loop = true;
|
||||
final List<Card> grinding = new ArrayList<Card>();
|
||||
do {
|
||||
grinding.clear();
|
||||
|
||||
for (int i = 0; i < 2; i++) {
|
||||
// Move current grinding to a different list
|
||||
if (library.size() > 0) {
|
||||
final Card c = library.get(0);
|
||||
grinding.add(c);
|
||||
library.remove(c);
|
||||
} else {
|
||||
loop = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// if current grinding dont share a color, stop grinding
|
||||
if (loop) {
|
||||
loop = grinding.get(0).sharesColorWith(grinding.get(1));
|
||||
}
|
||||
target.mill(grinding.size());
|
||||
} while (loop);
|
||||
}
|
||||
}
|
||||
|
||||
final Target target = new Target(card, "Select target player", new String[] { "Player" });
|
||||
final Cost abCost = new Cost(card, "3 T", true);
|
||||
final AbilityActivated ab1 = new AbilityGrindstone(card, abCost, target);
|
||||
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
sb.append(abCost);
|
||||
sb.append("Put the top two cards of target player's library into that player's graveyard. ");
|
||||
sb.append("If both cards share a color, repeat this process.");
|
||||
ab1.setDescription(sb.toString());
|
||||
ab1.setStackDescription(sb.toString());
|
||||
card.addSpellAbility(ab1);
|
||||
} // *************** END ************ END **************************
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user