Merge branch 'master' into newmaster2

This commit is contained in:
Anthony Calosa
2023-04-01 11:40:57 +08:00
committed by GitHub
49 changed files with 905 additions and 3414 deletions

View File

@@ -33,10 +33,10 @@ public class CountersProliferateEffect extends SpellAbilityEffect {
@Override
public void resolve(SpellAbility sa) {
int num = sa.hasParam("Amount") ? AbilityUtils.calculateAmount(sa.getHostCard(), sa.getParam("Amount"), sa) : 1;
final Player p = sa.getActivatingPlayer();
final Card host = sa.getHostCard();
final Game game = host.getGame();
int num = sa.hasParam("Amount") ? AbilityUtils.calculateAmount(host, sa.getParam("Amount"), sa) : 1;
final Map<AbilityKey, Object> repParams = AbilityKey.mapFromAffected(p);
repParams.put(AbilityKey.Source, sa);

View File

@@ -37,11 +37,11 @@ public class InvestigateEffect extends TokenEffectBase {
final int amount = AbilityUtils.calculateAmount(card, sa.getParamOrDefault("Num", "1"), sa);
// Investigate in Sequence
for (final Player p : getTargetPlayers(sa)) {
for (int i = 0; i < amount; i++) {
for (final Player p : getTargetPlayers(sa)) {
if (sa.hasParam("Optional") && !p.getController().confirmAction(sa, null,
Localizer.getInstance().getMessage("lblWouldYouLikeInvestigate"), null)) {
return;
continue;
}
CardZoneTable triggerList = new CardZoneTable();

View File

@@ -169,8 +169,12 @@ public class RepeatEachEffect extends SpellAbilityEffect {
}
}
for (final Player p : repeatPlayers) {
if (optional && !p.getController().confirmAction(repeat, null, sa.getParam("RepeatOptionalMessage"), null)) {
if (optional) {
if (!p.getController().confirmAction(repeat, null, sa.getParam("RepeatOptionalMessage"), null)) {
continue;
} else if (sa.hasParam("RememberDeciders")) {
source.addRemembered(p);
}
}
if (nextTurn) {
game.getCleanup().addUntil(p, new GameCommand() {

View File

@@ -6955,8 +6955,8 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
etbCounters.clear();
}
public final Set<Table.Cell<Player, CounterType, Integer>> getEtbCounters() {
return etbCounters.cellSet();
public final Table<Player, CounterType, Integer> getEtbCounters() {
return etbCounters;
}
public final void putEtbCounters(GameEntityCounterTable table) {

View File

@@ -2684,14 +2684,13 @@ public class CardFactoryUtil {
final String[] kw = keyword.split(":");
String costStr = kw[1];
for (SpellAbility sa: host.getBasicSpells()) {
final SpellAbility newSA = sa.copy();
newSA.setBasicSpell(false);
if (costStr.equals("ConvertedManaCost")) {
costStr = Integer.toString(host.getCMC());
}
final Cost cost = new Cost(costStr, false).add(sa.getPayCosts().copyWithNoMana());
final SpellAbility newSA = sa.copyWithDefinedCost(cost);
newSA.setBasicSpell(false);
newSA.putParam("Secondary", "True");
newSA.setPayCosts(cost);
newSA.setDescription(sa.getDescription() + " (by paying " + cost.toSimpleString() + " instead of its mana cost)");
newSA.setIntrinsic(intrinsic);
@@ -3879,9 +3878,8 @@ public class CardFactoryUtil {
private static SpellAbility makeAltCostAbility(final Card card, final String altCost, final SpellAbility sa) {
final Map<String, String> params = AbilityFactory.getMapParams(altCost);
final SpellAbility altCostSA = sa.copy();
final Cost abCost = new Cost(params.get("Cost"), altCostSA.isAbility());
altCostSA.setPayCosts(abCost);
final Cost abCost = new Cost(params.get("Cost"), sa.isAbility());
final SpellAbility altCostSA = sa.copyWithDefinedCost(abCost);
altCostSA.setBasicSpell(false);
altCostSA.addOptionalCost(OptionalCost.AltCost);

View File

@@ -1873,7 +1873,7 @@ public class CardProperty {
}
final ZoneType realZone = ZoneType.smartValueOf(strZone);
if (card.getCastFrom() == null || (zoneOwner != null && !card.getCastFrom().getPlayer().equals(zoneOwner))
|| (byYou && !controller.equals(card.getCastSA().getActivatingPlayer()))
|| (byYou && !sourceController.equals(card.getCastSA().getActivatingPlayer()))
|| realZone != card.getCastFrom().getZoneType()) {
return false;
}
@@ -1894,7 +1894,7 @@ public class CardProperty {
}
final ZoneType realZone = ZoneType.smartValueOf(strZone);
if (card.getCastFrom() != null && (zoneOwner == null || card.getCastFrom().getPlayer().equals(zoneOwner))
&& (!byYou || controller.equals(card.getCastSA().getActivatingPlayer()))
&& (!byYou || sourceController.equals(card.getCastSA().getActivatingPlayer()))
&& realZone == card.getCastFrom().getZoneType()) {
return false;
}
@@ -1902,7 +1902,7 @@ public class CardProperty {
if (!card.wasCast()) {
return false;
}
if (property.contains("ByYou") && !controller.equals(card.getCastSA().getActivatingPlayer())) {
if (property.contains("ByYou") && !sourceController.equals(card.getCastSA().getActivatingPlayer())) {
return false;
}
} else if (property.equals("wasNotCast")) {

View File

@@ -25,7 +25,6 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.google.common.collect.Table;
import forge.ImageKeys;
import forge.card.CardStateName;
@@ -283,9 +282,7 @@ public final class CardUtil {
newCopy.setChosenNumber(in.getChosenNumber());
}
for (Table.Cell<Player, CounterType, Integer> cl : in.getEtbCounters()) {
newCopy.addEtbCounter(cl.getColumnKey(), cl.getValue(), cl.getRowKey());
}
newCopy.getEtbCounters().putAll(in.getEtbCounters());
newCopy.setUnearthed(in.isUnearthed());

View File

@@ -0,0 +1,12 @@
{
"name":"Copper Host Brutalizer",
"template":
{
"count":60,
"colors":["Green, Black"],
"tribe":"Phyrexian",
"tribeCards":1.0,
"tribeSynergyCards":0.45,
"rares":0.4
}
}

View File

@@ -0,0 +1,12 @@
{
"name":"Copper Host Infector",
"template":
{
"count":60,
"colors":["Green"],
"tribe":"Phyrexian",
"tribeCards":1.0,
"tribeSynergyCards":0.45,
"rares":0.25
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -39,7 +39,12 @@
</object>
<object id="48" template="../obj/treasure.tx" x="207.333" y="58.8333">
<properties>
<property name="reward" value="[{&quot;type&quot;: &quot;randomCard&quot;,&quot;colors&quot;: [&quot;Blue&quot;], &quot;count&quot;: 5 }, {&quot;type&quot;: &quot;item&quot;,&quot;count&quot;: 1,&quot;probability&quot;:0.2,&quot;itemName&quot;: &quot;Iron Armor&quot;}]"/>
<property name="reward">[{&quot;type&quot;: &quot;randomCard&quot;,&quot;colors&quot;: [&quot;Blue&quot;], &quot;count&quot;: 5 }, {&quot;type&quot;: &quot;item&quot;,&quot;count&quot;: 1,&quot;probability&quot;:0.2,&quot;itemName&quot;: &quot;Iron Armor&quot;},
{
&quot;type&quot;: &quot;card&quot;,
&quot;probability&quot;: 1,
&quot;count&quot;: 1,
&quot;cardName&quot;: &quot;Staff of the Mind Magus&quot;}]</property>
<property name="spawn.Normal" type="bool" value="true"/>
</properties>
</object>

View File

@@ -47,8 +47,6 @@
<object id="66" template="../obj/enemy.tx" x="163.605" y="388.194">
<properties>
<property name="enemy" value="Doppelganger"/>
<property name="threatRange" type="int" value="30"/>
<property name="waypoints" value="95,86,96,86"/>
</properties>
</object>
<object id="75" template="../obj/enemy.tx" x="106.034" y="305.243">
@@ -66,8 +64,6 @@
&quot;startBattleWithCard&quot;: [ &quot;Fellwar Stone&quot; ]
}</property>
<property name="enemy" value="Doppelganger"/>
<property name="threatRange" type="int" value="30"/>
<property name="waypoints" value="88,91,89"/>
</properties>
</object>
<object id="74" template="../obj/enemy.tx" x="231.069" y="255.542">
@@ -78,8 +74,6 @@
&quot;startBattleWithCard&quot;: [ &quot;Fellwar Stone&quot;, &quot;Frozen Aether&quot; ]
}</property>
<property name="enemy" value="Doppelganger"/>
<property name="threatRange" type="int" value="30"/>
<property name="waypoints" value="94,98"/>
</properties>
</object>
<object id="71" template="../obj/enemy.tx" x="140.117" y="386.888">
@@ -89,8 +83,6 @@
&quot;startBattleWithCard&quot;: [ &quot;Hesitation&quot; ]
}</property>
<property name="enemy" value="Blue Wiz3"/>
<property name="threatRange" type="int" value="30"/>
<property name="waypoints" value="87,96"/>
</properties>
</object>
<object id="67" template="../obj/enemy.tx" x="247.673" y="379.931">

View File

@@ -109,7 +109,12 @@
<object id="75" template="../obj/manashards.tx" x="258" y="45"/>
<object id="76" template="../obj/treasure.tx" x="161.5" y="48">
<properties>
<property name="reward" value="[{&quot;type&quot;: &quot;randomCard&quot;,&quot;colors&quot;: [&quot;Black&quot;], &quot;count&quot;: 5 }, {&quot;type&quot;: &quot;item&quot;,&quot;count&quot;: 1,&quot;probability&quot;:0.2,&quot;itemName&quot;: &quot;Spell Book&quot;}]"/>
<property name="reward">[{&quot;type&quot;: &quot;randomCard&quot;,&quot;colors&quot;: [&quot;Black&quot;], &quot;count&quot;: 5 }, {&quot;type&quot;: &quot;item&quot;,&quot;count&quot;: 1,&quot;probability&quot;:0.2,&quot;itemName&quot;: &quot;Spell Book&quot;},
{
&quot;type&quot;: &quot;card&quot;,
&quot;probability&quot;: 1,
&quot;count&quot;: 1,
&quot;cardName&quot;: &quot;Staff of the Death Magus&quot;}]</property>
<property name="spawn.Normal" type="bool" value="true"/>
</properties>
</object>

View File

@@ -94,7 +94,12 @@
<object id="75" template="../obj/waypoint.tx" x="271.25" y="79.75"/>
<object id="76" template="../obj/treasure.tx" x="160" y="48.5">
<properties>
<property name="reward" value="[{&quot;type&quot;: &quot;randomCard&quot;,&quot;colors&quot;: [&quot;Red&quot;], &quot;count&quot;: 5 }, {&quot;type&quot;: &quot;item&quot;,&quot;count&quot;: 1,&quot;probability&quot;:0.2,&quot;itemName&quot;: &quot;Dagger&quot;}]"/>
<property name="reward">[{&quot;type&quot;: &quot;randomCard&quot;,&quot;colors&quot;: [&quot;Red&quot;], &quot;count&quot;: 5 }, {&quot;type&quot;: &quot;item&quot;,&quot;count&quot;: 1,&quot;probability&quot;:0.2,&quot;itemName&quot;: &quot;Dagger&quot;},
{
&quot;type&quot;: &quot;card&quot;,
&quot;probability&quot;: 1,
&quot;count&quot;: 1,
&quot;cardName&quot;: &quot;Staff of the Flame Magus&quot;}]</property>
</properties>
</object>
</objectgroup>

View File

@@ -50,7 +50,12 @@
</object>
<object id="66" template="../obj/treasure.tx" x="195.5" y="50.5">
<properties>
<property name="reward" value="[{&quot;type&quot;: &quot;randomCard&quot;,&quot;colors&quot;: [&quot;White&quot;], &quot;count&quot;: 5 }, {&quot;type&quot;: &quot;item&quot;,&quot;count&quot;: 1,&quot;probability&quot;:0.2,&quot;itemName&quot;: &quot;Jungle Shield&quot;}]"/>
<property name="reward">[{&quot;type&quot;: &quot;randomCard&quot;,&quot;colors&quot;: [&quot;White&quot;], &quot;count&quot;: 5 }, {&quot;type&quot;: &quot;item&quot;,&quot;count&quot;: 1,&quot;probability&quot;:0.2,&quot;itemName&quot;: &quot;Jungle Shield&quot;},
{
&quot;type&quot;: &quot;card&quot;,
&quot;probability&quot;: 1,
&quot;count&quot;: 1,
&quot;cardName&quot;: &quot;Staff of the Sun Magus&quot;}]</property>
</properties>
</object>
<object id="67" template="../obj/booster.tx" x="208.5" y="78">

View File

@@ -37,11 +37,11 @@
<property name="teleport" value=""/>
</properties>
</object>
<object id="50" template="../obj/enemy.tx" x="105.596" y="132.484">
<object id="50" template="../obj/enemy.tx" x="155.981" y="126.642">
<properties>
<property name="enemy" value="Green Wiz1"/>
<property name="threatRange" type="int" value="50"/>
<property name="waypoints" value="89,90,86,79,80,79,86"/>
<property name="waypoints" value="89,90,86"/>
</properties>
</object>
<object id="66" template="../obj/enemy.tx" x="252.251" y="78.7299">
@@ -53,7 +53,12 @@
<object id="69" template="../obj/gold.tx" x="306.52" y="83.2111"/>
<object id="70" template="../obj/treasure.tx" x="54.144" y="139.941">
<properties>
<property name="reward" value="[{&quot;type&quot;: &quot;randomCard&quot;,&quot;colors&quot;: [&quot;Green&quot;], &quot;count&quot;: 5 }, {&quot;type&quot;: &quot;item&quot;,&quot;count&quot;: 1,&quot;probability&quot;:0.2,&quot;itemName&quot;: &quot;Leather Boots&quot;}]"/>
<property name="reward">[{&quot;type&quot;: &quot;randomCard&quot;,&quot;colors&quot;: [&quot;Green&quot;], &quot;count&quot;: 5 }, {&quot;type&quot;: &quot;item&quot;,&quot;count&quot;: 1,&quot;probability&quot;:0.2,&quot;itemName&quot;: &quot;Leather Boots&quot;},
{
&quot;type&quot;: &quot;card&quot;,
&quot;probability&quot;: 1,
&quot;count&quot;: 1,
&quot;cardName&quot;: &quot;Staff of the Wild Magus&quot;}]</property>
</properties>
</object>
<object id="71" template="../obj/booster.tx" x="374.31" y="126.36">
@@ -107,13 +112,6 @@
<property name="waypoints" value="83,82,85"/>
</properties>
</object>
<object id="77" template="../obj/enemy.tx" x="254.667" y="127.333">
<properties>
<property name="enemy" value="Green Wiz1"/>
<property name="threatRange" type="int" value="50"/>
<property name="waypoints" value="86,79,80,79,86,89"/>
</properties>
</object>
<object id="78" template="../obj/waypoint.tx" x="110.072" y="175.305"/>
<object id="79" template="../obj/waypoint.tx" x="255.779" y="175.106" width="30.0126" height="11.1495"/>
<object id="80" template="../obj/waypoint.tx" x="272.074" y="207.716"/>

View File

@@ -3,6 +3,9 @@
<editorsettings>
<export target="wastetown..tmx" format="tmx"/>
</editorsettings>
<properties>
<property name="dungeonEffect" value="{&quot;startBattleWithCard&quot;: [ &quot;Infernal Genesis&quot; ]}"/>
</properties>
<tileset firstgid="1" source="../tileset/main.tsx"/>
<tileset firstgid="10113" source="../tileset/buildings.tsx"/>
<layer id="6" name="Collision" width="30" height="17">
@@ -39,7 +42,12 @@
</object>
<object id="48" template="../obj/treasure.tx" x="208" y="48.4166">
<properties>
<property name="reward" value="[{&quot;type&quot;: &quot;randomCard&quot;,&quot;colors&quot;: [&quot;Black&quot;], &quot;count&quot;: 5 }, {&quot;type&quot;: &quot;item&quot;,&quot;count&quot;: 1,&quot;probability&quot;:0.2,&quot;itemName&quot;: &quot;Steel Shield&quot;}]"/>
<property name="reward">[{&quot;type&quot;: &quot;randomCard&quot;,&quot;colors&quot;: [&quot;Black&quot;], &quot;count&quot;: 5 }, {&quot;type&quot;: &quot;item&quot;,&quot;count&quot;: 1,&quot;probability&quot;:0.2,&quot;itemName&quot;: &quot;Steel Shield&quot;},
{
&quot;type&quot;: &quot;card&quot;,
&quot;probability&quot;: 1,
&quot;count&quot;: 1,
&quot;cardName&quot;: &quot;Infernal Genesis&quot;}]</property>
</properties>
</object>
<object id="50" template="../obj/enemy.tx" x="207.902" y="90.5586">

View File

@@ -8,7 +8,7 @@
<tileset firstgid="11905" source="../tileset/GitaxianTilesheet.tsx"/>
<layer id="6" name="Collision" width="30" height="17">
<data encoding="base64" compression="zlib">
eJxjYCAMpvIyMEzDg6fzEmEIGcCYD7+8KQH5UXuJAxeB5l6CYjOoHeZIYpdpZC9yupoBTUMz6ZDOCIUzOkB3E7nuINVe9PgmN/5JtZeQO4aCvbt4EBgEkPmyPPjtoZV/0e1FzmPk5jM3TtLtpVY5Qqy95lQuR4i1l9rlJcjeem7c8tT2J7K9sLIHGcDEyPEnAEN5Lbs=
eJxjYCAMpvIyMEzDg6fzEmEIGcCYj4HhEh5sykc7e/GB4WbvRaQwNYPaYY4kdplG9iKnK5jfQX6kdTpDT1cggC+dzaSSOwjFLzpAj29y459Uewm5YyjYu4sHgUEAmS/Lg98eWvkX3V5ztHRGTj5z4yTdXmqVI8Taa06B/yixl9rlJcjeem7c8tT2J7K9sLIHGcDEyPEnAMvuO9Q=
</data>
</layer>
<layer id="1" name="Background" width="30" height="17">

View File

@@ -0,0 +1,119 @@
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.9" tiledversion="1.9.2" orientation="orthogonal" renderorder="right-down" width="29" height="34" tilewidth="16" tileheight="16" infinite="0" nextlayerid="8" nextobjectid="74">
<editorsettings>
<export format="tmx"/>
</editorsettings>
<tileset firstgid="1" source="../tileset/main.tsx"/>
<tileset firstgid="10113" source="../tileset/buildings.tsx"/>
<tileset firstgid="11905" source="../tileset/Copperhost_Tiles.tsx"/>
<layer id="6" name="Collision" width="29" height="34">
<data encoding="base64" compression="zlib">
eJztllsKxSAMRN1A3Uwfd6W3XVfbDRU/hBBMjDoVCg7ky9bD5IXODQX9p/7M2Tt3GWP1OKZVKObJvGzk3h87u0FMLuob5SvXM28wLT0Theop6iN43gvjIHmqYZb0bIqDYs6Z3LUy+ZzQmdDOWphSPUPNtLMWppRb7c436nkKeUQxpZppUVtPy+xZZGUuXo7UHdr3S4FPS96ixu77/u6L6rn7osbuq2f23H0oWZkpb1vmX/7ORbx3c95Rb87BbGc+/yCvUQ==
</data>
</layer>
<layer id="1" name="Background" width="29" height="34">
<data encoding="base64" compression="zlib">
eJztzTENAAAIBLFXhEecM6KAhfSSm5tI0tZ1P5PJZDKZTCaT+dkc0SKrTw==
</data>
</layer>
<layer id="2" name="Ground" width="29" height="34">
<data encoding="base64" compression="zlib">
eJztklEKgDAMQ/creBaPMfAmXsOb+zUQ3WrKmtXCAvkaa8pL85JSnnbzuWGOntnawYN19Ey0P8t+vTN7GFn+Q96isf1Ln2y2Hjc0kq2kHdxLy6jmWqbF3PvslhhsETEzPe5WerfM/BLjbktfo/ssmRK/Y32blcm4P4ntk58k6z4RaRlpbrl39syMnXkBHSpevQ==
</data>
</layer>
<layer id="3" name="Clutter" width="29" height="34">
<properties>
<property name="spriteLayer" type="bool" value="true"/>
</properties>
<data encoding="base64" compression="zlib">
eJztV01PwzAM7S/Kv5yEujEmqk5oGhsc9qEdGIhD22mHHeDAAQ5cy4CfQiw9a66XTk0JNyxZaecmjt+znSyK/oXk3ERR3+oZxn7NO+mFCeNzYNcprS5OrLeD7SqQzyHWyezYFTq3eg2d4JvLQD6ndp0bqyOMK6sx/CzxG9tvf+Gzc2IuxZ0ExlLnjMwVet4KnxuHXT43zalhzXex4HGN572p2ntqblMc2OdM5UyB/KUxE/kj82iMPXWR501zin2OsW+ZJ6RvVr+gr8q2Erinxj9OEpq/UVwRn1SPHXPM57alz4E5cHev5jDea2BXKix5n23i5Hl3Dk55XbblyCXmmPY5A78+fMq9aj5XWL+osaWwLzyxzbD31MHns8ihJ3Ncu2lLbJknrkOtc/G8AJZcM4xt0aJW3k21r8v6z4TvXPDMNn5vGuejwE7qt2M+4fdZ8z3pgwefJDHikP0sNlWMXdjLc9a3J1DuEr5jc3xOsugzVdd0Gz5JqB747GzS+7hue561QjLDnut6Hwnb9DlXYq4PttxHkpo5Em+tjG2o3qfzhOL5gO6FLx59e98Oo6u/1XHNva9NnBnqoHDwqXtfqLOMMMsdmOq7h+s+kphD72tzZkspETvzxvdNnU+yFzblc6o4GoEnkheRW5SfHOfSVO/AIe67A+CVI5Y1NDF+vPn6lLWqfYb6zyBlqHjLhU7+MM5T4hvnD0fAb1k=
</data>
</layer>
<objectgroup id="4" name="Objects">
<object id="38" template="../obj/entry_up.tx" x="209.619" y="534.582">
<properties>
<property name="teleport" value=""/>
</properties>
</object>
<object id="50" template="../obj/enemy.tx" x="100.532" y="326.928">
<properties>
<property name="enemy" value="Copper Host Infector"/>
<property name="threatRange" value="30"/>
<property name="waypoints" value="57,62,60,58,57,61,59,58"/>
</properties>
</object>
<object id="51" template="../obj/treasure.tx" x="286.638" y="78.836"/>
<object id="54" template="../obj/gold.tx" x="223.441" y="366.796"/>
<object id="55" template="../obj/gold.tx" x="207" y="239.5"/>
<object id="56" template="../obj/booster.tx" x="144.5" y="79">
<properties>
<property name="reward">[
{
&quot;editions&quot;: [ &quot;ONE&quot; ],
&quot;type&quot;: &quot;card&quot;,
&quot;count&quot;: 10,
&quot;rarity&quot;: [ &quot;Common&quot; ]
&quot;colors&quot;: [ &quot;green&quot; ]
},
{
&quot;editions&quot;: [ &quot;ONE&quot; ],
&quot;type&quot;: &quot;card&quot;,
&quot;count&quot;: 3,
&quot;rarity&quot;: [ &quot;Uncommon&quot; ]
&quot;colors&quot;: [ &quot;green&quot; ]
},
{
&quot;editions&quot;: [ &quot;ONE&quot; ],
&quot;type&quot;: &quot;card&quot;,
&quot;count&quot;: 1,
&quot;rarity&quot;: [ &quot;Rare&quot;, &quot;Mythic Rare&quot; ]
&quot;colors&quot;: [ &quot;green&quot; ]
}
]
</property>
</properties>
</object>
<object id="70" template="../obj/enemy.tx" x="322.667" y="453.667">
<properties>
<property name="enemy" value="Copper Host Infector"/>
<property name="threatRange" value="30"/>
<property name="waypoints" value="60,58,57,62,60,58,57,62,60,59,61,62"/>
</properties>
</object>
<object id="71" template="../obj/enemy.tx" x="108.333" y="280">
<properties>
<property name="enemy" value="Copper Host Infector"/>
<property name="threatRange" value="30"/>
<property name="waypoints" value="66,68,65,63,66,67,64,63"/>
</properties>
</object>
<object id="72" template="../obj/enemy.tx" x="338.666" y="164.333">
<properties>
<property name="enemy" value="Copper Host Infector"/>
<property name="threatRange" value="30"/>
<property name="waypoints" value="68,65,63,66,68,65,63,66,68,65,64,67"/>
</properties>
</object>
<object id="73" template="../obj/enemy.tx" x="215.667" y="99">
<properties>
<property name="enemy" value="Copper Host Brutalizer"/>
<property name="threatRange" value="30"/>
<property name="waypoints" value=""/>
</properties>
</object>
</objectgroup>
<objectgroup id="7" name="Waypoints">
<object id="57" template="../obj/waypoint.tx" x="88.5" y="327.167"/>
<object id="58" template="../obj/waypoint.tx" x="343.667" y="327"/>
<object id="59" template="../obj/waypoint.tx" x="344" y="390.333"/>
<object id="60" template="../obj/waypoint.tx" x="343.333" y="452.667"/>
<object id="61" template="../obj/waypoint.tx" x="91" y="391.667"/>
<object id="62" template="../obj/waypoint.tx" x="88.3333" y="457"/>
<object id="63" template="../obj/waypoint.tx" x="89" y="278.667"/>
<object id="64" template="../obj/waypoint.tx" x="90" y="215.667"/>
<object id="65" template="../obj/waypoint.tx" x="89.6667" y="151.667"/>
<object id="66" template="../obj/waypoint.tx" x="343.667" y="279"/>
<object id="67" template="../obj/waypoint.tx" x="343.333" y="213.667"/>
<object id="68" template="../obj/waypoint.tx" x="341" y="152"/>
</objectgroup>
</map>

View File

@@ -8,7 +8,7 @@
<tileset firstgid="11905" source="../tileset/phyrexiantiles.tsx"/>
<layer id="6" name="Collision" width="30" height="17">
<data encoding="base64" compression="zlib">
eJy9lEESgzAIRdl2ES7TaG7gDbXtsWovpIyJjUhsDYzM/IVj4Bn40t0AOqbeAQxRD7d/L6kmh+uOsEaD25qSiMNztNzXXDNkz1K0uD1jwa0Jay7die5P8XTLPS257zlvFOSzfhKT5iqd+1RyST76iTjJP3zOLe795RXM9F/88hOP1AMNV5qxdM5qtvm3X8nNvVXyaynI4xpPJV+dYYfoY62vfKzx7w5p8Juj4R75q8S14J2Zc1DuiiP2KPCDwX6q6bmmtxPwx4tA
eJy1k10OAiEMhPvqA1xGlBvsDf07luuFtNk2qXVAU3CSeVrot7TTZUe0OJ8S0Vl8SZ/fkSN3vPeZaBUf8ntNZOb4O1Gu6vaqWU1N5GPezqhmcLV2T/7MDK4Vv4nfz7qm7Z1IUe690c9i+slMnis69why2UXyxBzNTzX91Ln6fJUBpu4FyhOaq81XdIf8Llmhc/4/orNVocx8445kymbLs1GGrDjjI5nSXCF2S1VyPJqrIjVau4z6WyZwbb5+5c7g9ebc6vFMrrJXwNf9/gez1/OR3j4BI+CnQA==
</data>
</layer>
<layer id="1" name="Background" width="30" height="17">
@@ -31,7 +31,7 @@
</layer>
<layer id="7" name="Ornamental Walls" width="30" height="17">
<data encoding="base64" compression="zlib">
eJxjYBgFo2AUjIJRMApGwUgBAAf4AAE=
eJxjYBgFo2AUjDTQrMfA0KJHf3tnAu2cNQD2joJRMAoQAAAO9QLz
</data>
</layer>
<objectgroup id="4" name="Objects">
@@ -40,7 +40,7 @@
<property name="teleport" value=""/>
</properties>
</object>
<object id="67" template="../obj/treasure.tx" x="320" y="32.5"/>
<object id="67" template="../obj/treasure.tx" x="317.667" y="43.1667"/>
<object id="68" template="../obj/enemy.tx" x="207" y="94">
<properties>
<property name="enemy" value="Orthodoxy Angel"/>
@@ -60,7 +60,7 @@
<property name="waypoints" value="72,73,72"/>
</properties>
</object>
<object id="76" template="../obj/booster.tx" x="98" y="33">
<object id="76" template="../obj/booster.tx" x="98.6667" y="43">
<properties>
<property name="reward">[
{

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<tileset version="1.9" tiledversion="1.9.2" name="Copperhost_Tiles" tilewidth="16" tileheight="16" tilecount="81" columns="9">
<image source="Copperhost_Tiles.png" width="144" height="144"/>
</tileset>

View File

@@ -9,3 +9,6 @@ BasilicaSmall
GitLabSmall
xy: 32,0
size: 32, 32
CopperhostForest
xy: 64,0
size: 32, 32

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 714 KiB

After

Width:  |  Height:  |  Size: 744 KiB

View File

@@ -0,0 +1,68 @@
copperhostbrutalizer.png
size: 64,96
format: RGBA8888
filter: Nearest,Nearest
repeat: none
Avatar
xy: 0, 0
size: 16, 16
Idle
xy: 0, 16
size: 16, 16
Idle
xy: 16, 16
size: 16, 16
Idle
xy: 32, 16
size: 16, 16
Idle
xy: 48, 16
size: 16, 16
Walk
xy: 0, 32
size: 16, 16
Walk
xy: 16, 32
size: 16, 16
Walk
xy: 32, 32
size: 16, 16
Walk
xy: 48, 32
size: 16, 16
Attack
xy: 0, 48
size: 16, 16
Attack
xy: 16, 48
size: 16, 16
Attack
xy: 32, 48
size: 16, 16
Attack
xy: 48, 48
size: 16, 16
Hit
xy: 0, 64
size: 16, 16
Hit
xy: 16, 64
size: 16, 16
Hit
xy: 32, 64
size: 16, 16
Hit
xy: 48, 64
size: 16, 16
Death
xy: 0, 80
size: 16, 16
Death
xy: 16, 80
size: 16, 16
Death
xy: 32, 80
size: 16, 16
Death
xy: 48, 80
size: 16, 16

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -0,0 +1,68 @@
copperhostinfector.png
size: 64,96
format: RGBA8888
filter: Nearest,Nearest
repeat: none
Avatar
xy: 0, 0
size: 16, 16
Idle
xy: 0, 16
size: 16, 16
Idle
xy: 16, 16
size: 16, 16
Idle
xy: 32, 16
size: 16, 16
Idle
xy: 48, 16
size: 16, 16
Walk
xy: 0, 32
size: 16, 16
Walk
xy: 16, 32
size: 16, 16
Walk
xy: 32, 32
size: 16, 16
Walk
xy: 48, 32
size: 16, 16
Attack
xy: 0, 48
size: 16, 16
Attack
xy: 16, 48
size: 16, 16
Attack
xy: 32, 48
size: 16, 16
Attack
xy: 48, 48
size: 16, 16
Hit
xy: 0, 64
size: 16, 16
Hit
xy: 16, 64
size: 16, 16
Hit
xy: 32, 64
size: 16, 16
Hit
xy: 48, 64
size: 16, 16
Death
xy: 0, 80
size: 16, 16
Death
xy: 16, 80
size: 16, 16
Death
xy: 32, 80
size: 16, 16
Death
xy: 48, 80
size: 16, 16

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -1,90 +1,80 @@
ooze.png
size: 242, 106
size: 256, 160
format: RGBA8888
filter: Nearest, Nearest
repeat: none
Avatar
xy: 178, 10
size: 19, 19
xy: 135, 79
size: 18, 15
Idle
xy: 172, 4
size: 32, 32
xy: 8, 20
size: 16, 12
Idle
xy: 2, 4
size: 32, 32
orig: 32, 32
xy: 40, 20
size: 16, 12
Idle
xy: 36, 4
size: 32, 32
xy: 72, 20
size: 16, 12
Idle
xy: 172, 4
size: 32, 32
Idle
xy: 70, 4
size: 32, 32
Idle
xy: 104, 4
size: 32, 32
Idle
xy: 138, 4
size: 32, 32
xy: 104, 20
size: 16, 12
Walk
xy: 172, 4
size: 32, 32
xy: 8, 48
size: 16, 16
Walk
xy: 2, 4
size: 32, 32
xy: 40, 48
size: 16, 16
Walk
xy: 206, 4
size: 32, 32
xy: 72, 48
size: 16, 16
Walk
xy: 2, 38
size: 32, 32
xy: 104, 48
size: 16, 16
Walk
xy: 36, 38
size: 32, 32
xy: 136, 48
size: 16, 16
Walk
xy: 70, 38
size: 32, 32
xy: 168, 48
size: 16, 16
Walk
xy: 104, 38
size: 32, 32
xy: 200, 48
size: 16, 16
Walk
xy: 138, 38
size: 32, 32
xy: 232, 48
size: 16, 16
Attack
xy: 172, 4
size: 32, 32
xy: 0, 74
size: 32, 22
Attack
xy: 2, 4
size: 32, 32
xy: 32, 74
size: 32, 22
Attack
xy: 172, 38
size: 32, 32
xy: 64, 74
size: 32, 22
Attack
xy: 206, 38
size: 32, 32
xy: 96, 74
size: 32, 22
Attack
xy: 2, 72
size: 32, 32
xy: 128, 74
size: 32, 22
Attack
xy: 36, 72
size: 32, 32
xy: 160, 74
size: 32, 22
Attack
xy: 192, 74
size: 32, 22
Death
xy: 172, 4
size: 32, 32
xy: 0, 144
size: 32, 16
Death
xy: 70, 72
size: 32, 32
xy: 32, 144
size: 32, 16
Death
xy: 104, 72
size: 32, 32
xy: 64, 144
size: 32, 16
Death
xy: 138, 72
size: 32, 32
xy: 96, 144
size: 32, 16
Death
xy: 172, 72
size: 32, 32
Death
xy: 206, 72
size: 32, 32
xy: 128, 144
size: 32, 16

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View File

@@ -0,0 +1,92 @@
wall.png
size: 64,32
format: RGBA8888
filter: Nearest,Nearest
repeat: none
Avatar
xy: 0, 0
size: 16, 16
Idle
xy: 0, 16
size: 16, 16
Idle
xy: 0, 16
size: 16, 16
Idle
xy: 0, 16
size: 16, 16
Idle
xy: 0, 16
size: 16, 16
Idle
xy: 0, 16
size: 16, 16
Idle
xy: 0, 16
size: 16, 16
Idle
xy: 0, 16
size: 16, 16
Idle
xy: 0, 16
size: 16, 16
Idle
xy: 0, 16
size: 16, 16
Idle
xy: 0, 16
size: 16, 16
Idle
xy: 16, 16
size: 16, 16
Idle
xy: 0, 16
size: 16, 16
Idle
xy: 0, 16
size: 16, 16
Idle
xy: 0, 16
size: 16, 16
Idle
xy: 0, 16
size: 16, 16
Idle
xy: 0, 16
size: 16, 16
Idle
xy: 0, 16
size: 16, 16
Idle
xy: 0, 16
size: 16, 16
Idle
xy: 0, 16
size: 16, 16
Idle
xy: 0, 16
size: 16, 16
Idle
xy: 0, 16
size: 16, 16
Idle
xy: 0, 16
size: 16, 16
Idle
xy: 0, 16
size: 16, 16
Idle
xy: 0, 16
size: 16, 16
Idle
xy: 0, 16
size: 16, 16
Idle
xy: 16, 16
size: 16, 16
Attack
xy: 32, 16
size: 16, 16
Death
xy: 48, 16
size: 16, 16

Binary file not shown.

After

Width:  |  Height:  |  Size: 762 B

View File

@@ -2863,6 +2863,150 @@
],
"colors": "RU"
},
{
"name": "Copper Host Brutalizer",
"sprite": "sprites/copperhostbrutalizer.atlas",
"deck": [
"deckscopperhostbrutalizer.json"
],
"spawnRate": 1,
"difficulty": 0.1,
"speed": 25,
"life": 19,
"rewards": [
{
"type": "deckCard",
"probability": 1,
"count": 2,
"addMaxCount": 4,
"rarity": [
"common"
]
},
{
"type": "deckCard",
"probability": 0.75,
"count": 1,
"addMaxCount": 2,
"rarity": [
"uncommon"
],
"cardTypes": [
"Creature",
"Artifact",
"Enchantment",
"Instant",
"Sorcery"
]
},
{
"type": "deckCard",
"probability": 0.50,
"count": 1,
"addMaxCount": 2,
"rarity": [
"rare"
],
"cardTypes": [
"Creature",
"Artifact",
"Enchantment",
"Instant",
"Sorcery"
]
},
{
"type": "deckCard",
"probability": 0.1,
"count": 1,
"rarity": [
"rare"
],
"cardTypes": [
"Land"
]
},
{
"type": "gold",
"probability": 0.3,
"count": 10,
"addMaxCount": 90
}
],
"colors": "GB"
},
{
"name": "Copper Host Infector",
"sprite": "sprites/copperhostinfector.atlas",
"deck": [
"decks/copperhostinfector.json"
],
"spawnRate": 1,
"difficulty": 0.1,
"speed": 30,
"life": 16,
"rewards": [
{
"type": "deckCard",
"probability": 1,
"count": 2,
"addMaxCount": 4,
"rarity": [
"common"
]
},
{
"type": "deckCard",
"probability": 0.5,
"count": 1,
"addMaxCount": 2,
"rarity": [
"uncommon"
],
"cardTypes": [
"Creature",
"Artifact",
"Enchantment",
"Instant",
"Sorcery"
]
},
{
"type": "deckCard",
"probability": 0.25,
"count": 1,
"addMaxCount": 1,
"rarity": [
"rare"
],
"cardTypes": [
"Creature",
"Artifact",
"Enchantment",
"Instant",
"Sorcery"
]
},
{
"type": "deckCard",
"probability": 0.1,
"count": 1,
"rarity": [
"rare"
],
"cardTypes": [
"Land"
]
},
{
"type": "gold",
"probability": 0.3,
"count": 10,
"addMaxCount": 90
}
],
"colors": "G"
},
{
"name": "Crab",
"sprite": "sprites/dungeon/crab.atlas",

View File

@@ -678,6 +678,15 @@
"map": "maps/map/main_story/colorless_castle.tmx",
"radiusFactor": 0.4
},
{
"name": "CopperhostForest",
"type": "dungeon",
"count": 2,
"radiusFactor": 0.8,
"spriteAtlas": "maps/tileset/Phyrexian_Buildings.atlas",
"sprite": "CopperhostForest",
"map": "maps/map/phyrexian_g1.tmx"
},
{
"name": "Crawlspace",
"type": "dungeon",

View File

@@ -4,8 +4,8 @@ Types:Legendary Creature Zombie Knight
PT:3/3
S:Mode$ Continuous | Affected$ Card.Self | MayPlay$ True | AffectedZone$ Graveyard | EffectZone$ Graveyard
S:Mode$ CantBeCast | ValidCard$ Card.Self | Origin$ Exile,Hand,Library,Command | EffectZone$ Graveyard,Hand,Library,Command,Stack | Description$ You may cast CARDNAME from your graveyard, but not from anywhere else.
S:Mode$ Continuous | Affected$ Knight.YouCtrl | MayPlay$ True | EffectZone$ Battlefield | AffectedZone$ Graveyard | Description$ As long as CARDNAME is on the battlefield, you may play Knight cards from your graveyard.
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigLose | TriggerDescription$ When CARDNAME dies, you lose 2 life.
S:Mode$ Continuous | Affected$ Knight.YouCtrl | ValidAfterStack$ Spell.Knight | MayPlay$ True | EffectZone$ Battlefield | AffectedZone$ Graveyard | Description$ As long as NICKNAME is on the battlefield, you may cast Knight spells from your graveyard.
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigLose | TriggerDescription$ When NICKNAME dies, you lose 2 life.
SVar:TrigLose:DB$ LoseLife | Defined$ You | LifeAmount$ 2
AI:RemoveDeck:Random
SVar:DiscardMe:5

View File

@@ -2,7 +2,7 @@ Name:Malicious Affliction
ManaCost:B B
Types:Instant
A:SP$ Destroy | Cost$ B B | ValidTgts$ Creature.nonBlack | TgtPrompt$ Select target nonblack creature | SpellDescription$ Destroy target nonblack creature.
T:Mode$ SpellCast | ValidCard$ Card.Self | Execute$ TrigCopy | CheckSVar$ Morbid | SVarCompare$ GE1 | TriggerDescription$ Morbid — When you cast this spell, if a creature died this turn, you may copy CARDNAME and may choose a new target for the copy.
T:Mode$ SpellCast | ValidCard$ Card.Self | Execute$ TrigCopy | CheckSVar$ Morbid | SVarCompare$ GE1 | OptionalDecider$ You | TriggerDescription$ Morbid — When you cast this spell, if a creature died this turn, you may copy CARDNAME and may choose a new target for the copy.
SVar:TrigCopy:DB$ CopySpellAbility | Defined$ TriggeredSpellAbility | MayChooseTarget$ True
SVar:Morbid:Count$ThisTurnEntered_Graveyard_from_Battlefield_Creature
Oracle:Morbid — When you cast this spell, if a creature died this turn, you may copy Malicious Affliction and may choose a new target for the copy.\nDestroy target nonblack creature.

View File

@@ -2,10 +2,10 @@ Name:Tempting Contract
ManaCost:4
Types:Artifact
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ DBRepeat | SubAbility$ DBToken | TriggerDescription$ At the beginning of your upkeep, each opponent may create a Treasure token. For each opponent who does, you create a Treasure token.
SVar:DBRepeat:DB$ RepeatEach | RepeatSubAbility$ DBOppToken | RepeatPlayers$ Player.Opponent | SubAbility$ DBToken | RepeatOptionalForEachPlayer$ True | RepeatOptionalMessage$ Do you want to create a Treasure token?
SVar:DBOppToken:DB$ Token | TokenScript$ c_a_treasure_sac | TokenOwner$ Player.IsRemembered | RememberTokens$ True
SVar:DBRepeat:DB$ RepeatEach | RepeatSubAbility$ DBOppToken | RepeatPlayers$ Opponent | RepeatOptionalForEachPlayer$ True | RememberDeciders$ True | RepeatOptionalMessage$ Do you want to create a Treasure token? | ChangeZoneTable$ True | SubAbility$ DBToken
SVar:DBOppToken:DB$ Token | TokenScript$ c_a_treasure_sac | TokenOwner$ Player.IsRemembered
SVar:DBToken:DB$ Token | TokenAmount$ X | TokenScript$ c_a_treasure_sac | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:X:Remembered$Amount
SVar:X:Count$RememberedSize
DeckHas:Ability$Token|Sacrifice
Oracle:At the beginning of your upkeep, each opponent may create a Treasure token. For each opponent who does, you create a Treasure token.

View File

@@ -0,0 +1,7 @@
Name:Alabaster Host Sanctifier
ManaCost:1 W
Types:Creature Phyrexian Cleric
PT:2/2
K:Lifelink
DeckHas:Ability$LifeGain
Oracle:Lifelink

View File

@@ -0,0 +1,16 @@
Name:Borborygmos and Fblthp
ManaCost:2 G U R
Types:Legendary Creature Cyclops Homunculus
PT:6/5
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ DBDraw | OptionalDecider$ You | TriggerDescription$ Whenever CARDNAME enters the battlefield or attacks, draw a card, then you may discard any number of land cards. When you discard one or more cards this way, CARDNAME deals twice that much damage to target creature.
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ DBDraw | TriggerZones$ Battlefield | Secondary$ True | TriggerDescription$ Whenever CARDNAME enters the battlefield or attacks, draw a card, then you may discard any number of land cards. When you discard one or more cards this way, CARDNAME deals twice that much damage to target creature.
SVar:DBDraw:DB$ Draw | SubAbility$ DBDiscard
SVar:DBDiscard:DB$ Discard | DiscardValid$ Land | AnyNumber$ True | Optional$ True | Mode$ TgtChoose | RememberDiscarded$ True | SubAbility$ TrigImmediateTrig
SVar:TrigImmediateTrig:DB$ ImmediateTrigger | ConditionDefined$ Remembered | ConditionPresent$ Card | ConditionCompare$ GE1 | RememberSVarAmount$ X | Execute$ TrigDoubleDamage | SubAbility$ DBCleanup
SVar:TrigDoubleDamage:DB$ DealDamage | NumDmg$ Count$TriggerRememberAmount | ValidTgts$ Creature
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:X:Count$RememberedSize/Twice
A:AB$ ChangeZone | Cost$ 1 U | Origin$ Battlefield | Destination$ Library | LibraryPosition$ 2 | SpellDescription$ Put CARDNAME into its owner's library third from the top.
DeckHas:Ability$Discard
SVar:HasAttackEffect:TRUE
Oracle:Whenever Borborygmos and Fblthp enters the battlefield or attacks, draw a card, then you may discard any number of land cards. When you discard one or more cards this way, Borborygmos and Fblthp deals twice that much damage to target creature.\n{1}{U}: Put Borborygmos and Fblthp into its owners library third from the top.

View File

@@ -0,0 +1,5 @@
Name:Elspeth's Smite
ManaCost:W
Types:Instant
A:SP$ DealDamage | ValidTgts$ Creature.attacking,Creature.blocking | TgtPrompt$ Choose target attacking or blocking creature | NumDmg$ 3 | ReplaceDyingDefined$ Targeted.Creature | SpellDescription$ CARDNAME deals 3 damage to target attacking or blocking creature. If that creature would die this turn, exile it instead
Oracle:Elspeth's Smite deals 3 damage to target attacking or blocking creature. If that creature would die this turn, exile it instead.

View File

@@ -0,0 +1,26 @@
Name:Etali, Primal Conqueror
ManaCost:5 R R
Types:Legendary Creature Elder Dinosaur
PT:7/7
K:Trample
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDig | TriggerDescription$ When CARDNAME enters the battlefield, each player exiles cards from the top of their library until they exile a nonland card. You may cast any number of spells from among the nonland cards exiled this way without paying their mana costs.
SVar:TrigDig:DB$ DigUntil | Defined$ Player | Valid$ Card.nonLand | FoundDestination$ Exile | RevealedDestination$ Exile | RememberFound$ True | SubAbility$ DBPlay
SVar:DBPlay:DB$ Play | Controller$ You | Defined$ Remembered | WithoutManaCost$ True | ValidSA$ Spell | Optional$ True | Amount$ All | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
A:AB$ SetState | Cost$ 9 GP | Defined$ Self | Mode$ Transform | SorcerySpeed$ True | AILogic$ Always | SpellDescription$ Transform CARDNAME. Activate only as a sorcery.
AlternateMode:DoubleFaced
Oracle:Trample\nWhen Etali, Primal Conqueror enters the battlefield, each player exiles cards from the top of their library until they exile a nonland card. You may cast any number of spells from among the nonland cards exiled this way without paying their mana costs.\n{9}{G/P}: Transform Etali. Activate only as a sorcery.
ALTERNATE
Name:Etali, Primal Sickness
ManaCost:no cost
Colors:green,red
Types:Legendary Creature Phyrexian Elder Dinosaur
PT:11/11
K:Trample
K:Indestructible
T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigPoison | SpellDescription$ Whenever CARDNAME deals combat damage to a player, they get that many poison counters. (A player with ten or more poison counters loses the game.)
SVar:TrigPoison:DB$ Poison | Defined$ TriggeredTarget | Num$ X
SVar:X:TriggerCount$DamageAmount
Oracle:Trample, indestructible\nWhenever Etali, Primal Sickness deals combat damage to a player, they get that many poison counters. (A player with ten or more poison counters loses the game.)

View File

@@ -0,0 +1,11 @@
Name:Grafted Butcher
ManaCost:1 B
Types:Creature Phyrexian Samurai
PT:2/2
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPump | TriggerDescription$ When CARDNAME enters the battlefield, Phyrexians you control gain menace until end of turn.
SVar:TrigPump:DB$ PumpAll | ValidCards$ Phyrexian.YouCtrl | KW$ Menace
S:Mode$ Continuous | Affected$ Phyrexian.Other+YouCtrl | AddPower$ 1 | AddToughness$ 1 | Description$ Other Phyrexians you control get + 1/+1.
A:AB$ ChangeZone | Cost$ 3 B Sac<1/Artifact;Creature/artifact or creature> | Origin$ Graveyard | Destination$ Battlefield | ActivationZone$ Graveyard | SorcerySpeed$ True | SpellDescription$ Return CARDNAME from your graveyard to the battlefield. Activate only as a sorcery.
DeckHints:Type$Phyrexian
DeckHas:Ability$Sacrifice|Graveyard
Oracle:When Grafted Butcher enters the battlefield, Phyrexians you control gain menace until end of turn.\nOther Phyrexians you control get + 1/+1\n{3}{B}, Sacrifice an artifact or creature: Return Grafted Butcher from your graveyard to the battlefield. Activate only as a sorcery.

View File

@@ -0,0 +1,11 @@
Name:Guardian of Ghirapur
ManaCost:2 W
Types:Creature Angel
PT:3/3
K:Flying
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigBlink | TriggerDescription$ When CARDNAME enters the battlefield, exile up to one other target creature or artifact you control. Return it to the battlefield under its owner's control at the beginning of the next end step.
SVar:TrigBlink:DB$ ChangeZone | TargetMin$ 0 | TargetMax$ 1 | ValidTgts$ Creature.YouCtrl+Other,Artifact.YouCtrl+Other | TgtPrompt$ Select up to one other target creature or artifact you control | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True | SubAbility$ DelTrig
SVar:DelTrig:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | Execute$ TrigReturn | RememberObjects$ RememberedLKI | TriggerDescription$ Return the exiled card to the battlefield. | SubAbility$ DBCleanup
SVar:TrigReturn:DB$ ChangeZone | Origin$ Exile | Destination$ Battlefield | Defined$ DelayTriggerRememberedLKI
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
Oracle:Flying\nWhen Guardian of Ghirapur enters the battlefield, exile up to one other target creature or artifact you control. Return it to the battlefield under its owner's control at the beginning of the next end step.

View File

@@ -0,0 +1,13 @@
Name:Hoarding Broodlord
ManaCost:5 B B B
Types:Creature Dragon
PT:7/6
K:Convoke
K:Flying
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigSearch | TriggerDescription$ When CARDNAME enters the battlefield, search your library for a card, exile it face down, then shuffle. For as long as that card remains exiled, you may play it.
SVar:TrigSearch:DB$ ChangeZone | ChangeNum$ 1 | ChangeType$ Card | Mandatory$ True | SubAbility$ DBEffect | Origin$ Library | Destination$ Exile | ExileFaceDown$ True | RememberChanged$ True
SVar:DBEffect:DB$ Effect | RememberObjects$ Remembered | StaticAbilities$ STPlay | Duration$ Permanent | ForgetOnMoved$ Exile | SubAbility$ DBCleanup
SVar:STPlay:Mode$ Continuous | MayPlay$ True | MayLookAt$ You | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Exile | Description$ For as long as that card remains exiled, you may play it.
S:Mode$ Continuous | Affected$ Card.YouCtrl+wasCastFromExile | AffectedZone$ Stack | AddKeyword$ Convoke | Description$ Spells you cast from exile have convoke.
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
Oracle:Convoke (Your creatures can help cast this spell. Each creature you tap while casting this spell pays for {1} or one mana of that creature's color.)\nFlying\nWhen Hoarding Broodlord enters the battlefield, search your library for a card, exile it face down, then shuffle. For as long as that card remains exiled, you may play it.\nSpells you cast from exile have convoke.

View File

@@ -14,6 +14,16 @@ ScryfallCode=MOC
49 C Esper @Bruce Brenneise
61 C Nyx @Piotr Dura
67 C Towashi @Kamila Szutenberg
88 M Bright-Palm, Soul Awakener @Mila Pesic
89 M Brimaz, Blight of Oreskos @Uriah Voth
91 M Gimbal, Gremlin Prodigy @Fajareka Setiawan
92 M Kasla, the Broken Halo @Martina Fackova
97 M Sidar Jabari of Zhalfir @Simon Dominic
134 M Bright-Palm, Soul Awakener @Mila Pesic
135 M Brimaz, Blight of Oreskos @Uriah Voth
136 M Gimbal, Gremlin Prodigy @Fajareka Setiawan
137 M Kasla, the Broken Halo @Martina Fackova
138 M Sidar Jabari of Zhalfir @Simon Dominic
147 C Isle of Vesuva @Zoltan Boros & Gabor Szikszai
148 C Jund @Aleksi Briclot
153 C Panopticon @John Avon

View File

@@ -6,28 +6,95 @@ Type=Expansion
ScryfallCode=MOM
[cards]
1 M Invasion of Ravnica @Leon Tukker
4 C Alabaster Host Sanctifier @Konstantin Porubov
6 M Archangel Elspeth @Cynthia Sheppard
9 R Boon-Bringer Valkyrie @Heonhwa Choe
12 M Elesh Norn @Magali Villeneuve
13 U Elspeth's Smite @Livia Prima
16 R Guardian of Ghirapur @Cynthia Sheppard
17 R Heliod, the Radiant Dawn @Victor Adame Minguez
21 U Invasion of Dominaria @Denys Tsiperko
26 R Knight-Errant of Eos @Kevin Sidharta
28 M Monastery Mentor @Brian Valeza
29 U Norn's Inquisitor @Denis Zhbankov
35 U Seal from Existence @Anato Finnstark
38 U Sun-Blessed Guardian @Brian Valeza
45 U Zhalfirin Lancer @Nino Vecia
51 R Chrome Host Seedshark @Donato Giancola
58 R Faerie Mastermind @Joshua Raphael
61 R Invasion of Arcavios @Dmitry Burmak
63 R Invasion of Segovia @Edgar Sánchez Hidalgo
65 M Jin-Gitaxias @Ekaterina Burmak
67 C Moment of Truth @Rovina Cai
68 C Negate @Viko Menezes
83 R Transcendent Message @Liiga Smilshkalne
89 R Archpriest of Shadows @Fariba Khamseh
90 R Ayara, Widow of the Realm @Anna Podedworna
94 R Breach the Multiverse @Liiga Smilshkalne
109 R Grafted Butcher @Zack Stella
110 R Hoarding Broodlord @Filip Burburan
114 R Invasion of Fiora @Joshua Raphael
117 U Merciless Repurposing @Artur Nakhodkin
118 C Mirrodin Avenged @Scott Murphy
121 U Phyrexian Gargantua @Kevin Sidharta
123 U Render Inert @Yigit Koroglu
127 C Traumatic Revelation @Cristi Balanescu
131 C Beamtown Beatstick @Konstantin Porubov
132 R Bloodfeather Phoenix @Rudy Siswanto
134 M Chandra, Hope's Beacon @Kieran Yanner
135 R City on Fire @Jake Murray
137 R Etali, Primal Conqueror @Ryan Pancoast
143 U Harried Artisan @Caio Monteiro
144 R Into the Fire @Grzegorz Rutkowski
149 M Invasion of Tarkir @Darren Tan
159 U Ramosian Greatsword @Jason A. Engle
162 U Scrappy Bruiser @David Auden Nash
166 U Stoke the Flames @Liiga Smilshkalne
171 R Voldaren Thrillseeker @Viko Menezes
188 U Gnottvold Hermit @Artur Nakhodkin
190 R Invasion of Ikoria @Antonio José Manzanedo
191 R Invasion of Ixalan @Viktor Titov
192 U Invasion of Muraganda @Adam Paquette
193 M Invasion of Shandalar @Adam Paquette
194 U Invasion of Zendikar @Diego Gisbert
196 U Kami of Whispered Hopes @Filipe Pagliuso
200 R Polukranos Reborn @David Auden Nash
202 U Ravenous Sailback @Andrew Mar
203 U Sandstalker Moloch @Donato Giancola
206 U Storm the Seedcore @Jason Rainville
207 U Streetwise Negotiator @Brent Hollowell
208 U Tandem Takedown @Yigit Koroglu
211 R Tribute to the World Tree @Kristina Carroll
217 M Wrenn and Realmbreaker @Cristi Balanescu
218 R Baral and Kari Zev @Fariba Khamseh
219 M Borborygmos and Fblthp @Rudy Siswanto
220 U Botanical Brawler @Jesper Ejsing
222 R Drana and Linvala @Raluca Marinescu
224 C Errant and Giada @Cristi Balanescu
225 R Ghalta and Mavren @Zezhou Chen
226 R Glissa, Herald of Predation @Cristi Balanescu
227 U Halo Forager @Kevin Sidharta
228 R Hidetsugu and Kairi @Chris Rahn
229 R Inga and Esika @Wayne Reynolds
230 R Invasion of Alara @Mathias Kollros
233 U Invasion of Ergamon @Manuel Castañón
234 U Invasion of Kaladesh @Leon Tukker
236 U Invasion of Lorwyn @Dan Scott
237 U Invasion of Moag @Filip Burburan
239 M Invasion of New Phyrexia @Chris Rallis
241 R Invasion of Tolvada @Henry Peters
243 U Joyful Stormsculptor @Christina Kraus
244 R Kogla and Yidaro @Chris Rahn
249 R Omnath, Locus of All @Bryan Sola
250 R Quintorius, Loremaster @Lie Setiawan
252 R Rankle and Torbran @Viko Menezes
253 U Sculpted Perfection @Chris Seaman
255 M Thalia and The Gitrog Monster @Howard Lyon
256 R Yargle and Multani @Slawomir Maniak
258 M Zurgo and Ojutai @Daarken
263 R Realmbreaker, the Invasion Tree @Kekai Kotaki
265 M Sword of Once and Future @Joshua Cairos
267 C Bloodfell Caves @Jorge Jacinto
268 C Blossoming Sands @Robin Olausson
269 C Dismal Backwater @Chris Ostrowski
@@ -38,21 +105,84 @@ ScryfallCode=MOM
274 C Thornwood Falls @Roman Kuteynikov
275 C Tranquil Cove @Chris Ostrowski
276 C Wind-Scarred Crag @Roman Kuteynikov
277 L Plains @Sam Burley
278 L Island @Sam Burley
279 L Swamp @Sam Burley
280 L Mountain @Sam Burley
281 L Forest @Sam Burley
282 L Plains @Jorge Jacinto
283 L Plains @Lucas Staniec
284 L Island @Grady Frederick
285 L Island @Henry Peters
286 L Swamp @Raymond Bonilla
287 L Swamp @Julian Kok Joon Wen
288 L Mountain @Jorge Jacinto
289 L Mountain @Lucas Staniec
290 L Forest @Grady Frederick
291 L Forest @Henry Peters
292 M Elesh Norn @Kekai Kotaki
293 R Heliod, the Radiant Dawn @Jason A. Engle
294 M Jin-Gitaxias @Dominik Mayer
296 R Ayara, Widow of the Realm @Josu Hernaiz
298 R Etali, Primal Conqueror @Yeong-Hao Han
300 R Polukranos Reborn @Jason A. Engle
302 R Baral and Kari Zev @Magali Villeneuve
303 M Borborygmos and Fblthp @Justin Hernandez & Alexis Hernandez
305 R Drana and Linvala @Anato Finnstark
307 R Ghalta and Mavren @Jody Clark
308 R Glissa, Herald of Predation @Flavio Girón
309 R Hidetsugu and Kairi @chiri*
310 R Inga and Esika @Matt Stikker
311 R Kogla and Yidaro @Daniel Warren Johnson
313 R Omnath, Locus of All @Jessica Rossier
314 R Quintorius, Loremaster @Justin Hernandez & Alexis Hernandez
315 R Rankle and Torbran @Omar Rayyan
316 M Thalia and The Gitrog Monster @Sami Makkonen
317 R Yargle and Multani @Lisa Heidhoff
319 M Zurgo and Ojutai @Adrian Smith
320 M Archangel Elspeth @Denys Tsiperko
321 M Chandra, Hope's Beacon @Randy Vargas
322 M Wrenn and Realmbreaker @Jehan Choo
323 R Essence of Orthodoxy @Oriana Menendez
324 C Phyrexian Pegasus @Carlos Palma Cruchaga
325 U Seedpod Caretaker @Slawomir Maniak
326 R Interdisciplinary Mascot @Mathias Kollros
327 U Referee Squad @Steven Belledin
328 C Zephyr Winder @Jana Schirmer
329 C Injector Crocodile @Mark Zug
330 U Seer of Stolen Sight @Betty Jiang
331 R Terror of Towashi @Lius Lasahido
332 U Axgard Artisan @Quintin Gleim
333 C Cragsmasher Yeti @Brent Hollowell
334 R Orthion, Hero of Lavabrink @Aaron Miller
335 C Fairgrounds Trumpeter @Samuel Perin
336 U Ruins Recluse @Lorenzo Mastroianni
337 R Surrak and Goreclaw @Lucas Graciano
339 M Jin-Gitaxias @Julian Kok Joon Wen
343 R Boon-Bringer Valkyrie @Heonhwa Choe
345 R Guardian of Ghirapur @Cynthia Sheppard
346 R Knight-Errant of Eos @Kevin Sidharta
347 M Monastery Mentor @Brian Valeza
350 R Chrome Host Seedshark @Donato Giancola
352 R Faerie Mastermind @Joshua Raphael
354 R Transcendent Message @Liiga Smilshkalne
358 R Breach the Multiverse @Liiga Smilshkalne
359 R Grafted Butcher @Zack Stella
360 R Hoarding Broodlord @Filip Burburan
363 R City on Fire @Jake Murray
364 R Into the Fire @Grzegorz Rutkowski
367 R Voldaren Thrillseeker @Viko Menezes
374 R Realmbreaker, the Invasion Tree @Kekai Kotaki
375 M Sword of Once and Future @Joshua Cairos
376 R Essence of Orthodoxy @Oriana Menendez
377 R Interdisciplinary Mascot @Mathias Kollros
378 R Terror of Towashi @Lius Lasahido
379 R Orthion, Hero of Lavabrink @Aaron Miller
380 R Surrak and Goreclaw @Lucas Graciano
381 U Norn's Inquisitor @Denis Zhbankov
382 U Scrappy Bruiser @David Auden Nash
383 U Kami of Whispered Hopes @Filipe Pagliuso
384 U Botanical Brawler @Jesper Ejsing
385 U Halo Forager @Kevin Sidharta
386 R Ghalta and Mavren @Betty Jiang
387 R Omnath, Locus of All @Helge C. Balzer

View File

@@ -7,15 +7,33 @@ ScryfallCode=MUL
[cards]
3 M Elesh Norn, Grand Cenobite @Flavio Girón
7 R Thalia, Guardian of Thraben @Joshua Alvarado
9 R Emry, Lurker of the Loch @Wylie Beckert
10 U Inga Rune-Eyes @rishxxv
11 M Jin-Gitaxias, Core Augur @Kekai Kotaki
14 R Horobi, Death's Wail @Rorubei
16 M Sheoldred, Whispering One @Flavio Girón
17 M Skithiryx, the Blight Dragon @Kekai Kotaki
19 U Yargle, Glutton of Urborg @Serena Malyon
20 R Captain Lannery Storm @Jody Clark
21 M Ragavan, Nimble Pilferer @Magali Villeneuve
23 M Urabrask the Hidden @Flavio Girón
25 U Zada, Hedron Grinder @Dominik Mayer
29 M Vorinclex, Voice of Hunger @JungShan
30 R Yedora, Grave Gardener @Matthew G. Lewis
33 M Atraxa, Praetors' Voice @Justin Hernandez & Alexis Hernandez
43 U Imoti, Celebrant of Bounty @Bastien L. Deharme
44 R Jegantha, the Wellspring @Steve Ellis
49 M Kroxa, Titan of Death's Hunger @Jason A. Engle
53 M Niv-Mizzet Reborn @Illustranesia
60 R Taigam, Ojutai Master @Domenico Cava
68 M Elesh Norn, Grand Cenobite @Igor Kieryluk
76 M Jin-Gitaxias, Core Augur @Eric Deschamps
81 M Sheoldred, Whispering One @Jana Schirmer & Johannes Voss
82 M Skithiryx, the Blight Dragon @Chippy
84 U Yargle, Glutton of Urborg @Jehan Choo
88 M Urabrask the Hidden @Brad Rigney
90 U Zada, Hedron Grinder @Chris Rallis
94 M Vorinclex, Voice of Hunger @Karl Kopinski
114 M Kroxa, Titan of Death's Hunger @Vincent Proce
118 M Niv-Mizzet Reborn @Raymond Swanland

View File

@@ -15,3 +15,6 @@ ScryfallCode=SCH
7 R Annex Sentry @Sam Guay
8 R Memory Deluge @Sam Guay
9 R Koth, Fire of Resistance @Kieran Yanner
10 R Strangle @Sidharth Chaturvedi
11 R Aether Channeler @Olivier Bernard
12 M Thalia and The Gitrog Monster @PINDURSKI