It is currently 19 Apr 2024, 20:44
   
Text Size

Theros Spoiler Season

Post MTG Forge Related Programming Questions Here

Moderators: timmermac, Blacksmith, KrazyTheFox, Agetian, friarsol, CCGHQ Admins

Re: Theros Spoiler Season

Postby 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.
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

Postby friarsol » 27 Aug 2013, 14:44

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.
Seems like a lot of Gotcha moments already considering the Bestowed Aura Targeting issue I mentioned. Hopefully they'll have some clarification soon.
friarsol
Global Moderator
 
Posts: 7593
Joined: 15 May 2010, 04:20
Has thanked: 243 times
Been thanked: 965 times

Re: Theros Spoiler Season

Postby gos » 27 Aug 2013, 15:27

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.
Admittedly.
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

Postby Marek14 » 28 Aug 2013, 13:42

swordshine wrote:
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
I think we should tweak MagicStack.hasFizzled(SpellAbility, Card, boolean).

Devotion and Chroma are almost the same.

Which is the better script for "Heroic", TriggerSpellCast or TriggerBecomesTarget?
If TriggerBecomesTarget, wouldn't it also trigger when something is retargeted to it? That shouldn't happen.
Marek14
Tester
 
Posts: 2759
Joined: 07 Jun 2008, 07:54
Has thanked: 0 time
Been thanked: 296 times

Re: Theros Spoiler Season

Postby swordshine » 28 Aug 2013, 14:43

Marek14 wrote:If TriggerBecomesTarget, wouldn't it also trigger when something is retargeted to it? That shouldn't happen.
Thanks for pointing it out. I personally perferred the SpellCast trigger before I ask the question.
swordshine
 
Posts: 682
Joined: 11 Jul 2010, 02:37
Has thanked: 116 times
Been thanked: 87 times

Re: Theros Spoiler Season

Postby swordshine » 02 Sep 2013, 04:27

:lol: Hundred-Handed One can block an additional ninety-nine creatures :lol:
swordshine
 
Posts: 682
Joined: 11 Jul 2010, 02:37
Has thanked: 116 times
Been thanked: 87 times

Re: Theros Spoiler Season

Postby 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

Postby Chris H. » 02 Sep 2013, 14:15

swordshine wrote:The official spoiler starts. Can someone stick this thread?
 
Now stickied. :)
User avatar
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

Postby 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.

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
I'm assuming the problem lies with TokenOwner$ but Forge crashed with anything except TargetedController.
torridus
 
Posts: 56
Joined: 03 Jul 2012, 12:58
Has thanked: 4 times
Been thanked: 9 times

Re: Theros Spoiler Season

Postby friarsol » 03 Sep 2013, 19:37

torridus wrote:
I'm assuming the problem lies with TokenOwner$ but Forge crashed with anything except TargetedController.
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.
friarsol
Global Moderator
 
Posts: 7593
Joined: 15 May 2010, 04:20
Has thanked: 243 times
Been thanked: 965 times

Re: Theros Spoiler Season

Postby 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
| 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
Elspeth, Sun's Champion
| 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
I've tested both... and they work as far as I can tell.

Later...
DeadSpeak
 
Posts: 104
Joined: 25 Dec 2009, 00:14
Location: Denmark
Has thanked: 4 times
Been thanked: 3 times

Re: Theros Spoiler Season

Postby ZzzzSleep » 03 Sep 2013, 22:29

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...
Hi DeadSpeak,
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.
ZzzzSleep
 
Posts: 182
Joined: 29 Oct 2010, 02:19
Has thanked: 18 times
Been thanked: 18 times

Re: Theros Spoiler Season

Postby 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.

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

Test:
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

Postby 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.
ZzzzSleep
 
Posts: 182
Joined: 29 Oct 2010, 02:19
Has thanked: 18 times
Been thanked: 18 times

Re: Theros Spoiler Season

Postby 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? :)
Marek14
Tester
 
Posts: 2759
Joined: 07 Jun 2008, 07:54
Has thanked: 0 time
Been thanked: 296 times

PreviousNext

Return to Developer's Corner

Who is online

Users browsing this forum: No registered users and 118 guests


Who is online

In total there are 118 users online :: 0 registered, 0 hidden and 118 guests (based on users active over the past 10 minutes)
Most users ever online was 4143 on 23 Jan 2024, 08:21

Users browsing this forum: No registered users and 118 guests

Login Form