mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 12:48:00 +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/razing_snidd.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_hippogriff.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));
|
||||
return CardFactoryUtil.playerXCount(players, calcX[1], card) * multiplier;
|
||||
}
|
||||
*/
|
||||
*/
|
||||
|
||||
List<Card> list = new ArrayList<Card>();
|
||||
if (calcX[0].startsWith("Sacrificed")) {
|
||||
@@ -610,7 +610,7 @@ public class AbilityUtils {
|
||||
source = null;
|
||||
ArrayList<Card> tgts = sa.findTargetedCards();
|
||||
if (!tgts.isEmpty()) {
|
||||
source = tgts.get(0);
|
||||
source = tgts.get(0);
|
||||
}
|
||||
if (source == null) {
|
||||
return new ArrayList<Card>();
|
||||
@@ -646,7 +646,7 @@ public class AbilityUtils {
|
||||
valid = valid.replace("X", Integer.toString(calculateAmount(source, "X", sa)));
|
||||
}
|
||||
return CardLists.getValidCards(list, valid.split(","), sa.getActivatingPlayer(), source);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -1050,8 +1050,9 @@ public class AbilityUtils {
|
||||
|
||||
@Override
|
||||
public void execute() {
|
||||
if ( isSwitched && execSubsWhenNotPaid || execSubsWhenPaid)
|
||||
if (isSwitched && execSubsWhenNotPaid || execSubsWhenPaid) {
|
||||
resolveSubAbilities(sa, usedStack, game);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1061,8 +1062,9 @@ public class AbilityUtils {
|
||||
@Override
|
||||
public void execute() {
|
||||
sa.resolve();
|
||||
if ( isSwitched && execSubsWhenPaid || execSubsWhenNotPaid)
|
||||
if (isSwitched && execSubsWhenPaid || execSubsWhenNotPaid) {
|
||||
resolveSubAbilities(sa, usedStack, game);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1083,10 +1085,10 @@ public class AbilityUtils {
|
||||
boolean paid = false;
|
||||
for (Player payer : payers) {
|
||||
if (payer.isComputer()) {
|
||||
if ( AbilityUtils.willAIPayForAbility(sa, payer, ability, paid, payers) ) {
|
||||
if (AbilityUtils.willAIPayForAbility(sa, payer, ability, paid, payers)) {
|
||||
ability.setActivatingPlayer(payer);
|
||||
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;
|
||||
}
|
||||
}
|
||||
@@ -1117,8 +1119,6 @@ public class AbilityUtils {
|
||||
*
|
||||
* @param sa
|
||||
* a SpellAbility object.
|
||||
* @param af
|
||||
* a {@link forge.card.ability.AbilityFactory} object.
|
||||
*/
|
||||
public static void handleRemembering(final SpellAbility sa) {
|
||||
Card host = sa.getSourceCard();
|
||||
@@ -1140,14 +1140,19 @@ public class AbilityUtils {
|
||||
}
|
||||
} else if (sa.getParam("Cost").contains("Sac")) {
|
||||
final List<Card> paidListSacrificed = sa.getPaidList("Sacrificed");
|
||||
for (final Card SacrificedAsCost : paidListSacrificed) {
|
||||
host.addRemembered(SacrificedAsCost);
|
||||
for (final Card sacrificedAsCost : paidListSacrificed) {
|
||||
host.addRemembered(sacrificedAsCost);
|
||||
}
|
||||
} else if (sa.getParam("Cost").contains("tapXType")) {
|
||||
final List<Card> paidListTapped = sa.getPaidList("Tapped");
|
||||
for (final Card tappedAsCost : paidListTapped) {
|
||||
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 isMine = sa.getActivatingPlayer().equals(payer);
|
||||
|
||||
if (payNever) return false;
|
||||
if (payForOwnOnly && !isMine) return false;
|
||||
if (payNever) { return false; }
|
||||
if (payForOwnOnly && !isMine) { return false; }
|
||||
|
||||
// AI will only pay when it's not already payed and only opponents abilities
|
||||
if (paid || (payers.size() > 1 && (isMine && !payForOwnOnly))) {
|
||||
return false;
|
||||
}
|
||||
if (ComputerUtilCost.canPayCost(ability, payer)
|
||||
&& ComputerUtilCost.checkLifeCost(payer, ability.getPayCosts(), source, 4, sa)
|
||||
&& ComputerUtilCost.checkDamageCost(payer, ability.getPayCosts(), source, 4)
|
||||
&& ComputerUtilCost.checkDiscardCost(payer, ability.getPayCosts(), source)
|
||||
&& (!source.getName().equals("Tyrannize") || payer.getCardsIn(ZoneType.Hand).size() > 2)
|
||||
&& (!source.getName().equals("Breaking Point") || payer.getCreaturesInPlay().size() > 1)) {
|
||||
&& ComputerUtilCost.checkLifeCost(payer, ability.getPayCosts(), source, 4, sa)
|
||||
&& ComputerUtilCost.checkDamageCost(payer, ability.getPayCosts(), source, 4)
|
||||
&& ComputerUtilCost.checkDiscardCost(payer, ability.getPayCosts(), source)
|
||||
&& (!source.getName().equals("Tyrannize") || payer.getCardsIn(ZoneType.Hand).size() > 2)
|
||||
&& (!source.getName().equals("Breaking Point") || payer.getCreaturesInPlay().size() > 1)) {
|
||||
// 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
|
||||
return true;
|
||||
|
||||
@@ -311,10 +311,8 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
||||
tgtCards = tgt.getTargetCards();
|
||||
} else {
|
||||
tgtCards = new ArrayList<Card>();
|
||||
for (ZoneType o : origin) {
|
||||
for (final Card c : sa.knownDetermineDefined(sa.getParam("Defined"))) {
|
||||
tgtCards.add(c);
|
||||
}
|
||||
for (final Card c : AbilityUtils.getDefinedCards(sa.getSourceCard(), sa.getParam("Defined"), sa)) {
|
||||
tgtCards.add(c);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -339,6 +337,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
||||
} // End of change from stack
|
||||
|
||||
final String remember = sa.getParam("RememberChanged");
|
||||
final String forget = sa.getParam("ForgetChanged");
|
||||
final String imprint = sa.getParam("Imprint");
|
||||
|
||||
if (sa.hasParam("Unimprint")) {
|
||||
@@ -467,6 +466,9 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
||||
if (remember != null) {
|
||||
hostCard.addRemembered(movedCard);
|
||||
}
|
||||
if (forget != null) {
|
||||
sa.getSourceCard().getRemembered().remove(movedCard);
|
||||
}
|
||||
if (imprint != null) {
|
||||
hostCard.addImprinted(movedCard);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user