mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 20:58:03 +00:00
- Added Razor Boomerang
This commit is contained in:
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -8253,6 +8253,7 @@ res/cardsfolder/r/raze.txt svneol=native#text/plain
|
|||||||
res/cardsfolder/r/razias_purification.txt -text
|
res/cardsfolder/r/razias_purification.txt -text
|
||||||
res/cardsfolder/r/razing_snidd.txt svneol=native#text/plain
|
res/cardsfolder/r/razing_snidd.txt svneol=native#text/plain
|
||||||
res/cardsfolder/r/razor_barrier.txt svneol=native#text/plain
|
res/cardsfolder/r/razor_barrier.txt svneol=native#text/plain
|
||||||
|
res/cardsfolder/r/razor_boomerang.txt -text
|
||||||
res/cardsfolder/r/razor_golem.txt svneol=native#text/plain
|
res/cardsfolder/r/razor_golem.txt svneol=native#text/plain
|
||||||
res/cardsfolder/r/razor_hippogriff.txt svneol=native#text/plain
|
res/cardsfolder/r/razor_hippogriff.txt svneol=native#text/plain
|
||||||
res/cardsfolder/r/razor_pendulum.txt svneol=native#text/plain
|
res/cardsfolder/r/razor_pendulum.txt svneol=native#text/plain
|
||||||
|
|||||||
12
res/cardsfolder/r/razor_boomerang.txt
Normal file
12
res/cardsfolder/r/razor_boomerang.txt
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
Name:Razor Boomerang
|
||||||
|
ManaCost:3
|
||||||
|
Types:Artifact Equipment
|
||||||
|
Text:no text
|
||||||
|
S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddAbility$ RazorDamage | AddSVar$ BoomerangCatch | Description$ Equipped creature has "{T}, Unattach CARDNAME: CARDNAME deals 1 damage to target creature or player. Return CARDNAME to its owner's hand."
|
||||||
|
SVar:RazorDamage:AB$ DealDamage | Cost$ T Unattach<OriginalHost/Razor Boomerang> | NumDmg$ 1 | DamageSource$ OriginalHost | ValidTgts$ Creature,Player | TgtPrompt$ Select target creature or player | RememberCostCards$ True | SubAbility$ BoomerangCatch | SpellDescription$ Razor Boomerang deals 1 damage to target creature or player. Return Razor Boomerang to its owner's hand.
|
||||||
|
SVar:BoomerangCatch:DB$ ChangeZone | Origin$ Battlefield | Destination$ Hand | Defined$ Remembered | ForgetChanged$ True
|
||||||
|
K:Equip 2
|
||||||
|
SVar:Picture:http://www.wizards.com/global/images/magic/general/razor_boomerang.jpg
|
||||||
|
SetInfo:WWK|Uncommon|http://magiccards.info/scans/en/wwk/129.jpg
|
||||||
|
Oracle:Equipped creature has "{T}, Unattach Razor Boomerang: Razor Boomerang deals 1 damage to target creature or player. Return Razor Boomerang to its owner's hand."\nEquip {2}
|
||||||
|
End
|
||||||
@@ -463,7 +463,7 @@ public class AbilityUtils {
|
|||||||
players.addAll(AbilityFactory.getDefinedPlayers(card, "EnchantedController", ability));
|
players.addAll(AbilityFactory.getDefinedPlayers(card, "EnchantedController", ability));
|
||||||
return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier;
|
return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier;
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
List<Card> list = new ArrayList<Card>();
|
List<Card> list = new ArrayList<Card>();
|
||||||
if (calcX[0].startsWith("Sacrificed")) {
|
if (calcX[0].startsWith("Sacrificed")) {
|
||||||
@@ -610,7 +610,7 @@ public class AbilityUtils {
|
|||||||
source = null;
|
source = null;
|
||||||
ArrayList<Card> tgts = sa.findTargetedCards();
|
ArrayList<Card> tgts = sa.findTargetedCards();
|
||||||
if (!tgts.isEmpty()) {
|
if (!tgts.isEmpty()) {
|
||||||
source = tgts.get(0);
|
source = tgts.get(0);
|
||||||
}
|
}
|
||||||
if (source == null) {
|
if (source == null) {
|
||||||
return new ArrayList<Card>();
|
return new ArrayList<Card>();
|
||||||
@@ -646,7 +646,7 @@ public class AbilityUtils {
|
|||||||
valid = valid.replace("X", Integer.toString(calculateAmount(source, "X", sa)));
|
valid = valid.replace("X", Integer.toString(calculateAmount(source, "X", sa)));
|
||||||
}
|
}
|
||||||
return CardLists.getValidCards(list, valid.split(","), sa.getActivatingPlayer(), source);
|
return CardLists.getValidCards(list, valid.split(","), sa.getActivatingPlayer(), source);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
@@ -1050,8 +1050,9 @@ public class AbilityUtils {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute() {
|
public void execute() {
|
||||||
if ( isSwitched && execSubsWhenNotPaid || execSubsWhenPaid)
|
if (isSwitched && execSubsWhenNotPaid || execSubsWhenPaid) {
|
||||||
resolveSubAbilities(sa, usedStack, game);
|
resolveSubAbilities(sa, usedStack, game);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1061,8 +1062,9 @@ public class AbilityUtils {
|
|||||||
@Override
|
@Override
|
||||||
public void execute() {
|
public void execute() {
|
||||||
sa.resolve();
|
sa.resolve();
|
||||||
if ( isSwitched && execSubsWhenPaid || execSubsWhenNotPaid)
|
if (isSwitched && execSubsWhenPaid || execSubsWhenNotPaid) {
|
||||||
resolveSubAbilities(sa, usedStack, game);
|
resolveSubAbilities(sa, usedStack, game);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1083,10 +1085,10 @@ public class AbilityUtils {
|
|||||||
boolean paid = false;
|
boolean paid = false;
|
||||||
for (Player payer : payers) {
|
for (Player payer : payers) {
|
||||||
if (payer.isComputer()) {
|
if (payer.isComputer()) {
|
||||||
if ( AbilityUtils.willAIPayForAbility(sa, payer, ability, paid, payers) ) {
|
if (AbilityUtils.willAIPayForAbility(sa, payer, ability, paid, payers)) {
|
||||||
ability.setActivatingPlayer(payer);
|
ability.setActivatingPlayer(payer);
|
||||||
ability.setTarget(sa.getTarget());
|
ability.setTarget(sa.getTarget());
|
||||||
ComputerUtil.playNoStack((AIPlayer)payer, ability, game); // Unless cost was payed - no resolve
|
ComputerUtil.playNoStack((AIPlayer) payer, ability, game); // Unless cost was payed - no resolve
|
||||||
paid = true;
|
paid = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1117,8 +1119,6 @@ public class AbilityUtils {
|
|||||||
*
|
*
|
||||||
* @param sa
|
* @param sa
|
||||||
* a SpellAbility object.
|
* a SpellAbility object.
|
||||||
* @param af
|
|
||||||
* a {@link forge.card.ability.AbilityFactory} object.
|
|
||||||
*/
|
*/
|
||||||
public static void handleRemembering(final SpellAbility sa) {
|
public static void handleRemembering(final SpellAbility sa) {
|
||||||
Card host = sa.getSourceCard();
|
Card host = sa.getSourceCard();
|
||||||
@@ -1140,14 +1140,19 @@ public class AbilityUtils {
|
|||||||
}
|
}
|
||||||
} else if (sa.getParam("Cost").contains("Sac")) {
|
} else if (sa.getParam("Cost").contains("Sac")) {
|
||||||
final List<Card> paidListSacrificed = sa.getPaidList("Sacrificed");
|
final List<Card> paidListSacrificed = sa.getPaidList("Sacrificed");
|
||||||
for (final Card SacrificedAsCost : paidListSacrificed) {
|
for (final Card sacrificedAsCost : paidListSacrificed) {
|
||||||
host.addRemembered(SacrificedAsCost);
|
host.addRemembered(sacrificedAsCost);
|
||||||
}
|
}
|
||||||
} else if (sa.getParam("Cost").contains("tapXType")) {
|
} else if (sa.getParam("Cost").contains("tapXType")) {
|
||||||
final List<Card> paidListTapped = sa.getPaidList("Tapped");
|
final List<Card> paidListTapped = sa.getPaidList("Tapped");
|
||||||
for (final Card tappedAsCost : paidListTapped) {
|
for (final Card tappedAsCost : paidListTapped) {
|
||||||
host.addRemembered(tappedAsCost);
|
host.addRemembered(tappedAsCost);
|
||||||
}
|
}
|
||||||
|
} else if (sa.getParam("Cost").contains("Unattach")) {
|
||||||
|
final List<Card> paidListUnattached = sa.getPaidList("Unattached");
|
||||||
|
for (final Card unattachedAsCost : paidListUnattached) {
|
||||||
|
host.addRemembered(unattachedAsCost);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1158,19 +1163,19 @@ public class AbilityUtils {
|
|||||||
boolean payNever = "Never".equals(sa.getParam("UnlessAI"));
|
boolean payNever = "Never".equals(sa.getParam("UnlessAI"));
|
||||||
boolean isMine = sa.getActivatingPlayer().equals(payer);
|
boolean isMine = sa.getActivatingPlayer().equals(payer);
|
||||||
|
|
||||||
if (payNever) return false;
|
if (payNever) { return false; }
|
||||||
if (payForOwnOnly && !isMine) return false;
|
if (payForOwnOnly && !isMine) { return false; }
|
||||||
|
|
||||||
// AI will only pay when it's not already payed and only opponents abilities
|
// AI will only pay when it's not already payed and only opponents abilities
|
||||||
if (paid || (payers.size() > 1 && (isMine && !payForOwnOnly))) {
|
if (paid || (payers.size() > 1 && (isMine && !payForOwnOnly))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (ComputerUtilCost.canPayCost(ability, payer)
|
if (ComputerUtilCost.canPayCost(ability, payer)
|
||||||
&& ComputerUtilCost.checkLifeCost(payer, ability.getPayCosts(), source, 4, sa)
|
&& ComputerUtilCost.checkLifeCost(payer, ability.getPayCosts(), source, 4, sa)
|
||||||
&& ComputerUtilCost.checkDamageCost(payer, ability.getPayCosts(), source, 4)
|
&& ComputerUtilCost.checkDamageCost(payer, ability.getPayCosts(), source, 4)
|
||||||
&& ComputerUtilCost.checkDiscardCost(payer, ability.getPayCosts(), source)
|
&& ComputerUtilCost.checkDiscardCost(payer, ability.getPayCosts(), source)
|
||||||
&& (!source.getName().equals("Tyrannize") || payer.getCardsIn(ZoneType.Hand).size() > 2)
|
&& (!source.getName().equals("Tyrannize") || payer.getCardsIn(ZoneType.Hand).size() > 2)
|
||||||
&& (!source.getName().equals("Breaking Point") || payer.getCreaturesInPlay().size() > 1)) {
|
&& (!source.getName().equals("Breaking Point") || payer.getCreaturesInPlay().size() > 1)) {
|
||||||
// AI was crashing because the blank ability used to pay costs
|
// AI was crashing because the blank ability used to pay costs
|
||||||
// Didn't have any of the data on the original SA to pay dependant costs
|
// Didn't have any of the data on the original SA to pay dependant costs
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -311,10 +311,8 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
|||||||
tgtCards = tgt.getTargetCards();
|
tgtCards = tgt.getTargetCards();
|
||||||
} else {
|
} else {
|
||||||
tgtCards = new ArrayList<Card>();
|
tgtCards = new ArrayList<Card>();
|
||||||
for (ZoneType o : origin) {
|
for (final Card c : AbilityUtils.getDefinedCards(sa.getSourceCard(), sa.getParam("Defined"), sa)) {
|
||||||
for (final Card c : sa.knownDetermineDefined(sa.getParam("Defined"))) {
|
tgtCards.add(c);
|
||||||
tgtCards.add(c);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -339,6 +337,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
|||||||
} // End of change from stack
|
} // End of change from stack
|
||||||
|
|
||||||
final String remember = sa.getParam("RememberChanged");
|
final String remember = sa.getParam("RememberChanged");
|
||||||
|
final String forget = sa.getParam("ForgetChanged");
|
||||||
final String imprint = sa.getParam("Imprint");
|
final String imprint = sa.getParam("Imprint");
|
||||||
|
|
||||||
if (sa.hasParam("Unimprint")) {
|
if (sa.hasParam("Unimprint")) {
|
||||||
@@ -467,6 +466,9 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
|||||||
if (remember != null) {
|
if (remember != null) {
|
||||||
hostCard.addRemembered(movedCard);
|
hostCard.addRemembered(movedCard);
|
||||||
}
|
}
|
||||||
|
if (forget != null) {
|
||||||
|
sa.getSourceCard().getRemembered().remove(movedCard);
|
||||||
|
}
|
||||||
if (imprint != null) {
|
if (imprint != null) {
|
||||||
hostCard.addImprinted(movedCard);
|
hostCard.addImprinted(movedCard);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user