mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 10:48:00 +00:00
- Added Soul Sculptor
This commit is contained in:
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -12267,6 +12267,7 @@ forge-gui/res/cardsfolder/s/soul_ransom.txt -text
|
|||||||
forge-gui/res/cardsfolder/s/soul_reap.txt -text
|
forge-gui/res/cardsfolder/s/soul_reap.txt -text
|
||||||
forge-gui/res/cardsfolder/s/soul_rend.txt svneol=native#text/plain
|
forge-gui/res/cardsfolder/s/soul_rend.txt svneol=native#text/plain
|
||||||
forge-gui/res/cardsfolder/s/soul_scourge.txt svneol=native#text/plain
|
forge-gui/res/cardsfolder/s/soul_scourge.txt svneol=native#text/plain
|
||||||
|
forge-gui/res/cardsfolder/s/soul_sculptor.txt -text
|
||||||
forge-gui/res/cardsfolder/s/soul_seizer_ghastly_haunting.txt -text
|
forge-gui/res/cardsfolder/s/soul_seizer_ghastly_haunting.txt -text
|
||||||
forge-gui/res/cardsfolder/s/soul_shepherd.txt svneol=native#text/plain
|
forge-gui/res/cardsfolder/s/soul_shepherd.txt svneol=native#text/plain
|
||||||
forge-gui/res/cardsfolder/s/soul_shred.txt svneol=native#text/plain
|
forge-gui/res/cardsfolder/s/soul_shred.txt svneol=native#text/plain
|
||||||
|
|||||||
@@ -299,6 +299,8 @@ public class AnimateEffect extends AnimateEffectBase {
|
|||||||
}
|
}
|
||||||
} else if (sa.hasParam("UntilControllerNextUntap")) {
|
} else if (sa.hasParam("UntilControllerNextUntap")) {
|
||||||
game.getUntap().addUntil(c.getController(), unanimate);
|
game.getUntap().addUntil(c.getController(), unanimate);
|
||||||
|
} else if (sa.hasParam("UntilAPlayerCastSpell")) {
|
||||||
|
game.getStack().addCastCommand(sa.getParam("UntilAPlayerCastSpell"), unanimate);
|
||||||
} else if (sa.hasParam("UntilYourNextTurn")) {
|
} else if (sa.hasParam("UntilYourNextTurn")) {
|
||||||
game.getCleanup().addUntil(source.getController(), unanimate);
|
game.getCleanup().addUntil(source.getController(), unanimate);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -19,6 +19,9 @@ package forge.game.zone;
|
|||||||
|
|
||||||
import com.esotericsoftware.minlog.Log;
|
import com.esotericsoftware.minlog.Log;
|
||||||
import com.google.common.collect.Iterables;
|
import com.google.common.collect.Iterables;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
|
||||||
|
import forge.GameCommand;
|
||||||
import forge.card.mana.ManaCost;
|
import forge.card.mana.ManaCost;
|
||||||
import forge.game.Game;
|
import forge.game.Game;
|
||||||
import forge.game.GameLogEntryType;
|
import forge.game.GameLogEntryType;
|
||||||
@@ -46,6 +49,7 @@ import forge.game.trigger.Trigger;
|
|||||||
import forge.game.trigger.TriggerType;
|
import forge.game.trigger.TriggerType;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.Map.Entry;
|
||||||
import java.util.concurrent.LinkedBlockingDeque;
|
import java.util.concurrent.LinkedBlockingDeque;
|
||||||
|
|
||||||
|
|
||||||
@@ -71,6 +75,7 @@ public class MagicStack /* extends MyObservable */ implements Iterable<SpellAbil
|
|||||||
private final List<Card> thisTurnCast = new ArrayList<Card>();
|
private final List<Card> thisTurnCast = new ArrayList<Card>();
|
||||||
private List<Card> lastTurnCast = new ArrayList<Card>();
|
private List<Card> lastTurnCast = new ArrayList<Card>();
|
||||||
private Card curResolvingCard = null;
|
private Card curResolvingCard = null;
|
||||||
|
private final HashMap<String, List<GameCommand>> commandList = new HashMap<String, List<GameCommand>>();
|
||||||
|
|
||||||
private final Game game;
|
private final Game game;
|
||||||
|
|
||||||
@@ -399,6 +404,7 @@ public class MagicStack /* extends MyObservable */ implements Iterable<SpellAbil
|
|||||||
// Run SpellCast triggers
|
// Run SpellCast triggers
|
||||||
if (sp.isSpell()) {
|
if (sp.isSpell()) {
|
||||||
game.getTriggerHandler().runTrigger(TriggerType.SpellCast, runParams, true);
|
game.getTriggerHandler().runTrigger(TriggerType.SpellCast, runParams, true);
|
||||||
|
this.executeCastCommand(si.getSpellAbility().getHostCard());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Run AbilityCast triggers
|
// Run AbilityCast triggers
|
||||||
@@ -859,6 +865,29 @@ public class MagicStack /* extends MyObservable */ implements Iterable<SpellAbil
|
|||||||
return this.lastTurnCast;
|
return this.lastTurnCast;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final void addCastCommand(final String valid, final GameCommand c) {
|
||||||
|
if (this.commandList.containsKey(valid)) {
|
||||||
|
this.commandList.get(valid).add(0, c);
|
||||||
|
} else {
|
||||||
|
this.commandList.put(valid, Lists.newArrayList(c));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void executeCastCommand(final Card cast) {
|
||||||
|
for (Entry<String, List<GameCommand>> ev : this.commandList.entrySet()) {
|
||||||
|
if (cast.isType(ev.getKey())) {
|
||||||
|
this.execute(ev.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void execute(final List<GameCommand> c) {
|
||||||
|
final int length = c.size();
|
||||||
|
for (int i = 0; i < length; i++) {
|
||||||
|
c.remove(0).run();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if is resolving.
|
* Checks if is resolving.
|
||||||
*
|
*
|
||||||
|
|||||||
8
forge-gui/res/cardsfolder/s/soul_sculptor.txt
Normal file
8
forge-gui/res/cardsfolder/s/soul_sculptor.txt
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
Name:Soul Sculptor
|
||||||
|
ManaCost:2 W
|
||||||
|
Types:Creature Human
|
||||||
|
PT:1/1
|
||||||
|
A:AB$ Animate | Cost$ 1 W T | ValidTgts$ Creature | Types$ Enchantment | RemoveAllAbilities$ True | OverwriteTypes$ True | KeepSupertypes$ True | UntilAPlayerCastSpell$ Creature | SpellDescription$ Target creature becomes an enchantment and loses all abilities until a player casts a creature spell.
|
||||||
|
SVar:RemAIDeck:True
|
||||||
|
SVar:Picture:http://www.wizards.com/global/images/magic/general/soul_sculptor.jpg
|
||||||
|
Oracle:{1}{W}, {T}: Target creature becomes an enchantment and loses all abilities until a player casts a creature spell.
|
||||||
Reference in New Issue
Block a user