Theros Spoiler Season
Post MTG Forge Related Programming Questions Here
Moderators: timmermac, Blacksmith, KrazyTheFox, Agetian, friarsol, CCGHQ Admins
Re: Theros Spoiler Season
by gos » 27 Aug 2013, 14:41
If the rules text for Thassa, God of the Sea on mtgsalvation is correct, I'm leaning slightly towards Enchantment type for God, because Thassa is a non-Creature Enchantment if your devotion to blue is less than five.
Thus, if God is a creature type, it would require players to know that it essentially disappears (doesn't it?) along with the Creature type for this card if you have less than 5 Islands. That's pretty opaque and allows the opportunity for feel-bad gotcha moments for less knowledgeable players, something we know that Wizards try to steer away from.
Just my two cents.
Thus, if God is a creature type, it would require players to know that it essentially disappears (doesn't it?) along with the Creature type for this card if you have less than 5 Islands. That's pretty opaque and allows the opportunity for feel-bad gotcha moments for less knowledgeable players, something we know that Wizards try to steer away from.
Just my two cents.
- gos
- Posts: 4369
- Joined: 03 Mar 2011, 15:21
- Location: Reykjavík, Iceland
- Has thanked: 231 times
- Been thanked: 232 times
Re: Theros Spoiler Season
by friarsol » 27 Aug 2013, 14:44
Seems like a lot of Gotcha moments already considering the Bestowed Aura Targeting issue I mentioned. Hopefully they'll have some clarification soon.gos wrote:Thus, if God is a creature type, it would require players to know that it essentially disappears (doesn't it?) along with the Creature type for this card if you have less than 5 Islands. That's pretty opaque and allows the opportunity for feel-bad gotcha moments for less knowledgeable players, something we know that Wizards try to steer away from.
- friarsol
- Global Moderator
- Posts: 7593
- Joined: 15 May 2010, 04:20
- Has thanked: 243 times
- Been thanked: 965 times
Re: Theros Spoiler Season
by gos » 27 Aug 2013, 15:27
Admittedly.friarsol wrote:Seems like a lot of Gotcha moments already considering the Bestowed Aura Targeting issue I mentioned. Hopefully they'll have some clarification soon.
- gos
- Posts: 4369
- Joined: 03 Mar 2011, 15:21
- Location: Reykjavík, Iceland
- Has thanked: 231 times
- Been thanked: 232 times
Re: Theros Spoiler Season
by Marek14 » 28 Aug 2013, 13:42
If TriggerBecomesTarget, wouldn't it also trigger when something is retargeted to it? That shouldn't happen.swordshine wrote:I think we should tweak MagicStack.hasFizzled(SpellAbility, Card, boolean).friarsol wrote:Just read something annoying about Bestowed. Apparently if cast as an Aura and it's target is illegal when on the Stack it still resolves as a creature.
https://twitter.com/TabakRules/statuses ... 6903556098
Devotion and Chroma are almost the same.
Which is the better script for "Heroic", TriggerSpellCast or TriggerBecomesTarget?
Re: Theros Spoiler Season
by swordshine » 28 Aug 2013, 14:43
Thanks for pointing it out. I personally perferred the SpellCast trigger before I ask the question.Marek14 wrote:If TriggerBecomesTarget, wouldn't it also trigger when something is retargeted to it? That shouldn't happen.
- swordshine
- Posts: 682
- Joined: 11 Jul 2010, 02:37
- Has thanked: 116 times
- Been thanked: 87 times
Re: Theros Spoiler Season
by swordshine » 02 Sep 2013, 04:27
Hundred-Handed One can block an additional ninety-nine creatures
- swordshine
- Posts: 682
- Joined: 11 Jul 2010, 02:37
- Has thanked: 116 times
- Been thanked: 87 times
Re: Theros Spoiler Season
by swordshine » 02 Sep 2013, 13:30
The official spoiler starts. Can someone stick this thread?
- swordshine
- Posts: 682
- Joined: 11 Jul 2010, 02:37
- Has thanked: 116 times
- Been thanked: 87 times
Re: Theros Spoiler Season
by Chris H. » 02 Sep 2013, 14:15
swordshine wrote:The official spoiler starts. Can someone stick this thread?
Now stickied.
-
Chris H. - Forge Moderator
- Posts: 6320
- Joined: 04 Nov 2008, 12:11
- Location: Mac OS X Yosemite
- Has thanked: 644 times
- Been thanked: 643 times
Re: Theros Spoiler Season
by torridus » 03 Sep 2013, 19:12
I almost finished Curse of the Swine, but I can't quite get the tokens to ETB properly. After the targeted creatures get exiled, the tokens only ETB under your control.
Side note: I was testing this with Forge 1.2.11 so some things might be different.
Side note: I was testing this with Forge 1.2.11 so some things might be different.
- Curse of the Swine | Open
- Code: Select all
Name:Curse of the Swine
ManaCost:X U U
Types:Sorcery
Text:no text
A:SP$ ChangeZone | Cost$ X U U | Origin$ Battlefield | Destination$ Exile | TargetMin$ 0 | TargetMax$ MaxTgts | References$ X,MaxTgts | ValidTgts$ Creature | TgtPrompt$ Select target creature | SubAbility$ DBToken | SpellDescription$ Exile X target creatures. For each creature exiled this way, its controller puts a 2/2 green Boar creature token onto the battlefield.
SVar:X:Targeted$Amount
SVar:MaxTgts:Count$Valid Creature
SVar:DBToken:DB$Token | TokenAmount$ X | TokenName$ Boar | TokenTypes$ Creature,Boar | TokenOwner$ TargetedController | TokenColors$ Green | TokenPower$ 2 | TokenToughness$ 2 | References$ X
SVar:RemAIDeck:True
SVar:Rarity:Rare
End
Re: Theros Spoiler Season
by friarsol » 03 Sep 2013, 19:37
The problem is you only have one Token creation occurring. One token needs to be created for each creature sucessfully removed. But you are only creating X tokens once, and using the first TargetedController.torridus wrote:
I'm assuming the problem lies with TokenOwner$ but Forge crashed with anything except TargetedController.
- friarsol
- Global Moderator
- Posts: 7593
- Joined: 15 May 2010, 04:20
- Has thanked: 243 times
- Been thanked: 965 times
Re: Theros Spoiler Season
by DeadSpeak » 03 Sep 2013, 22:01
Hey guys...
I don't know if anyone has claimed these two cards...
edit: just saw that swordshine has claimed Elspeth... sorry (well, at least I figured out the code by myself )
Omenspeaker
Later...
I don't know if anyone has claimed these two cards...
edit: just saw that swordshine has claimed Elspeth... sorry (well, at least I figured out the code by myself )
Omenspeaker
- | Open
- Code: Select all
Name:Omenspeaker
ManaCost:1 U
Types:Creature Human Wizard
PT:1/3
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigScry | TriggerDescription$ When CARDNAME enters the battlefield, scry 2. (To scry 2, look at the top two cards of your library, then put any number of them on the bottom of your library and the rest on top in any order.)
SVar:TrigScry:AB$Scry | Cost$ 0 | ScryNum$ 2
- | Open
- Code: Select all
Name:Elspeth, Sun's Champion
ManaCost:4 W W
Types:Planeswalker Elspeth
Loyalty:4
A:AB$ Token | Cost$ AddCounter<1/LOYALTY> | TokenAmount$ 3 | TokenName$ Soldier | TokenColors$ White | TokenTypes$ Creature,Soldier | TokenOwner$ You | TokenPower$ 1 | TokenToughness$ 1 | Planeswalker$ True | SpellDescription$ Put three 1/1 white Soldier creature tokens onto the battlefield.
A:AB$ DestroyAll | Cost$ SubCounter<3/LOYALTY> | Planeswalker$ True | ValidCards$ Creature.powerGE4 | SpellDescription$ Destroy all creatures with power 4 or greater.
A:AB$ Effect | Cost$ SubCounter<7/LOYALTY> | Name$ Elspeth, Sun's Champion emblem | Image$ elspeth_suns_champion_emblem | StaticAbilities$ STPump | Planeswalker$ True | Duration$ Permanent | AILogic$ Always | SpellDescription$ You get an emblem with "Creatures you control get +2/+2 and flying"
SVar:STPump:Mode$ Continuous | EffectZone$ Command | AffectedZone$ Battlefield | Affected$ Creature.YouCtrl | AddPower$ 2 | AddToughness$ 2 | AddKeyword$ Flying
Later...
- DeadSpeak
- Posts: 104
- Joined: 25 Dec 2009, 00:14
- Location: Denmark
- Has thanked: 4 times
- Been thanked: 3 times
Re: Theros Spoiler Season
by ZzzzSleep » 03 Sep 2013, 22:29
Hi DeadSpeak,DeadSpeak wrote:Hey guys...
I don't know if anyone has claimed these two cards...
edit: just saw that swordshine has claimed Elspeth... sorry (well, at least I figured out the code by myself )
<snip!>
I've tested both... and they work as far as I can tell.
Later...
To claim a card, just edit the page at http://www.slightlymagic.net/wiki/Forge_Upcoming . I've done it for you, for Omenspeaker. This helps us to not double up.
Re: Theros Spoiler Season
by swordshine » 07 Sep 2013, 08:54
Any ideas about Bestow?
1) Parse keyword Bestow, add a spell "SP$ Attach | AILogic$ Pump | Bestow$ True | ValidTgts$ Creature"
2) Add a static trigger to animate the card "Enchantment Aura" when cast it for the Bestow cost
3) This spell won't be fizzled
3) Set the card isBestowed when resolving
4) If an aura is bestowed, it would not move to the graveyard during state based actions. Animate the original card types.
Kor SpiritDancer's ability triggers when I cast a bestow spell.
I don't know how CopyPermanent/Clone/Play effects work with bestowed auras.
1) Parse keyword Bestow, add a spell "SP$ Attach | AILogic$ Pump | Bestow$ True | ValidTgts$ Creature"
2) Add a static trigger to animate the card "Enchantment Aura" when cast it for the Bestow cost
3) This spell won't be fizzled
3) Set the card isBestowed when resolving
4) If an aura is bestowed, it would not move to the graveyard during state based actions. Animate the original card types.
- my patch | Open
- Code: Select all
### Eclipse Workspace Patch 1.0
#P trunk
Index: src/main/java/forge/game/zone/MagicStack.java
===================================================================
--- src/main/java/forge/game/zone/MagicStack.java (revision 23136)
+++ src/main/java/forge/game/zone/MagicStack.java (working copy)
@@ -691,9 +691,10 @@
fizzle &= invalidTarget;
- if (sa.hasParam("CantFizzle")) {
+ if (sa.hasParam("CantFizzle") || sa.hasParam("Bestow")) {
// Gilded Drake cannot be countered by rules if the
// targeted card is not valid
+ // Bestow spells
fizzle = false;
}
}
Index: src/main/java/forge/card/ability/effects/AttachEffect.java
===================================================================
--- src/main/java/forge/card/ability/effects/AttachEffect.java (revision 23136)
+++ src/main/java/forge/card/ability/effects/AttachEffect.java (working copy)
@@ -50,6 +50,10 @@
if ( sa.hasParam("Optional") && !p.getController().confirmAction(sa, null, message) )
return;
+ if (sa.hasParam("Bestow")) {
+ source.setBestow(true);
+ }
+
// If Cast Targets will be checked on the Stack
for (final Object o : targets) {
handleAttachment(card, o, sa);
Index: src/main/java/forge/Card.java
===================================================================
--- src/main/java/forge/Card.java (revision 23136)
+++ src/main/java/forge/Card.java (working copy)
@@ -172,6 +172,7 @@
private boolean monstrous = false;
private int monstrosityNum = 0;
+ private boolean bestow = false;
private boolean suspendCast = false;
private boolean suspend = false;
@@ -7770,6 +7771,28 @@
/**
* <p>
+ * Setter for the field <code>bestow</code>.
+ * </p>
+ *
+ * @param b
+ * a boolean.
+ */
+ public final void setBestow(final boolean b) {
+ this.bestow = b;
+ }
+
+ /**
+ * <p>
+ * isBestowed.
+ * </p>
+ *
+ * @return a boolean.
+ */
+ public final boolean isBestowed() {
+ return this.bestow;
+ }
+ /**
+ * <p>
* Setter for the field <code>monstrosityNum</code>.
* </p>
*
@@ -8225,7 +8248,15 @@
* @return a boolean
*/
public final boolean canBeEnchantedBy(final Card aura) {
- final SpellAbility sa = aura.getFirstSpellAbility();
+ SpellAbility sa = aura.getFirstSpellAbility();
+ if (aura.isBestowed()) {
+ for (SpellAbility s : aura.getSpellAbilities()) {
+ if (s.getApi() == ApiType.Attach && s.hasParam("Bestow")) {
+ sa = s;
+ break;
+ }
+ }
+ }
TargetRestrictions tgt = null;
if (sa != null) {
tgt = sa.getTargetRestrictions();
Index: src/main/java/forge/card/cardfactory/CardFactoryUtil.java
===================================================================
--- src/main/java/forge/card/cardfactory/CardFactoryUtil.java (revision 23136)
+++ src/main/java/forge/card/cardfactory/CardFactoryUtil.java (working copy)
@@ -2531,6 +2531,37 @@
card.getUnparsedAbilities().add(abilityStr.toString());
}
+ if (card.hasStartOfKeyword("Bestow")) {
+ final int bestowPos = card.getKeywordPosition("Bestow");
+ final String cost = card.getKeyword().get(bestowPos).split(":")[1];
+ card.removeIntrinsicKeyword(card.getKeyword().get(bestowPos));
+
+ final StringBuilder sbAttach = new StringBuilder();
+ sbAttach.append("SP$ Attach | Cost$ ");
+ sbAttach.append(cost);
+ sbAttach.append(" | AILogic$ Pump | Bestow$ True | ValidTgts$ Creature");
+ final SpellAbility bestow = AbilityFactory.getAbility(sbAttach.toString(), card);
+
+ bestow.setDescription("Bestow " + cost + " (If you cast this card for" +
+ " its bestow cost, it's an Aura spell with enchant creature. It" +
+ " becomes a creature again if it's not attached to a creature.)");
+ bestow.setStackDescription("Bestow - " + card.getName());
+ bestow.setBasicSpell(false);
+ card.addSpellAbility(bestow);
+ card.getUnparsedAbilities().add(sbAttach.toString());
+
+ // Second, a static trigger when bestow cost is paid to animate Aura
+ final StringBuilder sbTrigger = new StringBuilder();
+ sbTrigger.append("Mode$ SpellCast | ValidCard$ Card.Self | Bestow$ True | ");
+ sbTrigger.append("Execute$ BestowAnimateSelf | Static$ True");
+
+ final StringBuilder sbSVar = new StringBuilder();
+ sbSVar.append("AB$ Animate | Cost$ 0 | Defined$ Self | OverwriteTypes$ True");
+ sbSVar.append(" | Types$ Enchantment,Aura | Keywords$ Enchant creature | Permanent$ True");
+ card.setSVar("BestowAnimateSelf", sbSVar.toString());
+ final Trigger animateSelf = TriggerHandler.parseTrigger(sbTrigger.toString(), card, true);
+ card.addTrigger(animateSelf);
+ }
setupEtbKeywords(card);
}
Index: src/main/java/forge/game/GameAction.java
===================================================================
--- src/main/java/forge/game/GameAction.java (revision 23136)
+++ src/main/java/forge/game/GameAction.java (working copy)
@@ -44,6 +44,7 @@
import forge.GameEntity;
import forge.GameLogEntryType;
import forge.ITargetable;
+import forge.card.CardDb;
import forge.card.CardType;
import forge.card.TriggerReplacementBase;
import forge.card.ability.AbilityFactory;
@@ -908,7 +909,15 @@
// Check if Card Aura is attached to is a legal target
final GameEntity entity = c.getEnchanting();
- final SpellAbility sa = c.getSpells().get(0);
+ SpellAbility sa = c.getSpells().get(0);
+ if (c.isBestowed()) {
+ for (SpellAbility s : c.getSpellAbilities()) {
+ if (s.getApi() == ApiType.Attach && s.hasParam("Bestow")) {
+ sa = s;
+ break;
+ }
+ }
+ }
TargetRestrictions tgt = null;
if (sa != null) {
@@ -921,7 +930,16 @@
if (!perm.isInZone(tgtZone) || !perm.canBeEnchantedBy(c) || (perm.isPhasedOut() && !c.isPhasedOut())) {
c.unEnchantEntity(perm);
- this.moveToGraveyard(c);
+ if (c.isBestowed()) {
+ // TODO : support for tokens
+ ArrayList<String> type = CardFactory.getCard(CardDb.getCard(c), c.getController()).getType();
+ final long timestamp = game.getNextTimestamp();
+ c.addChangedCardTypes(type, Lists.newArrayList("Aura"), false, false, false, false, timestamp);
+ c.addChangedCardKeywords(new ArrayList<String>(), Lists.newArrayList("Enchant creature"), false, timestamp);
+ c.setBestow(false);
+ game.fireEvent(new GameEventCardStatsChanged(c));
+ } else {
+ this.moveToGraveyard(c);
+ }
checkAgain = true;
}
} else if (entity instanceof Player) {
@@ -943,7 +961,16 @@
}
if (c.isInPlay() && !c.isEnchanting()) {
- this.moveToGraveyard(c);
+ if (c.isBestowed()) {
+ // TODO : support for tokens
+ ArrayList<String> type = CardFactory.getCard(CardDb.getCard(c), c.getController()).getType();
+ final long timestamp = game.getNextTimestamp();
+ c.addChangedCardTypes(type, Lists.newArrayList("Aura"), false, false, false, false, timestamp);
+ c.addChangedCardKeywords(new ArrayList<String>(), Lists.newArrayList("Enchant creature"), false, timestamp);
+ c.setBestow(false);
+ game.fireEvent(new GameEventCardStatsChanged(c));
+ } else {
+ this.moveToGraveyard(c);
+ }
checkAgain = true;
}
return checkAgain;
Index: src/main/java/forge/card/trigger/TriggerSpellAbilityCast.java
===================================================================
--- src/main/java/forge/card/trigger/TriggerSpellAbilityCast.java (revision 23136)
+++ src/main/java/forge/card/trigger/TriggerSpellAbilityCast.java (working copy)
@@ -184,6 +184,11 @@
return true;
}
}
+ if (this.mapParams.containsKey("Bestow")) {
+ if (!spellAbility.hasParam("Bestow")) {
+ return false;
+ }
+ }
return true;
}
Index: res/cardsfolder/x/leafcrown_dryad.txt
===================================================================
--- res/cardsfolder/x/leafcrown_dryad.txt (revision 0)
+++ res/cardsfolder/x/leafcrown_dryad.txt (working copy)
@@ -0,0 +1,8 @@
+Name:Leafcrown Dryad
+ManaCost:1 G
+Types:Enchantment Creature Nymph Dryad
+PT:2/2
+K:Bestow:3 G
+K:Reach
+S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddPower$ 2 | AddToughness$ 2 | AddKeyword$ Reach | Description$ Enchanted creature gets +2/+2 and has reach.
+SVar:Picture:http://www.wizards.com/global/images/magic/general/leafcrown_dryad.jpg
\ No newline at end of file
Kor SpiritDancer's ability triggers when I cast a bestow spell.
I don't know how CopyPermanent/Clone/Play effects work with bestowed auras.
- swordshine
- Posts: 682
- Joined: 11 Jul 2010, 02:37
- Has thanked: 116 times
- Been thanked: 87 times
Re: Theros Spoiler Season
by ZzzzSleep » 08 Sep 2013, 11:48
A couple of quickies!
- Two-headed Cerberus | Open
- Code: Select all
Name:Two-headed Cerberus
ManaCost:1 R R
Types:Creature Hound
PT:1/2
K:Double Strike
- Glare of Heresy | Open
- Code: Select all
Name:Glare of Heresy
ManaCost:1 W
Types:Sorcery
A:SP$ ChangeZone | Cost$ 1 W | ValidTgts$ Permanent.White | TgtPrompt$ Select target white permanent | Origin$ Battlefield | Destination$ Exile | SpellDescription$ Exile target white permanent.
Re: Theros Spoiler Season
by Marek14 » 08 Sep 2013, 12:14
MTGSalvation shows second card with "you can use mana as mana of any color" after Daxos of Meletis. Perhaps my table idea I wrote about some time ago could help with this sort of thing?
62 posts
• Page 2 of 5 • 1, 2, 3, 4, 5
Who is online
Users browsing this forum: No registered users and 118 guests