*Let doXMath use SVars. (See Soulless One)

*Added Soulless One
This commit is contained in:
jendave
2011-08-06 23:43:03 +00:00
parent aa3a17b654
commit 17d8443dd2
3 changed files with 70 additions and 45 deletions

1
.gitattributes vendored
View File

@@ -6472,6 +6472,7 @@ res/cardsfolder/soulbound_guardians.txt -text svneol=native#text/plain
res/cardsfolder/soulcatcher.txt -text svneol=native#text/plain
res/cardsfolder/soulcatchers_aerie.txt -text svneol=native#text/plain
res/cardsfolder/souldrinker.txt -text svneol=native#text/plain
res/cardsfolder/soulless_one.txt -text svneol=native#text/plain
res/cardsfolder/soulquake.txt svneol=native#text/plain
res/cardsfolder/souls_attendant.txt -text svneol=native#text/plain
res/cardsfolder/souls_might.txt -text svneol=native#text/plain

View File

@@ -0,0 +1,11 @@
Name:Soulless One
ManaCost:3 B
Types:Creature Zombie Avatar
Text:no text
PT:*/*
K:stSetPT:Count$TypeOnBattlefield.Zombie/Plus.Y:Count$TypeOnBattlefield.Zombie/Plus.Y:CARDNAME's power and toughness are each equal to the number of Zombies on the battlefield plus the number of Zombie cards in all graveyards.
#SVar:X:Count$TypeOnBattlefield.Zombie/Plus.Y
SVar:Y:Count$TypeInAllYards.Zombie
SVar:Rarity:Uncommon
SVar:Picture:http://www.wizards.com/global/images/magic/general/soulless_academy.jpg
End

View File

@@ -3309,7 +3309,7 @@ public class CardFactoryUtil {
n = cardsonbattlefield.size();
return doXMath(n, m);
return doXMath(n, m,source);
}
final String[] sq;
@@ -3317,17 +3317,17 @@ public class CardFactoryUtil {
if(sq[0].contains("CardsInHand")) {
if(players.size() > 0) {
return doXMath(AllZoneUtil.getPlayerHand(players.get(0)).size(), m);
return doXMath(AllZoneUtil.getPlayerHand(players.get(0)).size(), m, source);
}
}
if(sq[0].contains("LifeTotal")) {
if(players.size() > 0) {
return doXMath(players.get(0).getLife(), m);
return doXMath(players.get(0).getLife(), m, source);
}
}
return doXMath(n, m);
return doXMath(n, m, source);
}
//parser for non-mana X variables
@@ -3378,7 +3378,7 @@ public class CardFactoryUtil {
n = cardsonbattlefield.size();
return doXMath(n, m);
return doXMath(n, m, c);
}
final String[] sq;
@@ -3409,7 +3409,7 @@ public class CardFactoryUtil {
//TriggeringObjects
if(sq[0].startsWith("Triggered"))
{
return doXMath((Integer)c.getTriggeringObject(sq[0].substring(9)),m);
return doXMath((Integer)c.getTriggeringObject(sq[0].substring(9)),m, c);
}
// Count$Domain
@@ -3420,37 +3420,37 @@ public class CardFactoryUtil {
for(int i = 0; i < basic.length; i++)
if(!someCards.getType(basic[i]).isEmpty()) n++;
return doXMath(n, m);
return doXMath(n, m, c);
}
// Count$YourLifeTotal
if(sq[0].contains("YourLifeTotal")) {
if(cardController.isComputer()) return doXMath(AllZone.ComputerPlayer.getLife(), m);
else if(cardController.isHuman()) return doXMath(AllZone.HumanPlayer.getLife(), m);
if(cardController.isComputer()) return doXMath(AllZone.ComputerPlayer.getLife(), m, c);
else if(cardController.isHuman()) return doXMath(AllZone.HumanPlayer.getLife(), m, c);
return 0;
}
// Count$OppLifeTotal
if(sq[0].contains("OppLifeTotal")) {
if(oppController.isComputer()) return doXMath(AllZone.ComputerPlayer.getLife(), m);
else if(oppController.isHuman()) return doXMath(AllZone.HumanPlayer.getLife(), m);
if(oppController.isComputer()) return doXMath(AllZone.ComputerPlayer.getLife(), m, c);
else if(oppController.isHuman()) return doXMath(AllZone.HumanPlayer.getLife(), m, c);
return 0;
}
// Count$YourPoisonCounters
if(sq[0].contains("YourPoisonCounters")) {
if(cardController.isComputer()) return doXMath(AllZone.ComputerPlayer.getPoisonCounters(), m);
else if(cardController.isHuman()) return doXMath(AllZone.HumanPlayer.getPoisonCounters(), m);
if(cardController.isComputer()) return doXMath(AllZone.ComputerPlayer.getPoisonCounters(), m, c);
else if(cardController.isHuman()) return doXMath(AllZone.HumanPlayer.getPoisonCounters(), m, c);
return 0;
}
// Count$OppPoisonCounters
if(sq[0].contains("OppPoisonCounters")) {
if(oppController.isComputer()) return doXMath(AllZone.ComputerPlayer.getPoisonCounters(), m);
else if(oppController.isHuman()) return doXMath(AllZone.HumanPlayer.getPoisonCounters(), m);
if(oppController.isComputer()) return doXMath(AllZone.ComputerPlayer.getPoisonCounters(), m, c);
else if(oppController.isHuman()) return doXMath(AllZone.HumanPlayer.getPoisonCounters(), m, c);
return 0;
}
@@ -3467,53 +3467,53 @@ public class CardFactoryUtil {
// Count$Chroma.<mana letter>
if(sq[0].contains("Chroma")) return doXMath(
getNumberOfManaSymbolsControlledByColor(sq[1], cardController), m);
getNumberOfManaSymbolsControlledByColor(sq[1], cardController), m, c);
// Count$Hellbent.<numHB>.<numNotHB>
if(sq[0].contains("Hellbent"))
{
if(myHand.size() <= 0)
return doXMath(Integer.parseInt(sq[1]), m); // Hellbent
return doXMath(Integer.parseInt(sq[1]), m, c); // Hellbent
else
return doXMath(Integer.parseInt(sq[2]), m); // not Hellbent
return doXMath(Integer.parseInt(sq[2]), m, c); // not Hellbent
}
//Count$Metalcraft.<numMC>.<numNotMC>
if(sq[0].contains("Metalcraft"))
{
if(cardController.hasMetalcraft())
return doXMath(Integer.parseInt(sq[1]),m);
return doXMath(Integer.parseInt(sq[1]),m, c);
else
return doXMath(Integer.parseInt(sq[2]),m);
return doXMath(Integer.parseInt(sq[2]),m, c);
}
if (sq[0].contains("Threshold"))
{
if (myYard.size() >= 7)
return doXMath(Integer.parseInt(sq[1]), m); // Have Threshold
return doXMath(Integer.parseInt(sq[1]), m, c); // Have Threshold
else
return doXMath(Integer.parseInt(sq[2]), m); // not Threshold
return doXMath(Integer.parseInt(sq[2]), m, c); // not Threshold
}
// Count$CardPower
if(sq[0].contains("CardPower")) return doXMath(c.getNetAttack(), m);
if(sq[0].contains("CardPower")) return doXMath(c.getNetAttack(), m, c);
// Count$CardToughness
if(sq[0].contains("CardToughness")) return doXMath(c.getNetDefense(), m);
if(sq[0].contains("CardToughness")) return doXMath(c.getNetDefense(), m, c);
// Count$CardManaCost
if(sq[0].contains("CardManaCost")) return doXMath(CardUtil.getConvertedManaCost(c), m);
if(sq[0].contains("CardManaCost")) return doXMath(CardUtil.getConvertedManaCost(c), m, c);
// Count$CardCounters.<counterType>
if (sq[0].contains("CardCounters"))
return doXMath(c.getCounters(Counters.getType(sq[1])), m);
return doXMath(c.getCounters(Counters.getType(sq[1])), m, c);
// Count$TimesKicked
if(sq[0].contains("TimesKicked"))
return doXMath(c.getMultiKickerMagnitude(), m);
return doXMath(c.getMultiKickerMagnitude(), m, c);
if(sq[0].contains("NumCounters")) {
int num = c.getCounters(Counters.getType(sq[1]));
return doXMath(num, m);
return doXMath(num, m, c);
}
if(sq[0].contains("NumBlockingMe"))
return doXMath(AllZone.Combat.getBlockers(c).size(), m);
return doXMath(AllZone.Combat.getBlockers(c).size(), m, c);
//Count$IfMainPhase.<numMain>.<numNotMain> // 7/10
if (sq[0].contains("IfMainPhase"))
@@ -3522,9 +3522,9 @@ public class CardFactoryUtil {
if ((cPhase.equals(Constant.Phase.Main1) ||
cPhase.equals(Constant.Phase.Main2)) &&
AllZone.Phase.getPlayerTurn().equals(cardController))
return doXMath(Integer.parseInt(sq[1]), m);
return doXMath(Integer.parseInt(sq[1]), m, c);
else
return doXMath(Integer.parseInt(sq[2]), m); // not Main Phase
return doXMath(Integer.parseInt(sq[2]), m, c); // not Main Phase
}
//Count$ThisTurnEntered <ZoneDestination> <ZoneOrigin> <Valid>
@@ -3559,7 +3559,7 @@ public class CardFactoryUtil {
}
});
return doXMath(res.size(),m);
return doXMath(res.size(),m, c);
}
//Generic Zone-based counting
@@ -3727,9 +3727,9 @@ public class CardFactoryUtil {
if(sq[0].contains("CardMulticolor"))
{
if(CardUtil.getColors(c).size() > 1)
return doXMath(Integer.parseInt(sq[1]),m);
return doXMath(Integer.parseInt(sq[1]),m, c);
else
return doXMath(Integer.parseInt(sq[2]),m);
return doXMath(Integer.parseInt(sq[2]),m, c);
}
// 1/10 - Count$MaxCMCYouCtrl
@@ -3741,37 +3741,50 @@ public class CardFactoryUtil {
if(cmc > mmc) mmc = cmc;
}
return doXMath(mmc, m);
return doXMath(mmc, m, c);
}
n = someCards.size();
return doXMath(n, m);
return doXMath(n, m, c);
}
private static int doXMath(int num, String m){
private static int doXMath(int num, String m,Card c){
if(m.equals("none")) return num;
String[] s = m.split("\\.");
int secondaryNum = 0;
if(s[0].contains("Plus")) return num + Integer.parseInt(s[1]);
else if(s[0].contains("NMinus")) return Integer.parseInt(s[1]) - num;
else if(s[0].contains("Minus")) return num - Integer.parseInt(s[1]);
try
{
if(s.length == 2)
{
secondaryNum = Integer.parseInt(s[1]);
}
}
catch(Exception e)
{
secondaryNum = xCount(c, c.getSVar(s[1]));
}
if(s[0].contains("Plus")) return num + secondaryNum;
else if(s[0].contains("NMinus")) return secondaryNum - num;
else if(s[0].contains("Minus")) return num - secondaryNum;
else if(s[0].contains("Twice")) return num * 2;
else if(s[0].contains("HalfUp")) return (int) (Math.ceil(num / 2.0));
else if(s[0].contains("HalfDown")) return (int) (Math.floor(num / 2.0));
else if(s[0].contains("ThirdUp")) return (int) (Math.ceil(num / 3.0));
else if(s[0].contains("ThirdDown")) return (int) (Math.floor(num / 3.0));
else if(s[0].contains("Negative")) return num * -1;
else if(s[0].contains("Times")) return num * Integer.parseInt(s[1]);
else if(s[0].contains("Times")) return num * secondaryNum;
else return num;
}
private static int doXMath(int num, String[] m) {
private static int doXMath(int num, String[] m, Card c) {
if (m.length == 0)
return num;
return doXMath(num, m[0]);
return doXMath(num, m[0],c);
}
public static int handlePaid(CardList paidList, String string, Card source) {
@@ -3781,7 +3794,7 @@ public class CardFactoryUtil {
if (string.startsWith("Amount")){
if (string.contains(".")){
String[] splitString = string.split("\\.", 2);
return doXMath(paidList.size(), splitString[1]);
return doXMath(paidList.size(), splitString[1],source);
}
else
return paidList.size();
@@ -3829,7 +3842,7 @@ public class CardFactoryUtil {
//for(int i = 1; i < dd.length; i++)
// ddd.add(dd[i]);
X = doXMath(X, m);
X = doXMath(X, m, Src);
}
}
else if(d[1].matches("[0-9][0-9]?"))