mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-15 18:28:00 +00:00
* Added boseiju_who_shelters_all.txt
* You may indicate 'not' condition on card restrictions (ex: boseiju script)
This commit is contained in:
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -1237,6 +1237,7 @@ res/cardsfolder/b/boros_signet.txt svneol=native#text/plain
|
||||
res/cardsfolder/b/boros_swiftblade.txt svneol=native#text/plain
|
||||
res/cardsfolder/b/borrowing_100000_arrows.txt svneol=native#text/plain
|
||||
res/cardsfolder/b/borrowing_the_east_wind.txt svneol=native#text/plain
|
||||
res/cardsfolder/b/boseiju_who_shelters_all.txt -text
|
||||
res/cardsfolder/b/bosh_iron_golem.txt svneol=native#text/plain
|
||||
res/cardsfolder/b/bosh_iron_golem_avatar.txt -text
|
||||
res/cardsfolder/b/bosk_banneret.txt svneol=native#text/plain
|
||||
|
||||
8
res/cardsfolder/b/boseiju_who_shelters_all.txt
Normal file
8
res/cardsfolder/b/boseiju_who_shelters_all.txt
Normal file
@@ -0,0 +1,8 @@
|
||||
Name:Boseiju, Who Shelters All
|
||||
ManaCost:no cost
|
||||
Types:Legandary Land
|
||||
K:CARDNAME enters the battlefield tapped.
|
||||
A:AB$ Mana | Cost$ T PayLife<2> | Produced$ 1 | AddsNoCounter$ !Permanent | SpellDescription$ Add {1} to your mana pool. If that mana is spent on an instant or sorcery spell, that spell can't be countered by spells or abilities.
|
||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/boseju_who_shelters_all.jpg
|
||||
Oracle:Boseiju, Who Shelters All enters the battlefield tapped.\n{T}, Pay 2 life: Add {1} to your mana pool. If that mana is spent on an instant or sorcery spell, that spell can't be countered by spells or abilities.{T}, Pay 1 life: Add {G} or {W} to your mana pool.\n{1}, {T}, Sacrifice Horizon Canopy: Draw a card.
|
||||
SetInfo:CHK Rare
|
||||
@@ -5101,15 +5101,21 @@ public class Card extends GameEntity implements Comparable<Card> {
|
||||
// Inclusive restrictions are Card types
|
||||
final String[] incR = restriction.split("\\.", 2);
|
||||
|
||||
boolean testFailed = false;
|
||||
if(incR[0].startsWith("!")) {
|
||||
testFailed = true; // a bit counter logical ))
|
||||
incR[0] = incR[0].substring(1); // consume negation sign
|
||||
}
|
||||
|
||||
if (incR[0].equals("Spell") && !this.isSpell()) {
|
||||
return false;
|
||||
return testFailed;
|
||||
}
|
||||
if (incR[0].equals("Permanent") && (this.isInstant() || this.isSorcery())) {
|
||||
return false;
|
||||
return testFailed;
|
||||
}
|
||||
if (!incR[0].equals("card") && !incR[0].equals("Card") && !incR[0].equals("Spell")
|
||||
&& !incR[0].equals("Permanent") && !(this.isType(incR[0]))) {
|
||||
return false; // Check for wrong type
|
||||
return testFailed; // Check for wrong type
|
||||
}
|
||||
|
||||
if (incR.length > 1) {
|
||||
@@ -5117,11 +5123,11 @@ public class Card extends GameEntity implements Comparable<Card> {
|
||||
final String[] exR = excR.split("\\+"); // Exclusive Restrictions are ...
|
||||
for (int j = 0; j < exR.length; j++) {
|
||||
if (!this.hasProperty(exR[j], sourceController, source)) {
|
||||
return false;
|
||||
return testFailed;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
return !testFailed;
|
||||
} // isValid(String Restriction)
|
||||
|
||||
// Takes arguments like Blue or withFlying
|
||||
|
||||
@@ -20,6 +20,7 @@ package forge.card.mana;
|
||||
import forge.Card;
|
||||
import forge.card.MagicColor;
|
||||
import forge.card.spellability.AbilityManaPart;
|
||||
import forge.card.spellability.SpellAbility;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -38,7 +39,6 @@ public class Mana {
|
||||
result = prime * result + color;
|
||||
result = prime * result + (hasRestrictions ? 1231 : 1237);
|
||||
result = prime * result + ((manaAbility == null) ? 0 : manaAbility.hashCode());
|
||||
result = prime * result + (pumpCounterMagic ? 1231 : 1237);
|
||||
result = prime * result + ((sourceCard == null) ? 0 : sourceCard.hashCode());
|
||||
return result;
|
||||
}
|
||||
@@ -69,7 +69,6 @@ public class Mana {
|
||||
private Card sourceCard = null;
|
||||
private AbilityManaPart manaAbility = null;
|
||||
private boolean hasRestrictions = false;
|
||||
private boolean pumpCounterMagic = false;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -90,9 +89,6 @@ public class Mana {
|
||||
if (!manaAbility.getManaRestrictions().isEmpty()) {
|
||||
this.hasRestrictions = true;
|
||||
}
|
||||
if (manaAbility.cannotCounterPaidWith()) {
|
||||
this.pumpCounterMagic = true;
|
||||
}
|
||||
}
|
||||
if (source == null) {
|
||||
return;
|
||||
@@ -144,8 +140,8 @@ public class Mana {
|
||||
*
|
||||
* @return a boolean.
|
||||
*/
|
||||
public final boolean addsNoCounterMagic() {
|
||||
return this.pumpCounterMagic;
|
||||
public final boolean addsNoCounterMagic(SpellAbility saBeingPaid) {
|
||||
return this.manaAbility != null && manaAbility.cannotCounterPaidWith(saBeingPaid);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -240,15 +240,8 @@ public class ManaPool {
|
||||
final Mana mana = this.getMana(manaShard, saBeingPaidFor, manaCost.getSourceRestriction());
|
||||
if (mana == null) {
|
||||
return; // no matching mana in the pool
|
||||
}
|
||||
else if (manaCost.isNeeded(mana)) {
|
||||
manaCost.payMana(mana);
|
||||
saBeingPaidFor.getPayingMana().add(mana);
|
||||
this.removeMana( mana);
|
||||
if (mana.addsNoCounterMagic() && saBeingPaidFor.getSourceCard() != null) {
|
||||
saBeingPaidFor.getSourceCard().setCanCounter(false);
|
||||
}
|
||||
}
|
||||
} else
|
||||
tryPayCostWithMana(saBeingPaidFor, manaCost, mana);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -268,25 +261,26 @@ public class ManaPool {
|
||||
// Mana restriction must be checked before this method is called
|
||||
|
||||
final List<SpellAbility> paidAbs = sa.getPayingManaAbilities();
|
||||
final List<Mana> manaPaid = sa.getPayingMana();
|
||||
|
||||
SpellAbility tail = ma;
|
||||
AbilityManaPart abManaPart = null;
|
||||
while(abManaPart == null && tail != null)
|
||||
{
|
||||
while(abManaPart == null && tail != null) {
|
||||
abManaPart = tail.getManaPart();
|
||||
tail = tail.getSubAbility();
|
||||
}
|
||||
|
||||
paidAbs.add(ma); // assumes some part on the mana produced by the ability will get used
|
||||
for (final Mana mana : abManaPart.getLastManaProduced()) {
|
||||
if (manaCost.isNeeded(mana)) {
|
||||
manaCost.payMana(mana);
|
||||
manaPaid.add(mana);
|
||||
this.removeMana(mana);
|
||||
if (mana.addsNoCounterMagic() && sa.getSourceCard() != null) {
|
||||
sa.getSourceCard().setCanCounter(false);
|
||||
}
|
||||
tryPayCostWithMana(sa, manaCost, mana);
|
||||
}
|
||||
}
|
||||
|
||||
private void tryPayCostWithMana(final SpellAbility sa, ManaCostBeingPaid manaCost, final Mana mana) {
|
||||
if (manaCost.isNeeded(mana)) {
|
||||
manaCost.payMana(mana);
|
||||
sa.getPayingMana().add(mana);
|
||||
this.removeMana(mana);
|
||||
if (mana.addsNoCounterMagic(sa) && sa.getSourceCard() != null) {
|
||||
sa.getSourceCard().setCanCounter(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,7 +55,7 @@ public class AbilityManaPart implements java.io.Serializable {
|
||||
private final transient Card sourceCard;
|
||||
|
||||
// Spells paid with this mana spell can't be countered.
|
||||
private boolean cannotCounterSpell;
|
||||
private String cannotCounterSpell;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -79,7 +79,7 @@ public class AbilityManaPart implements java.io.Serializable {
|
||||
this.manaRestrictions = params.get("RestrictValid");
|
||||
}
|
||||
|
||||
this.cannotCounterSpell = params.containsKey("AddsNoCounter");
|
||||
this.cannotCounterSpell = params.get("AddsNoCounter");
|
||||
|
||||
}
|
||||
|
||||
@@ -139,11 +139,17 @@ public class AbilityManaPart implements java.io.Serializable {
|
||||
* <p>
|
||||
* cannotCounterPaidWith.
|
||||
* </p>
|
||||
* @param saBeingPaid
|
||||
*
|
||||
* @return a {@link java.lang.String} object.
|
||||
*/
|
||||
public boolean cannotCounterPaidWith() {
|
||||
return cannotCounterSpell;
|
||||
public boolean cannotCounterPaidWith(SpellAbility saBeingPaid) {
|
||||
if (null == cannotCounterSpell) return false;
|
||||
if ("True".equalsIgnoreCase(cannotCounterSpell)) return true;
|
||||
|
||||
Card source = saBeingPaid.getSourceCard();
|
||||
if (source == null) return false;
|
||||
return source.isValid(cannotCounterSpell, sourceCard.getController(), sourceCard);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user