Re: Mana Pool
Also, since mana burn is at end of phase, the code for my "mana tokens" would have to be tweaked a little, since as is they die at end of turn.
High Quality Resources for Collectible Card Games and Home of the CCGHQ Team
https://www.slightlymagic.net/forum/
https://www.slightlymagic.net/forum/viewtopic.php?f=52&t=1205
This is entirely true, although most of the time this is not an issue. You could imagine, though, that the spells automatically get the mana from the manapool, but ask you to select which ones to use if there are several possibilities.zerker2000 wrote:As for the spells automatically taking mana from the pool, that could be problematic... here, let me make up a story:
Your main phase begins, you only have one life left,![]()
in your mana pool, and only one (an untapped Rakdos Carnarium thankfully) land. Though without it you would have surely been toast (when the computer swung out that 57/57 Mycoloth, and later started making tons of 1/1 s with Nemata, Grove Guardian while having a Mycologist out ... who knew a saproling deck could be so powerful in the computer's hands?), your Altar of Shadows has simply been a nuisance lately, bringing you down from 4 to 3 and last turn 1 since that computer Armageddon -ed your 14 lands. However, you did kill off all the serious threats, and now you just need a blocker... you have a Fiery Temper and an Avatar of Discord in hand, so you tap the land, play the avatar, discard your remaining two hards... and notice that forge just played your Avatar for
![]()
![]()
, so you
a) can't deal the 3 damage to stop his Elspeth, Knight-Errant from making his permanents indestructible,
about which you don't care since
b) you're going to die of mana burn. So there you are, dead of a leech-riddenbecause of a mana pool usability problem.
How was the final chapter of "The Autobiography of Rob Planeswaker"?
It sure looks like you could play them anytime during the phase...Magic: The Gathering Comprehensive Rules wrote:The player determines the total cost of the spell or ability. Usually this is just the mana cost (for spells) or activation cost (for abilities). Some cards list additional or alternative costs in their text. Some effects may increase or reduce the cost to pay, or may provide other alternative costs. Costs may include paying mana, tapping permanents, sacrificing permanents, discarding cards, and so on. The total cost is the mana cost, activation cost, or alternative cost (as determined in rule 409.1b), plus all additional costs and cost increases, and minus all cost reductions. If the mana component of the total cost is reduced to nothing by cost reduction effects, it is considered to be. It can't be reduced to less than
. Once the total cost is determined, it becomes "locked in." If effects would change the total cost after this time, they have no effect.
409.1g If the total cost includes a mana payment, the player then has a chance to play mana abilities (see rule 411, "Playing Mana Abilities"). Mana abilities must be played before costs are paid.
No, you declare the spell then PAY its costs. Paying mana costs actually requires mana in the pool already, and you then specify which mana in the pool you will use to pay it. 409.1g basically allows you the opportunity to play mana abilities to add the required mana, THEN declare how the spell will be payed for. In general players tend to blur the process, and we usually understand that costs are paid for by tapping lands. Following the actual process is critical when mana sources other than mana abilites are used, such as enchantments that just make mana appear in the pool.frowolo wrote:Note that the rules of Magic say that you have to declare the Spell THEN tap your lands
for card pictures)Which is the exact advantage as my tokens. However you code "Add <amount>+/&<color>+/&<restrictions on playing it> to your mana pool", It shouldn't be hard to make the ability give you $amount tokens that inherit "Add <color>+/&<restrictions on playing it> to your mana pool" from the original object. Also, about the little orbs of mana, you just gave me an interesting UI idea that belongs in the stacking thread... I'l quote it into here once I post it.MageKing17 wrote:Basically, you need to make each point of mana a separate object. If you don't do this, trying to deal with restrictions like "spend this mana only on creature spells" will be a pain in the ass. Once you've made each point of mana a separate object, you need the UI to handle selecting these individual points of mana (and viewing any restrictions/extra characteristics (such as being from a Snow source) on that mana).
public class Pool {
private String manaPool = new String();
public void addMana(String mana)
{
manaPool.concat(mana);
}
public void remMana(String mana)
{
manaPool.replaceFirst(mana, "");
}
public String getManaPool()
{
return manaPool;
}
public void setManaPool(String mPool)
{
manaPool = mPool;
}
public Pool()
{
manaPool = "";
}
}
...
public final static PlayerZone Computer_Removed = new DefaultPlayerZone(Constant.Zone.Removed_From_Play, Constant.Player.Computer);
public static Display Display = new GuiDisplay2();
>> public static Pool Human_ManaPool = new Pool();
private final static Map<String,PlayerZone> map = new HashMap<String,PlayerZone>();
...
public class Input_PayManaCost extends Input
{
private static final long serialVersionUID = 3467312982164195091L;
private final String originalManaCost;
>> private final String originalManaPool;
private final Card originalCard;
private ManaCost manaCost;
private final ArrayList<Card> tappedLand = new ArrayList<Card>();
private final SpellAbility spell;
public Input_PayManaCost(SpellAbility sa)
{
originalManaCost = sa.getManaCost();
originalCard = sa.getSourceCard();
>> originalManaPool = AllZone.Human_ManaPool.getManaPool();
spell = sa;
String tMC = sa.getManaCost();
>> String tMP = originalManaPool;
manaCost = new ManaCost(tMC);
>> for (int i=0; i <= tMP.length(); i++)
>> {
>> manaCost.subtractMana(tMP.substring(i, i + 1));
>> AllZone.Human_ManaPool.remMana(tMP.substring(i, i + 1));
>> }
}
private void resetManaCost()
{
manaCost = new ManaCost(originalManaCost);
>> AllZone.Human_ManaPool.setManaPool(originalManaPool);
}
...
if (cardName.equals("Seething Song"))
{
final SpellAbility spell = new Spell(card)
{
private static final long serialVersionUID = 113811381138L;
public void resolve()
{
AllZone.Human_ManaPool.addMana("RRR");
}
public boolean canPlayAI()
{
return false;
}
};
card.clearSpellAbility();
card.addSpellAbility(spell);
return card;
}