abLoseLife[Tgt] keyword
Post MTG Forge Related Programming Questions Here
Moderators: timmermac, Blacksmith, KrazyTheFox, Agetian, friarsol, CCGHQ Admins
1 post
• Page 1 of 1
abLoseLife[Tgt] keyword
by Rob Cashwalker » 16 Mar 2010, 11:39
No surprise, after the success of spLoseLife....
Same basic syntax of course.
Same basic syntax of course.
- Code: Select all
abLoseLife[Tgt] {mana/tap cost}:NumLife[:Drawback][:spellDescription][:stackDescription]
- Code: Select all
Acolyte of Xathrid
B
Creature Human Cleric
no text
0/1
abLoseLifeTgt 1 B T:1
Blightspeaker
1 B
Creature Human Rebel Cleric
no text
1/1
abLoseLifeTgt T:1
SearchMerc:4
Cackling Imp
2 B B
Creature Imp
no text
2/2
abLoseLifeTgt T:1
Onyx Goblet
2 B
Artifact
no text
abLoseLifeTgt T:1
Orzhova, the Church of Deals
no cost
Land
no text
tap: add 1
abLoseLifeTgt 3 W B T:1:Drawback$YouGainLife/1:Target player loses 1 life and you gain 1 life.
Stormscape Master
2 U U
Creature Human Wizard
no text
2/2
abPumpTgt W W T:Protection from white.
abPumpTgt W W T:Protection from blue.
abPumpTgt W W T:Protection from black.
abPumpTgt W W T:Protection from red.
abPumpTgt W W T:Protection from green.
abLoseLifeTgt B B T:2:Drawback$YouGainLife/2:Target player loses 2 life and you gain 2 life.
Thunderscape Apprentice
R
Creature Human Wizard
no text
1/1
abLoseLifeTgt B T:1
abPumpTgt G T:+1/+1
- Code: Select all
if (hasKeyword(card, "abLoseLife") != -1)
{
int n = hasKeyword(card, "abLoseLife");
if (n != -1)
{
String parse = card.getKeyword().get(n).toString();
card.removeIntrinsicKeyword(parse);
String k[] = parse.split(":");
final boolean Tgt[] = {false};
Tgt[0] = k[0].contains("Tgt");
String tmpCost = "";
if (Tgt[0])
tmpCost = k[0].substring(13);
else
tmpCost = k[0].substring(10);
boolean tapCost = false;
boolean tapOnlyCost = false;
if (tmpCost.contains("T"))
{
tapCost = true;
tmpCost = tmpCost.replace("T", "").trim();
if (tmpCost.length() == 0)
tapOnlyCost = true;
}
final String manaCost = tmpCost;
final int NumLife[] = {-1};
final String NumLifeX[] = {"none"};
if (k[1].matches("X"))
{
String x = card.getSVar(k[1]);
if (x.startsWith("Count$"))
{
String kk[] = x.split("\\$");
NumLifeX[0] = kk[1];
}
}
else if (k[1].matches("[0-9][0-9]?"))
NumLife[0] = Integer.parseInt(k[1]);
// drawbacks and descriptions
final String DrawBack[] = {"none"};
final String spDesc[] = {"none"};
final String stDesc[] = {"none"};
if (k.length > 2)
{
if (k[2].contains("Drawback$"))
{
String kk[] = k[2].split("\\$");
DrawBack[0] = kk[1];
if (k.length > 3)
spDesc[0] = k[3];
if (k.length > 4)
stDesc[0] = k[4];
}
else
{
if (k.length > 2)
spDesc[0] = k[2];
if (k.length > 3)
stDesc[0] = k[3];
}
}
else
{
if (Tgt[0] == true)
{
spDesc[0] = "Target player loses " + NumLife[0] + " life.";
stDesc[0] = cardName + " - target player loses life";
}
else
{
spDesc[0] = "You lose " + NumLife[0] + " life.";
stDesc[0] = cardName + " - you lose life";
}
}
if (!tapCost)
{
final SpellAbility abLoseLife = new Ability_Activated(card, manaCost)
{
private static final long serialVersionUID = -936369754466156082L;
public int getNumLife()
{
if (NumLife[0] != -1)
return NumLife[0];
if (! NumLifeX[0].equals("none"))
return CardFactoryUtil.xCount(card, NumLifeX[0]);
return 0;
}
public boolean canPlayAI()
{
Random r = new Random();
boolean rr = false; // prevent run-away activations - first time will always return true
if (r.nextFloat() <= Math.pow(.6667, card.getAbilityUsed()))
rr = true;
if (Tgt[0] == true)
{
setTargetPlayer(Constant.Player.Human);
return true && rr;
}
else
{ // assumes there's a good Drawback$ that makes losing life worth it
int nlife = getNumLife();
if ((AllZone.Computer_Life.getLife() - nlife) >= 10)
return true && rr;
else
return false;
}
}
public void resolve()
{
int nlife = getNumLife();
String TgtPlayer;
if (Tgt[0] == true)
TgtPlayer = getTargetPlayer();
else
TgtPlayer = card.getController();
AllZone.GameAction.subLife(TgtPlayer, nlife);
if (!DrawBack[0].equals("none"))
CardFactoryUtil.doDrawBack(DrawBack[0], nlife, card.getController(), AllZone.GameAction.getOpponent(card.getController()), TgtPlayer, card, null);
}//resolve()
};//SpellAbility
if (Tgt[0] == true)
abLoseLife.setBeforePayMana(CardFactoryUtil.input_targetPlayer(abLoseLife));
abLoseLife.setDescription(manaCost + ": " + spDesc[0]);
abLoseLife.setStackDescription(stDesc[0]);
card.addSpellAbility(abLoseLife);
}
else
{
final SpellAbility abLoseLife = new Ability_Tap(card)
{
private static final long serialVersionUID = -3661692584660594012L;
public int getNumLife()
{
if (NumLife[0] != -1)
return NumLife[0];
if (! NumLifeX[0].equals("none"))
return CardFactoryUtil.xCount(card, NumLifeX[0]);
return 0;
}
public boolean canPlayAI()
{
boolean att = !CardFactoryUtil.AI_doesCreatureAttack(card);
if (Tgt[0] == true)
{
setTargetPlayer(Constant.Player.Human);
return true && att;
}
else
{ // assumes there's a good Drawback$ that makes losing life worth it
int nlife = getNumLife();
if ((AllZone.Computer_Life.getLife() - nlife) >= 10)
return true && att;
else
return false;
}
}
public void resolve()
{
int nlife = getNumLife();
String TgtPlayer;
if (Tgt[0] == true)
TgtPlayer = getTargetPlayer();
else
TgtPlayer = card.getController();
AllZone.GameAction.subLife(TgtPlayer, nlife);
if (!DrawBack[0].equals("none"))
CardFactoryUtil.doDrawBack(DrawBack[0], nlife, card.getController(), AllZone.GameAction.getOpponent(card.getController()), TgtPlayer, card, null);
}//resolve()
};//SpellAbility
if (Tgt[0] == true)
abLoseLife.setBeforePayMana(CardFactoryUtil.input_targetPlayer(abLoseLife));
if (tapOnlyCost)
abLoseLife.setDescription("Tap: " + spDesc[0]);
else
{
abLoseLife.setDescription(manaCost + ", tap: " + spDesc[0]);
abLoseLife.setManaCost(manaCost);
}
abLoseLife.setStackDescription(stDesc[0]);
card.addSpellAbility(abLoseLife);
}
}
}// abLoseLife
The Force will be with you, Always.
-
Rob Cashwalker - Programmer
- Posts: 2167
- Joined: 09 Sep 2008, 15:09
- Location: New York
- Has thanked: 5 times
- Been thanked: 40 times
1 post
• Page 1 of 1
Who is online
Users browsing this forum: Grahamidela and 25 guests