From 7a28295585a72599946cd4c863e0134ed259c5e4 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Wed, 11 Sep 2019 21:30:22 +0800 Subject: [PATCH 01/47] Draw Priority for Multiplayer game (Human 2 players) --- .../java/forge/game/phase/PhaseHandler.java | 8 ++++++ .../main/java/forge/game/player/Player.java | 6 +++++ .../java/forge/game/player/PlayerView.java | 7 +++++ .../forge/trackable/TrackableProperty.java | 1 + forge-gui-mobile/src/forge/Graphics.java | 1 + .../src/forge/screens/match/MatchScreen.java | 26 +++++++++++++++++++ 6 files changed, 49 insertions(+) diff --git a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java index dde7fd43cc0..84130bd2344 100644 --- a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java +++ b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java @@ -1073,6 +1073,14 @@ public class PhaseHandler implements java.io.Serializable { game.fireEvent(new GameEventGameRestarted(playerTurn)); return; } + + // update Priority for all players + for (final Player p : game.getPlayers()) { + if(getPriorityPlayer() == p) + p.setHasPriority(true); + else + p.setHasPriority(false); + } } } diff --git a/forge-game/src/main/java/forge/game/player/Player.java b/forge-game/src/main/java/forge/game/player/Player.java index 2d826253bfb..06419e8b2a8 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -2672,6 +2672,12 @@ public class Player extends GameEntity implements Comparable { public void setExtraTurnCount(final int val) { view.setExtraTurnCount(val); } + public void setHasPriority(final boolean val) { + view.setHasPriority(val); + } + public boolean isAI() { + return view.isAI(); + } public void initVariantsZones(RegisteredPlayer registeredPlayer) { PlayerZone bf = getZone(ZoneType.Battlefield); diff --git a/forge-game/src/main/java/forge/game/player/PlayerView.java b/forge-game/src/main/java/forge/game/player/PlayerView.java index ec65996b87c..28dfb54c0e3 100644 --- a/forge-game/src/main/java/forge/game/player/PlayerView.java +++ b/forge-game/src/main/java/forge/game/player/PlayerView.java @@ -205,6 +205,13 @@ public class PlayerView extends GameEntityView { set(TrackableProperty.ExtraTurnCount, val); } + public boolean getHasPriority() { + return get(TrackableProperty.HasPriority); + } + public void setHasPriority(final boolean val) { + set(TrackableProperty.HasPriority, val); + } + public int getMaxHandSize() { return get(TrackableProperty.MaxHandSize); } diff --git a/forge-game/src/main/java/forge/trackable/TrackableProperty.java b/forge-game/src/main/java/forge/trackable/TrackableProperty.java index 1f446791f85..2275f87a4d4 100644 --- a/forge-game/src/main/java/forge/trackable/TrackableProperty.java +++ b/forge-game/src/main/java/forge/trackable/TrackableProperty.java @@ -120,6 +120,7 @@ public enum TrackableProperty { Mana(TrackableTypes.ManaMapType, FreezeMode.IgnoresFreeze), IsExtraTurn(TrackableTypes.BooleanType), ExtraTurnCount(TrackableTypes.IntegerType), + HasPriority(TrackableTypes.BooleanType), //SpellAbility HostCard(TrackableTypes.CardViewType), diff --git a/forge-gui-mobile/src/forge/Graphics.java b/forge-gui-mobile/src/forge/Graphics.java index 58467efc9eb..fd314326040 100644 --- a/forge-gui-mobile/src/forge/Graphics.java +++ b/forge-gui-mobile/src/forge/Graphics.java @@ -533,6 +533,7 @@ public class Graphics { alphaComposite = 1; batch.setColor(Color.WHITE); } + public float getfloatAlphaComposite() { return alphaComposite; } public void drawImage(FImage image, float x, float y, float w, float h) { drawImage(image, x, y, w, h, false); diff --git a/forge-gui-mobile/src/forge/screens/match/MatchScreen.java b/forge-gui-mobile/src/forge/screens/match/MatchScreen.java index 945f470ebae..d94183f3c3e 100644 --- a/forge-gui-mobile/src/forge/screens/match/MatchScreen.java +++ b/forge-gui-mobile/src/forge/screens/match/MatchScreen.java @@ -3,6 +3,7 @@ package forge.screens.match; import java.util.*; import java.util.Map.Entry; +import com.badlogic.gdx.graphics.Color; import org.apache.commons.lang3.tuple.Pair; import com.badlogic.gdx.Input.Keys; @@ -565,6 +566,23 @@ public class MatchScreen extends FScreen { y = bottomPlayerPanel.getTop() + bottomPlayerPanel.getField().getHeight(); g.drawLine(1, BORDER_COLOR, x, y, w, y); } + + //Draw Priority Human Multiplayer 2 player + float oldAlphaComposite = g.getfloatAlphaComposite(); + if ((getPlayerPanels().keySet().size() == 2) && noAIPlayer()){ + for (VPlayerPanel playerPanel: playerPanelsList){ + midField = playerPanel.getTop(); + y = midField - 0.5f; + float adjustY = Forge.isLandscapeMode() ? y + 1f : midField; + float adjustH = Forge.isLandscapeMode() ? playerPanel.getField().getBottom() - 1f : playerPanel.getBottom() - 1f; + if(playerPanel.getPlayer().getHasPriority() && !playerPanel.getPlayer().isAI()) + g.setAlphaComposite(0.8f); + else + g.setAlphaComposite(0f); + g.drawRect(4f, Color.CYAN, playerPanel.getField().getLeft(), adjustY, playerPanel.getField().getWidth(), adjustH); + g.setAlphaComposite(oldAlphaComposite); + } + } } protected ScrollBounds layoutAndGetScrollBounds(float visibleWidth, float visibleHeight) { @@ -669,5 +687,13 @@ public class MatchScreen extends FScreen { } return false; } + private boolean noAIPlayer(){ + boolean noAi = true; + for (VPlayerPanel playerPanel: playerPanelsList) { + if(playerPanel.getPlayer().isAI()) + noAi = false; + } + return noAi; + } } } From 61f400feacfe8d0ccd41d5201bd3f7ad2c9f4b07 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Thu, 12 Sep 2019 20:28:48 +0800 Subject: [PATCH 02/47] Prevent NPE --- .../src/forge/card/CardRenderer.java | 66 +++++++++---------- 1 file changed, 32 insertions(+), 34 deletions(-) diff --git a/forge-gui-mobile/src/forge/card/CardRenderer.java b/forge-gui-mobile/src/forge/card/CardRenderer.java index aa898eb012f..929f0967155 100644 --- a/forge-gui-mobile/src/forge/card/CardRenderer.java +++ b/forge-gui-mobile/src/forge/card/CardRenderer.java @@ -558,39 +558,37 @@ public class CardRenderer { } //if (counterBoxBaseWidth + font.getBounds(String.valueOf(maxCounters)).width > w) { - layout.setText(font, String.valueOf(maxCounters)); - - if (counterBoxBaseWidth + layout.width > w) { - - drawCounterImage(card, g, x, y, w, h); - return; + if(font != null && !String.valueOf(maxCounters).isEmpty()){ + layout.setText(font, String.valueOf(maxCounters)); + if (counterBoxBaseWidth + layout.width > w) { + drawCounterImage(card, g, x, y, w, h); + return; + } } - } for (Map.Entry counterEntry : card.getCounters().entrySet()) { - final CounterType counter = counterEntry.getKey(); final int numberOfCounters = counterEntry.getValue(); //final float counterBoxRealWidth = counterBoxBaseWidth + font.getBounds(String.valueOf(numberOfCounters)).width + 4; - layout.setText(font, String.valueOf(numberOfCounters)); - final float counterBoxRealWidth = counterBoxBaseWidth + layout.width + 4; + if(font != null && !String.valueOf(numberOfCounters).isEmpty()){ + layout.setText(font, String.valueOf(numberOfCounters)); + final float counterBoxRealWidth = counterBoxBaseWidth + layout.width + 4; - final float counterYOffset = spaceFromTopOfCard - (currentCounter++ * (counterBoxHeight + counterBoxSpacing)); + final float counterYOffset = spaceFromTopOfCard - (currentCounter++ * (counterBoxHeight + counterBoxSpacing)); - g.fillRect(counterBackgroundColor, x - 3, counterYOffset, counterBoxRealWidth, counterBoxHeight); + g.fillRect(counterBackgroundColor, x - 3, counterYOffset, counterBoxRealWidth, counterBoxHeight); - if (!counterColorCache.containsKey(counter)) { - counterColorCache.put(counter, new Color(counter.getRed() / 255.0f, counter.getGreen() / 255.0f, counter.getBlue() / 255.0f, 1.0f)); + if (!counterColorCache.containsKey(counter)) { + counterColorCache.put(counter, new Color(counter.getRed() / 255.0f, counter.getGreen() / 255.0f, counter.getBlue() / 255.0f, 1.0f)); + } + + Color counterColor = counterColorCache.get(counter); + + drawText(g, counter.getCounterOnCardDisplayName(), font, counterColor, x + 2 + additionalXOffset, counterYOffset, counterBoxRealWidth, counterBoxHeight, Align.left); + drawText(g, String.valueOf(numberOfCounters), font, counterColor, x + counterBoxBaseWidth - 4f - additionalXOffset, counterYOffset, counterBoxRealWidth, counterBoxHeight, Align.left); } - - Color counterColor = counterColorCache.get(counter); - - drawText(g, counter.getCounterOnCardDisplayName(), font, counterColor, x + 2 + additionalXOffset, counterYOffset, counterBoxRealWidth, counterBoxHeight, Align.left); - drawText(g, String.valueOf(numberOfCounters), font, counterColor, x + counterBoxBaseWidth - 4f - additionalXOffset, counterYOffset, counterBoxRealWidth, counterBoxHeight, Align.left); - } - } private static final int GL_BLEND = GL20.GL_BLEND; @@ -600,22 +598,22 @@ public class CardRenderer { if (color.a < 1) { //enable blending so alpha colored shapes work properly Gdx.gl.glEnable(GL_BLEND); } + if(font != null && !text.isEmpty()) { + layout.setText(font, text); + TextBounds textBounds = new TextBounds(layout.width, layout.height); - layout.setText(font, text); - TextBounds textBounds = new TextBounds(layout.width, layout.height); + float textHeight = textBounds.height; + if (h > textHeight) { + y += (h - textHeight) / 2; + } - float textHeight = textBounds.height; - if (h > textHeight) { - y += (h - textHeight) / 2; + font.setColor(color); + font.draw(g.getBatch(), text, g.adjustX(x), g.adjustY(y, 0), w, horizontalAlignment, true); + + if (color.a < 1) { + Gdx.gl.glDisable(GL_BLEND); + } } - - font.setColor(color); - font.draw(g.getBatch(), text, g.adjustX(x), g.adjustY(y, 0), w, horizontalAlignment, true); - - if (color.a < 1) { - Gdx.gl.glDisable(GL_BLEND); - } - } private static void drawCounterImage(final CardView card, final Graphics g, final float x, final float y, final float w, final float h) { From 73b71b18ab2c94adaa8539fbf03d8b156e7462d2 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Thu, 12 Sep 2019 20:29:40 +0800 Subject: [PATCH 03/47] Transluscent Overlay for Loader --- forge-gui-mobile/src/forge/screens/LoadingOverlay.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/forge-gui-mobile/src/forge/screens/LoadingOverlay.java b/forge-gui-mobile/src/forge/screens/LoadingOverlay.java index adea66bfaf5..1446a973d7d 100644 --- a/forge-gui-mobile/src/forge/screens/LoadingOverlay.java +++ b/forge-gui-mobile/src/forge/screens/LoadingOverlay.java @@ -1,5 +1,6 @@ package forge.screens; +import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.utils.Align; import forge.FThreads; @@ -91,6 +92,12 @@ public class LoadingOverlay extends FOverlay { float panelHeight = logoSize + fontHeight + 4 * padding; float y = (getHeight() - panelHeight) / 2; + float oldAlpha = g.getfloatAlphaComposite(); + //dark translucent back.. + g.setAlphaComposite(0.6f); + g.fillRect(Color.BLACK, 0, 0, getWidth(), getHeight()); + g.setAlphaComposite(oldAlpha); + //overlay g.fillRect(BACK_COLOR, x, y, panelWidth, panelHeight); g.drawRect(Utils.scale(2), FORE_COLOR, x, y, panelWidth, panelHeight); y += padding; From 8e282b16c5a379a7557c4db07d1b2641450e5755 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Thu, 12 Sep 2019 20:30:42 +0800 Subject: [PATCH 04/47] Update Player Name --- .../src/forge/screens/constructed/LobbyScreen.java | 9 ++++++++- .../java/forge/net/event/UpdateLobbyPlayerEvent.java | 7 +++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/forge-gui-mobile/src/forge/screens/constructed/LobbyScreen.java b/forge-gui-mobile/src/forge/screens/constructed/LobbyScreen.java index 731c9a9eb6b..d9b8c2dc78d 100644 --- a/forge-gui-mobile/src/forge/screens/constructed/LobbyScreen.java +++ b/forge-gui-mobile/src/forge/screens/constructed/LobbyScreen.java @@ -269,7 +269,8 @@ public abstract class LobbyScreen extends LaunchScreen implements ILobbyView { @Override protected void startMatch() { for (int i = 0; i < getNumPlayers(); i++) { - updateDeck(i); + updateDeck(i);//TODO: Investigate why AI names cannot be overriden? + updateName(i, getPlayerName(i)); } //set this so we cant get any multi/rapid tap on start button Forge.setLoadingaMatch(true); @@ -614,6 +615,12 @@ public abstract class LobbyScreen extends LaunchScreen implements ILobbyView { } } + private void updateName(final int playerIndex, final String name) { + if (playerChangeListener != null) { + playerChangeListener.update(playerIndex, UpdateLobbyPlayerEvent.nameUpdate(name)); + } + } + void setReady(final int index, final boolean ready) { if (ready) { updateDeck(index); diff --git a/forge-gui/src/main/java/forge/net/event/UpdateLobbyPlayerEvent.java b/forge-gui/src/main/java/forge/net/event/UpdateLobbyPlayerEvent.java index 59f0eb7baa1..7640472ba6d 100644 --- a/forge-gui/src/main/java/forge/net/event/UpdateLobbyPlayerEvent.java +++ b/forge-gui/src/main/java/forge/net/event/UpdateLobbyPlayerEvent.java @@ -38,6 +38,13 @@ public final class UpdateLobbyPlayerEvent implements NetEvent { public static UpdateLobbyPlayerEvent deckUpdate(final DeckSection section, final CardPool cards) { return new UpdateLobbyPlayerEvent(section, cards); } + public static UpdateLobbyPlayerEvent nameUpdate(final String name) { + return new UpdateLobbyPlayerEvent(name); + } + + private UpdateLobbyPlayerEvent(String name) { + this.name = name; + } private UpdateLobbyPlayerEvent(final Deck deck) { this.deck = deck; From 372d9cce941e3beb93fe69780744ee03cd36fc80 Mon Sep 17 00:00:00 2001 From: CCTV-1 Date: Fri, 13 Sep 2019 19:18:05 +0800 Subject: [PATCH 05/47] update forge-android support simplified chinese characters --- .../src/forge/assets/FSkinFont.java | 206 +++++++++--------- 1 file changed, 101 insertions(+), 105 deletions(-) diff --git a/forge-gui-mobile/src/forge/assets/FSkinFont.java b/forge-gui-mobile/src/forge/assets/FSkinFont.java index 5f42bcd27fb..208010bdeef 100644 --- a/forge-gui-mobile/src/forge/assets/FSkinFont.java +++ b/forge-gui-mobile/src/forge/assets/FSkinFont.java @@ -355,111 +355,107 @@ public class FSkinFont { //generate from zh-CN.properties,and cardnames-zh-CN.txt //forge generate 3000+ characters cache need Take some time(MIN_FONT_SIZE - MAX_FONT_SIZE all size) //maybe using libgdx-hiero generate font cache is better - chars += "·âéöû—“”•−●、。「」『』一丁七万三!(),/:;?~鼹鼻齐齑" - + "上下不与丑专且世丘业丛东丝两严丧个中丰临丸丹为丽举乃久么义" - + "之乌乍乐乔乖乘乙九也乡书乱乳乾了予争事二于云互五井亘亚些亡" - + "交亥亦产享京亮亲亵人亿什仁仅仆仇今介仍从仑仓仕他仗付仙代令" - + "以仪们仰仲件价任份仿伊伍伏伐休众优伙会伟传伤伦伪伯伴伶伺似" - + "伽但位低住佐佑体何余佚佛作你佣佩佳使例侍侏供依侠侣侦侧侬侮" - + "侯侵便促俄俊俐俑俘保信修俯俸個倍倒候借倡倦倨倪债值倾假偏做" - + "停偶偷偿傀傍储催傲像僧僭僵僻儒儡儿兀允元充兆先光克免兔兕党" - + "入全八公六兰共关兴兵其具典兹养兼兽内册再冒冕写军农冠冢冥冬" - + "冰冲决况冶冷冻净准凋凌减凑凛凝几凡凤凭凯凰凶出击凿刀刃分切" - + "刈刍刑划列则刚创初删判利别刮到制刷刹刺刻刽剂剃削剌前剎剑剖" - + "剜剥剧剩剪副割剽劈力劝办功加务劣动助努劫励劲劳势勃勇勉勋勒" - + "勘募勤勾包匍匐匕化北匙匠匪匹区医匿十千升午半华协卑卒卓单卖" - + "南博卜占卡卢卦卫印危即却卵卷卸厂厄厅历厉压厚原厢厥厦厨去参" - + "叉及友双反发叔取受变叙叛叠口古句另叨只叫召叮可台史右叶号司" - + "叹吁吃各合吉吊同名后吏吐向吓吕吗君吞吟否含听吮启吱吸吹吻吼" - + "呆告呕员周味呼命咆和咏咒咕咬咯咳咽哀品哈响哑哗哥哨哩哪哭哮" - + "哲哺唐唤售唯唱啃啄商啜啪啮啸喀喂善喉喊喋喘喙喜喝喧喷嗅嗔嗜" - + "嗡嗣嗫嘉嘎嘘嘲嘴嘶噜噤器噬嚎嚼囊囚四回因团囤园困围固国图圆" - + "圈團土圣在地场圾均坊坍坎坏坐坑块坚坛坝坞坟坠坤坦坪坷垂垃型" - + "垒垛垠垢垣垦埃埋城域培基堂堆堕堡堤堪堰塌塑塔塘塞填境墓墙增" - + "墟墨壁壅壕壤士壬壮声壳壶处备复夏外多夜够大天太夫央失头夷夸" - + "夹夺奇奈奉奋奎契奔奖套奢奥女奴她好如妃妄妆妇妈妖妙妥妪妮妲" - + "妹姆姊始姓姜姥姬姿威娃娅娜婆婉婪婶媒嫁嫩嬉子孑孔孕字存孚孢" - + "季孤学孪孳孵孽宁它宅宇守安完宏宗官宙定宜宝实宠审客宣室宪宫" - + "宰害宴家容宾宿寂寄密寇富寒寓寝察寡寨寰寸对寺寻导封射将尉尊" - + "小少尔尖尘尚尝尤尬就尸尹尺尼尽尾局层居屈屋屏屑展属屠履屯山" - + "屹岁岑岔岖岗岚岛岩岱岳岸峡峭峰峻崇崎崔崖崩崽嵌巅巍川巡巢工" - + "左巧巨巫差己已巳巴巷币市布帅帆师希帕帖帘帜帝带席帮帷常帽幅" - + "幔幕干平年并幸幻幼幽广庄庆庇床序库应底店庙府庞废度座庭庶廉" - + "廊延建开异弃弄弊式弑弓引弗弘弟张弥弦弧弩弯弱張弹强归当录彗" - + "形彩彰影役彻彼往征径待很徊律後徒徕得徘徙從御復循微徵德徽心" - + "必忆忌忍忒志忘忠忧快忱念忽忾忿怀态怒怖思急性怨怪怯总恍恐恒" - + "恕恢恣恨恩恫息恰恳恶恸恼悉悍悔悖悟患悦您悬悯悲悼情惊惑惘惚" - + "惠惧惨惩惫惰想惹愁愈愎意愚感愣愤愧愿慈慌慎慑慕慢慧慨慰慷憎" - + "憩懦戈戏成我戒戕或战戟截戮戳戴户戾房所扁扇扈手才扎扑扒打托" - + "扣执扩扫扬扭扮扯扰找承技抄抉把抑抓投抖抗折抚抛抢护报披抱抵" - + "抹押抽拂拆拉拍拒拓拔拖拘招拜拟拣拥拦拧拨择括拯拱拳拷拼拽拾" - + "拿持挂指按挑挖挚挟挠挡挣挥挪挫振挺挽捆捉捍捕捞损换捣捧据捷" - + "捻掀授掉掌掐排掘掠探接控推掩措掮掳掷揍描提插握揭援揽搁搅搏" - + "搐搜搞搬搭携摄摆摇摘摧摩摸摹撒撕撞撤撬播撵撼擅操擎擒擞擦攀" - + "攫支收改攻放政故效敌敏救敕教敞敢散敦敬数敲整文斐斑斓斗斤斥" - + "斧斩断斯新方施旁旅旋族旗无既日旧旨早旭时旷旸旺昂昆昌明昏易" - + "昔昙星映春昨昭是昵昼显晃晋晓晕晖晚晨普景晰晴晶晷智暂暗暮暴" - + "曙曜曝曦曲曳更曼曾替最月有服朗望朝期木未末本札术朵机朽杀杂" - + "权杉李村杖杜束条来杨杯杰松板极构析林枚果枝枢枪枭枯架枷柄柏" - + "某染柜查柩柯柱柳栅标栈栋栏树栓栖栗株样核根格栽桂框案桌桎桑" - + "桓桠档桥桨桩桶梁梅梓梢梣梦梧梨梭梯械检棄棍棒棕棘棚森棱棺椁" - + "植椎椒椽楂楔楚楣楼概榄榆榔榨榴槌槛模横樱樵橇橡橫檀檐次欢欣" - + "欧欲欺歇歌止正此步武歪死歼殁殆殇殉殊残殍殒殓殖殡殴段殷殿毁" - + "毅母每毒比毕毛毡氅氏民氓气氤氦氧氲水永汀汁求汇汉汐汗汛池污" - + "汤汨汪汰汲汹汽沃沈沉沌沐沙沟没沥沦沮河沸油治沼沾沿泄泉泊法" - + "泛泞泡波泣泥注泪泯泰泽洁洋洒洗洛洞津洪洲活洼派流浅浆浇浊测" - + "济浑浓浚浩浪浮浴海浸涅消涉涌涎涛涟涡涤润涨涩液涵淋淘淤淬深" - + "混淹添清渊渎渐渔渗渝渠渡渣渥温港渲渴游湍湖湛湮湾湿溃溅源溜" - + "溢溪溯溶溺滋滑滓滔滚滞满滤滥滨滴漂漏演漠漩漫潘潜潭潮澄澈澹" - + "激濑濒瀑瀚灌火灭灯灰灵灼灾灿炉炎炙炫炬炭炮炸点炼炽烁烂烈烙" - + "烛烟烤烦烧烫烬热烽焉焊焚焦焰然煌煎煞煤照煮煽熄熊熏熔熟熠熵" - + "燃燎燕燧爆爪爬爱爵父片版牌牒牙牛牝牡牢牦牧物牲牵特牺犀犁犄" - + "犧犬犯状狂狄狈狐狗狙狞狡狩独狭狮狰狱狷狸狼猁猎猛猜猪猫献猴" - + "猿獒獠獾玄率玉王玖玛玩玫环现玷玻珀珂珊珍珠班球理琉琐琥琳琴" - + "琵琼瑕瑙瑚瑞瑟瑰璃璞璧瓜瓣瓦瓮瓯瓶瓷甘生用甩甫田由甲电画畅" - + "界畏留略畸畿疆疏疑疗疚疡疣疤疫疮疯疲疵疹疽疾病症痕痛痞痢痨" - + "痪痴痹瘟瘠瘤瘫瘴癣癫癸登白百的皆皇皈皮皱皿盆盈盐监盒盔盖盗" - + "盘盛盟目盲直相盾省看真眠眨眩眷眺眼着睁睡督睥睨睿瞄瞒瞥瞪瞬" - + "瞭瞰瞳矛矢知矫短矮石矾矿码砂砍研砖砦砧破砸砾础硕硫硬确碍碎" - + "碑碟碧碰碳碻碾磁磊磨磷磺礁示礼社祀祈祖祝神祟祠祥票祭祷祸禁" - + "禄福离禽私秃秉秋种科秘秣秤秩积称移秽稀程税稚稳稻穆穗穴究穷" - + "穹空穿突窃窍窒窖窗窘窜窝窟窥立竖站竞章童竭端竹笏笑笔笛笞符" - + "第笼等筑筒答策筛筝筹签简箔算箝管箭箱篓篮篱篷簇簧簪米类粉粒" - + "粗粮粹精糊糙糟系素索紧紫累繁纂纠红约级纪纬纯纱纳纵纷纸纹纺" - + "纽线练组绅细织终绊绍经绒结绕绘给绚络绝绞统绥继绩绪续绮绯绳" - + "维绵综绽绿缀缄缅缆缇缉缎缓缕编缘缚缝缠缩缪缰缸缺罅网罔罗罚" - + "罡罩罪置羁羊美羚羞群羽翁翅翎翔翠翡翰翱翻翼耀老考者而耍耐耕" - + "耗耘耙耳耶职联聚聪肃肆肇肉肌肖肝肠肢肤肥肩肯育肴肺肿胀胁胃" - + "胆背胎胖胜胞胡胧胫胶胸能脂脆脉脊脏脑脓脚脱脸腐腔腕腥腱腹腾" - + "腿膂膏膛膜膝臂臃臣自臭至致舌舍舒舞舟航般舰舱船艇良艰色艺艾" - + "节芒芙芜芥芬芭芮花芳芽苇苍苏苔苗苛苜苟若苦英茁茂范茉茎茜茧" - + "茨茫茸荆草荒荚荡荣荨荫药荷莉莎莓莫莱莲莳获莽菁菇菊菌菜菲萃" - + "萌萍萎萝营萦萧萨萼落著葛葬葵蒂蒙蒸蓄蓑蓝蓟蓿蔑蔓蔚蔷蔻蔽蕈" - + "蕊蕨蕴蕾薄薇薙薪藏藐藓藤藻虎虏虐虑虔虚虫虱虹蚀蚁蚊蚋蚣蚺蛆" - + "蛇蛊蛋蛎蛙蛛蛞蛭蛮蛰蛸蛾蜂蜈蜉蜒蜕蜗蜘蜜蜡蜥蜴蜷蜿蝇蝎蝓蝗" - + "蝙蝠蝣蝾螂螅融螫螳螺蟀蟋蟑蟒蟹蠕蠢血行衍街衡衣补表衫衰袂袋" - + "袍袖被袭裁裂装裔裘褐褛褪褫褴褶襄西要覆见观规觅视览觉觊角解" - + "触言詹誉誓警计认讧讨让训议讯记讲许论讽设访诀证评诅识诈诉词" - + "试诗诘诚诛话诞诡该详诫语误诱诲说诵请诸诺读调谆谈谊谋谍谐谕" - + "谗谜谟谢谣谦谧谨谬谭谱谴谵谷豁象豪豹豺貂貌贝贞负贡财责贤败" - + "货质贩贪贫贬购贮贯贱贴贵贷贸费贺贼贾贿赂赃资赋赌赎赏赐赖赘" - + "赛赞赠赢赤赦赫走赶起超越趋足跃跑跖跚跛距跟跨路跳践跺踏踝踢" - + "踩踪踵踽蹂蹄蹊蹋蹒蹦蹬躁躏身躯躲車车轨轩转轭轮软轰轴轻载较" - + "辉辑输辖辗辙辛辜辞辟辨辩辫辰辱边达迁迂迅过迈迎运近返还这进" - + "远违连迟迦迩迪迫迭述迳迷迸迹追退送适逃逆选逊透逐递途通逝逞" - + "速造逢逮逸逻逼遁遇遍遏道遗遣遥遨遭遮避邀還那邦邪邬邸郊郎部" - + "都鄙酋配酒酬酷酸酿醉醒采釉释里重野量金鉴针钉钓钗钙钜钝钟钢" - + "钥钦钨钩钮钯钱钳钵钻钽铁铃铅铎铜铠铬铭铲银铸铺链销锁锄锅锈" - + "锋锐错锡锢锤锥锦锭键锯锻镇镖镜镬镰镶长間闇门闩闪闭问闯闲间" - + "闷闸闹闻阀阁阅队阱防阳阴阵阶阻阿陀附际陆陋降限院除陨险陪陲" - + "陵陶陷隆随隐隔隘障隧隶隼难雀雄雅集雇雏雕雨雪雯雳零雷雹雾需" - + "霆震霉霍霓霖霜霞霰露霸霹青靖静非靠靡面革靴靶鞍鞑鞭韧音韵韶" - + "页顶项顺须顽顾顿颂预颅领颈颊题颚颜额颠颤风飒飓飘飙飞食餍餐" - + "餮饕饥饭饮饰饱饵饶饿馆馈馐馑首香馨马驭驮驯驰驱驳驹驻驼驽驾" - + "驿骁骂骄骆骇验骏骐骑骗骚骤骨骰骷骸骼髅髓高鬃鬓鬣鬼魁魂魄魅" - + "魇魈魏魔鰴鱼鲁鲜鲤鲨鲮鲸鲽鳃鳄鳍鳐鳗鳝鳞鸟鸠鸡鸢鸣鸦鸽鹅鹉" - + "鹊鹏鹗鹞鹤鹦鹫鹭鹰鹿麋麒麟麦麻黄黎黏黑默黛黜點黠黯鼎鼓鼠鼬" - + "齿龇龙龟"; + chars += "●、。「」『』一丁七万三上下不与丑专且世丘业丛东丝两严丧个中" + + "丰临丸丹为主丽举乃久么义之乌乍乐乔乖乘乙九也乡书乱乳乾了予争" + + "事二于云互五井亘亚些亡交亥亦产享京亮亲亵人亿什仁仅仆仇今介仍" + + "从仑仓仕他仗付仙代令以仪们仰仲件价任份仿伊伍伏伐休众优伙会伟" + + "传伤伦伪伯伴伶伺似伽但位低住佐佑体何余佚佛作你佣佩佳使例侍侏" + + "供依侠侣侦侧侬侮侯侵便促俄俊俐俑俘保信修俯俸個倍倒候借倡倦倨" + + "倪债值倾假偏做停偶偷偿傀傍储催傲像僧僭僵僻儒儡儿兀允元充兆先" + + "光克免兔兕党入全八公六兰共关兴兵其具典兹养兼兽内册再冒冕写军" + + "农冠冢冥冬冰冲决况冶冷冻净准凋凌减凑凛凝几凡凤凭凯凰凶出击凿" + + "刀刃分切刈刍刑划列则刚创初删判利别刮到制刷刹刺刻刽剂剃削剌前" + + "剎剑剖剜剥剧剩剪副割剽劈力劝办功加务劣动助努劫励劲劳势勃勇勉" + + "勋勒勘募勤勾包匍匐匕化北匙匠匪匹区医匿十千升午半华协卑卒卓单" + + "卖南博卜占卡卢卦卫印危即却卵卷卸厂厄厅历厉压厚原厢厥厦厨去参" + + "叉及友双反发叔取受变叙叛叠口古句另叨只叫召叮可台史右叶号司叹" + + "吁吃各合吉吊同名后吏吐向吓吕吗君吞吟否含听吮启吱吸吹吻吼呆告" + + "呕员周味呼命咆和咏咒咕咬咯咳咽哀品哈响哑哗哥哨哩哪哭哮哲哺唐" + + "唤售唯唱啃啄商啜啪啮啸喀喂善喉喊喋喘喙喜喝喧喷嗅嗔嗜嗡嗣嗫嘉" + + "嘎嘘嘲嘴嘶噜噤器噬嚎嚼囊囚四回因团囤园困围固国图圆圈團土圣在" + + "地场圾均坊坍坎坏坐坑块坚坛坝坞坟坠坤坦坪坷垂垃型垒垛垠垢垣垦" + + "埃埋城域培基堂堆堕堡堤堪堰塌塑塔塘塞填境墓墙增墟墨壁壅壕壤士" + + "壬壮声壳壶处备复夏外多夜够大天太夫央失头夷夸夹夺奇奈奉奋奎契" + + "奔奖套奢奥女奴她好如妃妄妆妇妈妖妙妥妪妮妲妹姆姊始姓姜姥姬姿" + + "威娃娅娜婆婉婪婶媒嫁嫩嬉子孑孔孕字存孚孢季孤学孪孳孵孽宁它宅" + + "宇守安完宏宗官宙定宜宝实宠审客宣室宪宫宰害宴家容宾宿寂寄密寇" + + "富寒寓寝察寡寨寰寸对寺寻导封射将尉尊小少尔尖尘尚尝尤尬就尸尹" + + "尺尼尽尾局层居屈屋屏屑展属屠履屯山屹岁岑岔岖岗岚岛岩岱岳岸峡" + + "峭峰峻崇崎崔崖崩崽嵌巅巍川巡巢工左巧巨巫差己已巳巴巷币市布帅" + + "帆师希帕帖帘帜帝带席帮帷常帽幅幔幕干平年并幸幻幼幽广庄庆庇床" + + "序库应底店庙府庞废度座庭庶廉廊延建开异弃弄弊式弑弓引弗弘弟张" + + "弥弦弧弩弯弱張弹强归当录彗形彩彰影役彻彼往征径待很徊律後徒徕" + + "得徘徙從御復循微徵德徽心必忆忌忍忒志忘忠忧快忱念忽忾忿怀态怒" + + "怖思急性怨怪怯总恍恐恒恕恢恣恨恩恫息恰恳恶恸恼悉悍悔悖悟患悦" + + "您悬悯悲悼情惊惑惘惚惠惧惨惩惫惰想惹愁愈愎意愚感愣愤愧愿慈慌" + + "慎慑慕慢慧慨慰慷憎憩懦戈戏成我戒戕或战戟截戮戳戴户戾房所扁扇" + + "扈手才扎扑扒打托扣执扩扫扬扭扮扯扰找承技抄抉把抑抓投抖抗折抚" + + "抛抢护报披抱抵抹押抽拂拆拉拍拒拓拔拖拘招拜拟拣拥拦拧拨择括拯" + + "拱拳拷拼拽拾拿持挂指按挑挖挚挟挠挡挣挥挪挫振挺挽捆捉捍捕捞损" + + "换捣捧据捷捻掀授掉掌掐排掘掠探接控推掩措掮掳掷揍描提插握揭援" + + "揽搁搅搏搐搜搞搬搭携摄摆摇摘摧摩摸摹撒撕撞撤撬播撵撼擅操擎擒" + + "擞擦攀攫支收改攻放政故效敌敏救敕教敞敢散敦敬数敲整文斐斑斓斗" + + "斤斥斧斩断斯新方施旁旅旋族旗无既日旧旨早旭时旷旸旺昂昆昌明昏" + + "易昔昙星映春昨昭是昵昼显晃晋晓晕晖晚晨普景晰晴晶晷智暂暗暮暴" + + "曙曜曝曦曲曳更曼曾替最月有服朗望朝期木未末本札术朵机朽杀杂权" + + "杉李村杖杜束条来杨杯杰松板极构析林枚果枝枢枪枭枯架枷柄柏某染" + + "柜查柩柯柱柳栅标栈栋栏树栓栖栗株样核根格栽桂框案桌桎桑桓桠档" + + "桥桨桩桶梁梅梓梢梣梦梧梨梭梯械检棄棍棒棕棘棚森棱棺椁植椎椒椽" + + "楂楔楚楣楼概榄榆榔榨榴槌槛模横樱樵橇橡橫檀檐次欢欣欧欲欺歇歌" + + "止正此步武歪死歼殁殆殇殉殊残殍殒殓殖殡殴段殷殿毁毅母每毒比毕" + + "毛毡氅氏民氓气氤氦氧氲水永汀汁求汇汉汐汗汛池污汤汨汪汰汲汹汽" + + "沃沈沉沌沐沙沟没沥沦沮河沸油治沼沾沿泄泉泊法泛泞泡波泣泥注泪" + + "泯泰泽洁洋洒洗洛洞津洪洲活洼派流浅浆浇浊测济浑浓浚浩浪浮浴海" + + "浸涅消涉涌涎涛涟涡涤润涨涩液涵淋淘淤淬深混淹添清渊渎渐渔渗渝" + + "渠渡渣渥温港渲渴游湍湖湛湮湾湿溃溅源溜溢溪溯溶溺滋滑滓滔滚滞" + + "满滤滥滨滴漂漏演漠漩漫潘潜潭潮澄澈澹激濑濒瀑瀚灌火灭灯灰灵灼" + + "灾灿炉炎炙炫炬炭炮炸点炼炽烁烂烈烙烛烟烤烦烧烫烬热烽焉焊焚焦" + + "焰然煌煎煞煤照煮煽熄熊熏熔熟熠熵燃燎燕燧爆爪爬爱爵父片版牌牒" + + "牙牛牝牡牢牦牧物牲牵特牺犀犁犄犧犬犯状狂狄狈狐狗狙狞狡狩独狭" + + "狮狰狱狷狸狼猁猎猛猜猪猫献猴猿獒獠獾玄率玉王玖玛玩玫环现玷玻" + + "珀珂珊珍珠班球理琉琐琥琳琴琵琼瑕瑙瑚瑞瑟瑰璃璞璧瓜瓣瓦瓮瓯瓶" + + "瓷甘生用甩甫田由甲电画畅界畏留略畸畿疆疏疑疗疚疡疣疤疫疮疯疲" + + "疵疹疽疾病症痕痛痞痢痨痪痴痹瘟瘠瘤瘫瘴癣癫癸登白百的皆皇皈皮" + + "皱皿盆盈盐监盒盔盖盗盘盛盟目盲直相盾省看真眠眨眩眷眺眼着睁睡" + + "督睥睨睿瞄瞒瞥瞪瞬瞭瞰瞳矛矢知矫短矮石矾矿码砂砍研砖砦砧破砸" + + "砾础硕硫硬确碍碎碑碟碧碰碳碻碾磁磊磨磷磺礁示礼社祀祈祖祝神祟" + + "祠祥票祭祷祸禁禄福离禽私秃秉秋种科秘秣秤秩积称移秽稀程税稚稳" + + "稻穆穗穴究穷穹空穿突窃窍窒窖窗窘窜窝窟窥立竖站竞章童竭端竹笏" + + "笑笔笛笞符第笼等筑筒答策筛筝筹签简箔算箝管箭箱篓篮篱篷簇簧簪" + + "米类粉粒粗粮粹精糊糙糟系素索紧紫累繁纂纠红约级纪纬纯纱纳纵纷" + + "纸纹纺纽线练组绅细织终绊绍经绒结绕绘给绚络绝绞统绥继绩绪续绮" + + "绯绳维绵综绽绿缀缄缅缆缇缉缎缓缕编缘缚缝缠缩缪缰缸缺罅网罔罗" + + "罚罡罩罪置羁羊美羚羞群羽翁翅翎翔翠翡翰翱翻翼耀老考者而耍耐耕" + + "耗耘耙耳耶职联聚聪肃肆肇肉肌肖肝肠肢肤肥肩肯育肴肺肿胀胁胃胆" + + "背胎胖胜胞胡胧胫胶胸能脂脆脉脊脏脑脓脚脱脸腐腔腕腥腱腹腾腿膂" + + "膏膛膜膝臂臃臣自臭至致舌舍舒舞舟航般舰舱船艇良艰色艺艾节芒芙" + + "芜芥芬芭芮花芳芽苇苍苏苔苗苛苜苟若苦英茁茂范茉茎茜茧茨茫茸荆" + + "草荒荚荡荣荨荫药荷莉莎莓莫莱莲莳获莽菁菇菊菌菜菲萃萌萍萎萝营" + + "萦萧萨萼落著葛葬葵蒂蒙蒸蓄蓑蓝蓟蓿蔑蔓蔚蔷蔻蔽蕈蕊蕨蕴蕾薄薇" + + "薙薪藏藐藓藤藻虎虏虐虑虔虚虫虱虹蚀蚁蚊蚋蚣蚺蛆蛇蛊蛋蛎蛙蛛蛞" + + "蛭蛮蛰蛸蛾蜂蜈蜉蜒蜕蜗蜘蜜蜡蜥蜴蜷蜿蝇蝎蝓蝗蝙蝠蝣蝾螂螅融螫" + + "螳螺蟀蟋蟑蟒蟹蠕蠢血行衍街衡衣补表衫衰袂袋袍袖被袭裁裂装裔裘" + + "褐褛褪褫褴褶襄西要覆见观规觅视览觉觊角解触言詹誉誓警计认讧讨" + + "让训议讯记讲许论讽设访诀证评诅识诈诉词试诗诘诚诛话诞诡该详诫" + + "语误诱诲说诵请诸诺读调谆谈谊谋谍谐谕谗谜谟谢谣谦谧谨谬谭谱谴" + + "谵谷豁象豪豹豺貂貌贝贞负贡财责贤败货质贩贪贫贬购贮贯贱贴贵贷" + + "贸费贺贼贾贿赂赃资赋赌赎赏赐赖赘赛赞赠赢赤赦赫走赶起超越趋足" + + "跃跑跖跚跛距跟跨路跳践跺踏踝踢踩踪踵踽蹂蹄蹊蹋蹒蹦蹬躁躏身躯" + + "躲車车轨轩转轭轮软轰轴轻载较辉辑输辖辗辙辛辜辞辟辨辩辫辰辱边" + + "达迁迂迅过迈迎运近返还这进远违连迟迦迩迪迫迭述迳迷迸迹追退送" + + "适逃逆选逊透逐递途通逝逞速造逢逮逸逻逼遁遇遍遏道遗遣遥遨遭遮" + + "避邀還那邦邪邬邸郊郎部都鄙酋配酒酬酷酸酿醉醒采釉释里重野量金" + + "鉴针钉钓钗钙钜钝钟钢钥钦钨钩钮钯钱钳钵钻钽铁铃铅铎铜铠铬铭铲" + + "银铸铺链销锁锄锅锈锋锐错锡锢锤锥锦锭键锯锻镇镖镜镬镰镶长間闇" + + "门闩闪闭问闯闲间闷闸闹闻阀阁阅队阱防阳阴阵阶阻阿陀附际陆陋降" + + "限院除陨险陪陲陵陶陷隆随隐隔隘障隧隶隼难雀雄雅集雇雏雕雨雪雯" + + "雳零雷雹雾需霆震霉霍霓霖霜霞霰露霸霹青靖静非靠靡面革靴靶鞍鞑" + + "鞭韧音韵韶页顶项顺须顽顾顿颂预颅领颈颊题颚颜额颠颤风飒飓飘飙" + + "飞食餍餐餮饕饥饭饮饰饱饵饶饿馆馈馐馑首香馨马驭驮驯驰驱驳驹驻" + + "驼驽驾驿骁骂骄骆骇验骏骐骑骗骚骤骨骰骷骸骼髅髓高鬃鬓鬣鬼魁魂" + + "魄魅魇魈魏魔鰴鱼鲁鲜鲤鲨鲮鲸鲽鳃鳄鳍鳐鳗鳝鳞鸟鸠鸡鸢鸣鸦鸽鹅" + + "鹉鹊鹏鹗鹞鹤鹦鹫鹭鹰鹿麋麒麟麦麻黄黎黏黑默黛黜點黠黯鼎鼓鼠鼬" + + "鼹鼻齐齑齿龇龙龟!(),/:;?~"; final PixmapPacker packer = new PixmapPacker(pageSize, pageSize, Pixmap.Format.RGBA8888, 2, false); final FreeTypeFontParameter parameter = new FreeTypeFontParameter(); From ccfbe4d956a4d82157e0de6e60124f9229b9cbad Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Sat, 14 Sep 2019 15:05:01 +0800 Subject: [PATCH 06/47] countHuman instead of noAIPlayer --- .../src/forge/screens/match/MatchScreen.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/forge-gui-mobile/src/forge/screens/match/MatchScreen.java b/forge-gui-mobile/src/forge/screens/match/MatchScreen.java index 850dec2c125..9a49fbe6873 100644 --- a/forge-gui-mobile/src/forge/screens/match/MatchScreen.java +++ b/forge-gui-mobile/src/forge/screens/match/MatchScreen.java @@ -576,7 +576,7 @@ public class MatchScreen extends FScreen { //Draw Priority Human Multiplayer 2 player float oldAlphaComposite = g.getfloatAlphaComposite(); - if ((getPlayerPanels().keySet().size() == 2) && noAIPlayer()){ + if ((getPlayerPanels().keySet().size() == 2) && (countHuman() == 2)){ for (VPlayerPanel playerPanel: playerPanelsList){ midField = playerPanel.getTop(); y = midField - 0.5f; @@ -694,13 +694,13 @@ public class MatchScreen extends FScreen { } return false; } - private boolean noAIPlayer(){ - boolean noAi = true; + private int countHuman(){ + int humanplayers = 0; for (VPlayerPanel playerPanel: playerPanelsList) { - if(playerPanel.getPlayer().isAI()) - noAi = false; + if(!playerPanel.getPlayer().isAI()) + humanplayers++; } - return noAi; + return humanplayers; } } } From 44ae0c50395b543035c8ce92c462bb1e7b168b23 Mon Sep 17 00:00:00 2001 From: swordshine Date: Sat, 14 Sep 2019 22:52:40 +0800 Subject: [PATCH 07/47] Add forgescribed cards --- forge-gui/res/cardsfolder/b/bloom_tender.txt | 15 +++++---------- .../res/cardsfolder/upcoming/beloved_princess.txt | 7 +++++++ .../res/cardsfolder/upcoming/bog_naughty.txt | 8 ++++++++ .../cardsfolder/upcoming/cauldron_familiar.txt | 13 +++++++++++++ .../cardsfolder/upcoming/deafening_silence.txt | 7 +++++++ .../res/cardsfolder/upcoming/elite_headhunter.txt | 7 +++++++ .../res/cardsfolder/upcoming/epic_downfall.txt | 5 +++++ .../res/cardsfolder/upcoming/faeburrow_elder.txt | 13 +++++++++++++ .../cardsfolder/upcoming/fell_the_pheasant.txt | 6 ++++++ .../res/cardsfolder/upcoming/fervent_champion.txt | 11 +++++++++++ .../cardsfolder/upcoming/fierce_witchstalker.txt | 8 ++++++++ .../cardsfolder/upcoming/gadwick_the_wizened.txt | 10 ++++++++++ .../res/cardsfolder/upcoming/gingerbrute.txt | 9 +++++++++ .../res/cardsfolder/upcoming/glass_casket.txt | 12 ++++++++++++ .../cardsfolder/upcoming/harmonious_archon.txt | 10 ++++++++++ .../cardsfolder/upcoming/inquisitive_puppet.txt | 9 +++++++++ 16 files changed, 140 insertions(+), 10 deletions(-) create mode 100644 forge-gui/res/cardsfolder/upcoming/beloved_princess.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/bog_naughty.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/cauldron_familiar.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/deafening_silence.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/elite_headhunter.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/epic_downfall.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/faeburrow_elder.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/fell_the_pheasant.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/fervent_champion.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/fierce_witchstalker.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/gadwick_the_wizened.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/gingerbrute.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/glass_casket.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/harmonious_archon.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/inquisitive_puppet.txt diff --git a/forge-gui/res/cardsfolder/b/bloom_tender.txt b/forge-gui/res/cardsfolder/b/bloom_tender.txt index d86c56a4391..e717ae667e6 100644 --- a/forge-gui/res/cardsfolder/b/bloom_tender.txt +++ b/forge-gui/res/cardsfolder/b/bloom_tender.txt @@ -2,16 +2,11 @@ Name:Bloom Tender ManaCost:1 G Types:Creature Elf Druid PT:1/1 -A:AB$ Mana | Cost$ T | Produced$ W | ConditionCheckSVar$ CheckW | References$ CheckW | ConditionSVarCompare$ GE1 | SubAbility$ DBManaU | SpellDescription$ For each color among permanents you control, add one mana of that color. -SVar:DBManaU:DB$ Mana | Produced$ U | ConditionCheckSVar$ CheckU | References$ CheckU | ConditionSVarCompare$ GE1 | SubAbility$ DBManaB -SVar:DBManaB:DB$ Mana | Produced$ B | ConditionCheckSVar$ CheckB | References$ CheckB | ConditionSVarCompare$ GE1 | SubAbility$ DBManaR -SVar:DBManaR:DB$ Mana | Produced$ R | ConditionCheckSVar$ CheckR | References$ CheckR | ConditionSVarCompare$ GE1 | SubAbility$ DBManaG -SVar:DBManaG:DB$ Mana | Produced$ G | ConditionCheckSVar$ CheckG | References$ CheckG | ConditionSVarCompare$ GE1 -SVar:CheckW:Count$Valid Permanent.YouCtrl+White -SVar:CheckU:Count$Valid Permanent.YouCtrl+Blue -SVar:CheckB:Count$Valid Permanent.YouCtrl+Black -SVar:CheckR:Count$Valid Permanent.YouCtrl+Red -SVar:CheckG:Count$Valid Permanent.YouCtrl+Green +A:AB$ Mana | Cost$ T | Produced$ W | ConditionPresent$ Permanent.YouCtrl+White | SubAbility$ DBManaU | SpellDescription$ For each color among permanents you control, add one mana of that color. +SVar:DBManaU:DB$ Mana | Produced$ U | ConditionPresent$ Permanent.YouCtrl+Blue | SubAbility$ DBManaB +SVar:DBManaB:DB$ Mana | Produced$ B | ConditionPresent$ Permanent.YouCtrl+Black | SubAbility$ DBManaR +SVar:DBManaR:DB$ Mana | Produced$ R | ConditionPresent$ Permanent.YouCtrl+Red | SubAbility$ DBManaG +SVar:DBManaG:DB$ Mana | Produced$ G | ConditionPresent$ Permanent.YouCtrl+Green AI:RemoveDeck:All SVar:Picture:http://www.wizards.com/global/images/magic/general/bloom_tender.jpg Oracle:{T}: For each color among permanents you control, add one mana of that color. diff --git a/forge-gui/res/cardsfolder/upcoming/beloved_princess.txt b/forge-gui/res/cardsfolder/upcoming/beloved_princess.txt new file mode 100644 index 00000000000..517805fe2da --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/beloved_princess.txt @@ -0,0 +1,7 @@ +Name:Beloved Princess +ManaCost:W +Types:Creature Human Noble +PT:1/1 +K:Lifelink +K:CantBeBlockedBy Creature.powerGE3 +Oracle:Lifelink\nBeloved Princess can't be blocked by creatures with power 3 or greater. diff --git a/forge-gui/res/cardsfolder/upcoming/bog_naughty.txt b/forge-gui/res/cardsfolder/upcoming/bog_naughty.txt new file mode 100644 index 00000000000..61093abd209 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/bog_naughty.txt @@ -0,0 +1,8 @@ +Name:Bog Naughty +ManaCost:3 B B +Types:Creature Faerie +PT:3/3 +K:Flying +A:AB$ Pump | Cost$ 2 B Sac<1/Food> | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ -3 | NumDef$ -3 | IsCurse$ True | SpellDescription$ Target creature gets -3/-3 until end of turn. +AI:RemoveDeck:All +Oracle:Flying\n{2}{B}, Sacrifice a Food: Target creature gets -3/-3 until end of turn. diff --git a/forge-gui/res/cardsfolder/upcoming/cauldron_familiar.txt b/forge-gui/res/cardsfolder/upcoming/cauldron_familiar.txt new file mode 100644 index 00000000000..1c13166466a --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/cauldron_familiar.txt @@ -0,0 +1,13 @@ +Name:Cauldron Familiar +ManaCost:B +Types:Creature Cat +PT:1/1 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDrain | TriggerDescription$ When CARDNAME enters the battlefield, each opponent loses 1 life and you gain 1 life. +SVar:TrigDrain:DB$ LoseLife | Defined$ Player.Opponent | LifeAmount$ 1 | SubAbility$ DBGainLife +SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 1 +DeckHas:Ability$LifeGain +A:AB$ ChangeZone | Cost$ Sac<1/Food> | Origin$ Graveyard | Destination$ Battlefield | ActivationZone$ Graveyard | SpellDescription$ Return CARDNAME from your graveyard to the battlefield. +SVar:DiscardMe:2 +SVar:SacMe:1 +AI:RemoveDeck:All +Oracle:When Cauldron Familiar enters the battlefield, each opponent loses 1 life and you gain 1 life.\nSacrifice a Food: Return Cauldron Familiar from your graveyard to the battlefield. diff --git a/forge-gui/res/cardsfolder/upcoming/deafening_silence.txt b/forge-gui/res/cardsfolder/upcoming/deafening_silence.txt new file mode 100644 index 00000000000..a7b74c9986f --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/deafening_silence.txt @@ -0,0 +1,7 @@ +Name:Deafening Silence +ManaCost:W +Types:Enchantment +S:Mode$ CantBeCast | ValidCard$ Card.nonCreature | Caster$ Player | NumLimitEachTurn$ 1 | Description$ Each player can't cast more than one noncreature spell each turn. +SVar:NonStackingEffect:True +AI:RemoveDeck:Random +Oracle:Each player can't cast more than one noncreature spell each turn. diff --git a/forge-gui/res/cardsfolder/upcoming/elite_headhunter.txt b/forge-gui/res/cardsfolder/upcoming/elite_headhunter.txt new file mode 100644 index 00000000000..cee3335afdc --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/elite_headhunter.txt @@ -0,0 +1,7 @@ +Name:Elite Headhunter +ManaCost:B/R B/R B/R B/R +Types:Creature Human Knight +PT:2/3 +K:Menace +A:AB$ DealDamage | Cost$ BR BR BR Sac<1/Creature.Other,Artifact/another creature or an artifact> | ValidTgts$ Creature,Planeswalker | TgtPrompt$ Select target creature or planeswalker | NumDmg$ 2 | SpellDescription$ CARDNAME deals 2 damage to target creature or planeswalker. +Oracle:Menace (This creature can't be blocked except by two or more creatures.)\n{B/R}{B/R}{B/R}, Sacrifice another creature or an artifact: Elite Headhunter deals 2 damage to target creature or planeswalker. diff --git a/forge-gui/res/cardsfolder/upcoming/epic_downfall.txt b/forge-gui/res/cardsfolder/upcoming/epic_downfall.txt new file mode 100644 index 00000000000..3f8a7f3cdee --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/epic_downfall.txt @@ -0,0 +1,5 @@ +Name:Epic Downfall +ManaCost:1 B +Types:Sorcery +A:SP$ ChangeZone | Cost$ 1 B | ValidTgts$ Creature.cmcGE3 | TgtPrompt$ Choose target creature with converted mana cost 3 or greater | Origin$ Battlefield | Destination$ Exile | SpellDescription$ Exile target creature with converted mana cost 3 or greater. +Oracle:Exile target creature with converted mana cost 3 or greater. diff --git a/forge-gui/res/cardsfolder/upcoming/faeburrow_elder.txt b/forge-gui/res/cardsfolder/upcoming/faeburrow_elder.txt new file mode 100644 index 00000000000..f510b652df7 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/faeburrow_elder.txt @@ -0,0 +1,13 @@ +Name:Faeburrow Elder +ManaCost:1 G W +Types:Creature Treefolk Druid +PT:0/0 +K:Vigilance +S:Mode$ Continuous | Affected$ Card.Self | AddPower$ X | AddToughness$ X | Description$ CARDNAME gets +1/+1 for each color among permanents you control. +SVar:X:Count$ColorsCtrl Permanent.YouCtrl+inZoneBattlefield +A:AB$ Mana | Cost$ T | Produced$ W | ConditionPresent$ Permanent.YouCtrl+White | SubAbility$ DBManaU | SpellDescription$ For each color among permanents you control, add one mana of that color. +SVar:DBManaU:DB$ Mana | Produced$ U | ConditionPresent$ Permanent.YouCtrl+Blue | SubAbility$ DBManaB +SVar:DBManaB:DB$ Mana | Produced$ B | ConditionPresent$ Permanent.YouCtrl+Black | SubAbility$ DBManaR +SVar:DBManaR:DB$ Mana | Produced$ R | ConditionPresent$ Permanent.YouCtrl+Red | SubAbility$ DBManaG +SVar:DBManaG:DB$ Mana | Produced$ G | ConditionPresent$ Permanent.YouCtrl+Green +Oracle:Vigilance\nFaeburrow Elder gets +1/+1 for each color among permanents you control.\n{T}: For each color among permanents you control, add one mana of that color. diff --git a/forge-gui/res/cardsfolder/upcoming/fell_the_pheasant.txt b/forge-gui/res/cardsfolder/upcoming/fell_the_pheasant.txt new file mode 100644 index 00000000000..e1c9e508958 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/fell_the_pheasant.txt @@ -0,0 +1,6 @@ +Name:Fell the Pheasant +ManaCost:1 G +Types:Instant +A:SP$ DealDamage | Cost$ 1 G | ValidTgts$ Creature.withFlying | TgtPrompt$ Select target creature with flying | NumDmg$ 5 | SubAbility$ DBToken | SpellDescription$ CARDNAME deals 5 damage to target creature with flying. Create a card token. (It's an artifact with "{2}, {T}, Sacrifice this artifact: You gain 3 life.") +SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_food_sac | TokenOwner$ You | LegacyImage$ c a food sac eld +Oracle:Fell the Pheasant deals 5 damage to target creature with flying. Create a Food token. (It's an artifact with "{2}, {T}, Sacrifice this artifact: You gain 3 life.") diff --git a/forge-gui/res/cardsfolder/upcoming/fervent_champion.txt b/forge-gui/res/cardsfolder/upcoming/fervent_champion.txt new file mode 100644 index 00000000000..641b64e0b5d --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/fervent_champion.txt @@ -0,0 +1,11 @@ +Name:Fervent Champion +ManaCost:R +Types:Creature Human Knight +PT:1/1 +K:First Strike +K:Haste +T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ Whenever CARDNAME attacks, another target creature you control gets +1/+0 until end of turn. +SVar:TrigPump:DB$Pump | ValidTgts$ Knight.YouCtrl+Other | TgtPrompt$ Select another target attacking Knight you control | NumAtt$ +1 +SVar:HasAttackEffect:TRUE +S:Mode$ ReduceCost | ValidTarget$ Card.Self | ValidSpell$ Activated.Equip | Activator$ You | Amount$ 3 | Description$ Equip abilities you activate that target CARDNAME cost {3} less to activate. +Oracle:First strike, haste\nWhenever Fervent Champion attacks, another target attacking Knight you control gets +1/+0 until end of turn.\nEquip abilities you activate that target Fervent Champion cost {3} less to activate. diff --git a/forge-gui/res/cardsfolder/upcoming/fierce_witchstalker.txt b/forge-gui/res/cardsfolder/upcoming/fierce_witchstalker.txt new file mode 100644 index 00000000000..3b8d789b4d6 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/fierce_witchstalker.txt @@ -0,0 +1,8 @@ +Name:Fierce Witchstalker +ManaCost:2 G G +Types:Creature Wolf +PT:4/4 +K:Trample +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a turn. (It's an artifact with "{2}, {T}, Sacrifice this artifact: You gain 3 life.") +SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_food_sac | TokenOwner$ You | LegacyImage$ c a food sac eld +Oracle:Trample\nWhen Fierce Witchstalker enters the battlefield, create a Food token. (It's an artifact with "{2}, {T}, Sacrifice this artifact: You gain 3 life.") diff --git a/forge-gui/res/cardsfolder/upcoming/gadwick_the_wizened.txt b/forge-gui/res/cardsfolder/upcoming/gadwick_the_wizened.txt new file mode 100644 index 00000000000..0dcfc8ab91a --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/gadwick_the_wizened.txt @@ -0,0 +1,10 @@ +Name:Gadwick, the Wizened +ManaCost:X U U U +Types:Legendary Creature Human Wizard +PT:3/3 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ When CARDNAME enters the battlefield, draw X cards. +SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ X | References$ X +SVar:X:Count$xPaid +T:Mode$ SpellCast | ValidCard$ Card.Blue | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigTap | TriggerDescription$ Whenever you cast a blue spell, tap target nonland permanent an opponent controls. +SVar:TrigTap:DB$ Tap | ValidTgts$ Permanent.OppCtrl+nonLand | TgtPrompt$ Select target nonland permanent an opponent controls +Oracle:When Gadwick, the Wizened enters the battlefield, draw X cards.\nWhenever you cast a blue spell, tap target nonland permanent an opponent controls. diff --git a/forge-gui/res/cardsfolder/upcoming/gingerbrute.txt b/forge-gui/res/cardsfolder/upcoming/gingerbrute.txt new file mode 100644 index 00000000000..2ae11388ef4 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/gingerbrute.txt @@ -0,0 +1,9 @@ +Name:Gingerbrute +ManaCost:1 +Types:Artifact Creature Food Golem +PT:1/1 +K:Haste +A:AB$ Effect | Cost$ 1 | Name$ CARDNAME Effect | StaticAbilities$ KWPump | SpellDescription$ CARDNAME can't be blocked this turn except by creatures with haste. +SVar:KWPump:Mode$ CantBlockBy | ValidAttacker$ Creature.EffectSource | ValidBlocker$ Creature.withoutHaste | EffectZone$ Command | Description$ EFFECTSOURCE can't be blocked this turn except by creatures with haste. +A:AB$ GainLife | Cost$ 2 T Sac<1/CARDNAME> | LifeAmount$ 3 | SpellDescription$ You gain 3 life. +Oracle:Haste\n{1}: Gingerbrute can't be blocked this turn except by creatures with haste.\n{2}, {T}, Sacrifice Gingerbrute: You gain 3 life. diff --git a/forge-gui/res/cardsfolder/upcoming/glass_casket.txt b/forge-gui/res/cardsfolder/upcoming/glass_casket.txt new file mode 100644 index 00000000000..213cb76c27c --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/glass_casket.txt @@ -0,0 +1,12 @@ +Name:Glass Casket +ManaCost:1 W +Types:Artifact +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigExile | TriggerDescription$ When CARDNAME enters the battlefield, exile target creature an opponent controls with converted mana cost 3 or less until CARDNAME leaves the battlefield. +SVar:TrigExile:DB$ ChangeZone | Origin$ Battlefield | Destination$ Exile | ValidTgts$ Creature.OppCtrl+cmcLE3 | TgtPrompt$ Select target creature an opponent controls with converted mana cost 3 or less | ConditionPresent$ Card.Self | SubAbility$ DBEffect +SVar:DBEffect:DB$ Effect | Triggers$ ComeBack | RememberObjects$ Targeted | ImprintCards$ Self | SVars$ TrigReturn,ExileSelf | ConditionPresent$ Card.Self | Duration$ Permanent | ForgetOnMoved$ Exile +SVar:ComeBack:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.IsImprinted | Execute$ TrigReturn | TriggerZones$ Command | TriggerController$ TriggeredCardController | Static$ True | TriggerDescription$ That creature is exiled until EFFECTSOURCE leaves the battlefield +SVar:TrigReturn:DB$ ChangeZoneAll | Origin$ Exile | Destination$ Battlefield | ChangeType$ Card.IsRemembered | SubAbility$ ExileSelf +SVar:ExileSelf:DB$ ChangeZone | Origin$ Command | Destination$ Exile | Defined$ Self +SVar:PlayMain1:TRUE +SVar:NeedsToPlay:Creature.OppCtrl+cmcLE3 +Oracle:When Glass Casket enters the battlefield, exile target creature an opponent controls with converted mana cost 3 or less until Glass Casket leaves the battlefield. diff --git a/forge-gui/res/cardsfolder/upcoming/harmonious_archon.txt b/forge-gui/res/cardsfolder/upcoming/harmonious_archon.txt new file mode 100644 index 00000000000..5e9236154e4 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/harmonious_archon.txt @@ -0,0 +1,10 @@ +Name:Harmonious Archon +ManaCost:4 W W +Types:Creature Archon +PT:4/5 +K:Flying +S:Mode$ Continuous | Affected$ Creature.nonArchon | SetPower$ 3 | SetToughness$ 3 | Description$ Non-Archon creatures have base power and toughness 3/3. +AI:RemoveDeck:Random +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create two 1/1 white Human creature tokens. +SVar:TrigToken:DB$Token | TokenAmount$ 2 | TokenScript$ w_1_1_human | TokenOwner$ You | LegacyImage$ w 1 1 human eld +Oracle:Flying\nNon-Archon creatures have base power and toughness 3/3.\nWhen Harmonious Archon enters the battlefield, create two 1/1 white Human creature tokens. diff --git a/forge-gui/res/cardsfolder/upcoming/inquisitive_puppet.txt b/forge-gui/res/cardsfolder/upcoming/inquisitive_puppet.txt new file mode 100644 index 00000000000..ac4b52b6a72 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/inquisitive_puppet.txt @@ -0,0 +1,9 @@ +Name:Inquisitive Puppet +ManaCost:1 +Types:Artifact Creature Construct +PT:0/2 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigScry | TriggerDescription$ When CARDNAME enters the battlefield, scry 1. +SVar:TrigScry:DB$ Scry | ScryNum$ 1 +A:AB$ Token | Cost$ Exile<1/CARDNAME> | TokenAmount$ 1 | TokenScript$ w_1_1_human | TokenOwner$ You | LegacyImage$ w 1 1 human eld | SpellDescription$ Create a 1/1 white Human creature token. +DeckHints:Type$Human +Oracle:When Inquisitive Puppet enters the battlefield, scry 1.\nExile Inquisitive Puppet: Create a 1/1 white Human creature token. From efac184ffbdf878f83bd434547b4398bf9908ab2 Mon Sep 17 00:00:00 2001 From: swordshine Date: Sat, 14 Sep 2019 23:29:40 +0800 Subject: [PATCH 08/47] add more forgescribed cards --- .../src/main/java/forge/game/card/CounterType.java | 2 ++ .../res/cardsfolder/upcoming/into_the_story.txt | 7 +++++++ .../res/cardsfolder/upcoming/knight_of_the_keep.txt | 5 +++++ forge-gui/res/cardsfolder/upcoming/lost_legion.txt | 7 +++++++ .../res/cardsfolder/upcoming/maraleaf_rider.txt | 7 +++++++ forge-gui/res/cardsfolder/upcoming/mirrormade.txt | 6 ++++++ .../res/cardsfolder/upcoming/oathsworn_knight.txt | 9 +++++++++ forge-gui/res/cardsfolder/upcoming/ogre_errant.txt | 8 ++++++++ forge-gui/res/cardsfolder/upcoming/raging_redcap.txt | 6 ++++++ .../res/cardsfolder/upcoming/spinning_wheel.txt | 6 ++++++ .../res/cardsfolder/upcoming/stolen_by_the_fae.txt | 8 ++++++++ .../res/cardsfolder/upcoming/the_magic_mirror.txt | 12 ++++++++++++ .../res/cardsfolder/upcoming/thunderous_snapper.txt | 7 +++++++ .../res/cardsfolder/upcoming/trail_of_crumbs.txt | 8 ++++++++ .../cardsfolder/upcoming/trapped_in_the_tower.txt | 7 +++++++ .../res/cardsfolder/upcoming/true_loves_kiss.txt | 6 ++++++ forge-gui/res/cardsfolder/upcoming/wolfs_quarry.txt | 6 ++++++ forge-gui/res/tokenscripts/g_1_1_boar_food.txt | 8 ++++++++ 18 files changed, 125 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/into_the_story.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/knight_of_the_keep.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/lost_legion.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/maraleaf_rider.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/mirrormade.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/oathsworn_knight.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/ogre_errant.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/raging_redcap.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/spinning_wheel.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/stolen_by_the_fae.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/the_magic_mirror.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/thunderous_snapper.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/trail_of_crumbs.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/trapped_in_the_tower.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/true_loves_kiss.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/wolfs_quarry.txt create mode 100644 forge-gui/res/tokenscripts/g_1_1_boar_food.txt diff --git a/forge-game/src/main/java/forge/game/card/CounterType.java b/forge-game/src/main/java/forge/game/card/CounterType.java index 947eafaef07..ff040ed52f6 100644 --- a/forge-game/src/main/java/forge/game/card/CounterType.java +++ b/forge-game/src/main/java/forge/game/card/CounterType.java @@ -147,6 +147,8 @@ public enum CounterType { KI("KI", 190, 189, 255), + KNOWLEDGE("KNOWLEDGE", 0, 115, 255), + LANDMARK("LNMRK", 186, 28, 28), LEVEL("LEVEL", 60, 222, 185), diff --git a/forge-gui/res/cardsfolder/upcoming/into_the_story.txt b/forge-gui/res/cardsfolder/upcoming/into_the_story.txt new file mode 100644 index 00000000000..b40a7657d28 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/into_the_story.txt @@ -0,0 +1,7 @@ +Name:Into the Story +ManaCost:5 U U +Types:Instant +S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ 3 | EffectZone$ All | CheckSVar$ X | SVarCompare$ GE7 | Description$ CARDNAME costs {3} less to cast if an opponent has seven or more cards in their graveyard. +SVar:X:PlayerCountOpponents$HighestCardsInGraveyard +A:SP$ Draw | Cost$ 5 U U | NumCards$ 4 | SpellDescription$ Draw four cards. +Oracle:This spell costs {3} less to cast if an opponent has seven or more cards in their graveyard.\nDraw four cards. diff --git a/forge-gui/res/cardsfolder/upcoming/knight_of_the_keep.txt b/forge-gui/res/cardsfolder/upcoming/knight_of_the_keep.txt new file mode 100644 index 00000000000..1be07da81ff --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/knight_of_the_keep.txt @@ -0,0 +1,5 @@ +Name:Knight of the Keep +ManaCost:2 W +Types:Creature Human Knight +PT:3/2 +Oracle: diff --git a/forge-gui/res/cardsfolder/upcoming/lost_legion.txt b/forge-gui/res/cardsfolder/upcoming/lost_legion.txt new file mode 100644 index 00000000000..20def35ba8f --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/lost_legion.txt @@ -0,0 +1,7 @@ +Name:Lost Legion +ManaCost:1 B B +Types:Creature Spirit Knight +PT:2/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:DB$ Scry | ScryNum$ 2 +Oracle:When Lost Legion enters the battlefield, 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.) diff --git a/forge-gui/res/cardsfolder/upcoming/maraleaf_rider.txt b/forge-gui/res/cardsfolder/upcoming/maraleaf_rider.txt new file mode 100644 index 00000000000..454e09e3a2a --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/maraleaf_rider.txt @@ -0,0 +1,7 @@ +Name:Maraleaf Rider +ManaCost:1 G +Types:Creature Elf Knight +PT:3/1 +A:AB$ MustBlock | Cost$ Sac<1/Food> | ValidTgts$ Creature | TgtPrompt$ Select target creature | SpellDescription$ Target creature blocks CARDNAME this turn if able. +AI:RemoveDeck:All +Oracle:Sacrifice a Food: Target creature blocks Maraleaf Rider this turn if able. diff --git a/forge-gui/res/cardsfolder/upcoming/mirrormade.txt b/forge-gui/res/cardsfolder/upcoming/mirrormade.txt new file mode 100644 index 00000000000..ae1d94a8c3f --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/mirrormade.txt @@ -0,0 +1,6 @@ +Name:Mirrormade +ManaCost:1 U U +Types:Enchantment +K:ETBReplacement:Copy:DBCopy:Optional +SVar:DBCopy:DB$ Clone | Choices$ Artifact.Other,Enchantment.Other | SpellDescription$ You may have CARDNAME enter the battlefield as a copy of any artifact or enchantment on the battlefield. +Oracle:You may have Mirrormade enter the battlefield as a copy of any artifact or enchantment on the battlefield. diff --git a/forge-gui/res/cardsfolder/upcoming/oathsworn_knight.txt b/forge-gui/res/cardsfolder/upcoming/oathsworn_knight.txt new file mode 100644 index 00000000000..f70df8e358b --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/oathsworn_knight.txt @@ -0,0 +1,9 @@ +Name:Oathsworn Knight +ManaCost:1 B B +Types:Creature Human Knight +PT:0/0 +K:etbCounter:P1P1:4 +K:CARDNAME attacks each combat if able. +R:Event$ DamageDone | ActiveZones$ Battlefield | ValidTarget$ Card.Self+counters_GE1_P1P1 | ReplaceWith$ DBRemoveCounters | PreventionEffect$ True | Description$ If damage would be dealt to CARDNAME while it has a +1/+1 counter on it, prevent that damage and remove a +1/+1 counter from it. +SVar:DBRemoveCounters:DB$ RemoveCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 +Oracle:Oathsworn Knight enters the battlefield with four +1/+1 counters on it.\nOathsworn Knight attacks each combat if able.\nIf damage would be dealt to Oathsworn Knight while it has a +1/+1 counter on it, prevent that damage and remove a +1/+1 counter from it. diff --git a/forge-gui/res/cardsfolder/upcoming/ogre_errant.txt b/forge-gui/res/cardsfolder/upcoming/ogre_errant.txt new file mode 100644 index 00000000000..c6996056010 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/ogre_errant.txt @@ -0,0 +1,8 @@ +Name:Ogre Errant +ManaCost:3 R +Types:Creature Ogre Knight +PT:3/4 +T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ Whenever CARDNAME attacks, another target attacking Knight gains menace gains menace until end of turn. +SVar:TrigPump:DB$ Pump | ValidTgts$ Knight.Other+attacking | TgtPrompt$ Select another target attacking creature | KW$ Menace +DeckHints:Type$Knight +Oracle:Whenever Ogre Errant attacks, another target attacking Knight gains menace until end of turn. (It can't be blocked except by two or more creatures.) diff --git a/forge-gui/res/cardsfolder/upcoming/raging_redcap.txt b/forge-gui/res/cardsfolder/upcoming/raging_redcap.txt new file mode 100644 index 00000000000..747d0fd7825 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/raging_redcap.txt @@ -0,0 +1,6 @@ +Name:Raging Redcap +ManaCost:2 R +Types:Creature Goblin Knight +PT:1/2 +K:Double Strike +Oracle:Double strike diff --git a/forge-gui/res/cardsfolder/upcoming/spinning_wheel.txt b/forge-gui/res/cardsfolder/upcoming/spinning_wheel.txt new file mode 100644 index 00000000000..3fd38b44f6d --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/spinning_wheel.txt @@ -0,0 +1,6 @@ +Name:Spinning Wheel +ManaCost:3 +Types:Artifact +A:AB$ Mana | Cost$ T | Produced$ Any | SpellDescription$ Add one mana of any color. +A:AB$ Tap | Cost$ 5 T | ValidTgts$ Creature | TgtPrompt$ Select target creature | SpellDescription$ Tap target creature. +Oracle:{T}: Add one mana of any color.\n{5}, {T}: Tap target creature. diff --git a/forge-gui/res/cardsfolder/upcoming/stolen_by_the_fae.txt b/forge-gui/res/cardsfolder/upcoming/stolen_by_the_fae.txt new file mode 100644 index 00000000000..16a77ad69e1 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/stolen_by_the_fae.txt @@ -0,0 +1,8 @@ +Name:Stolen by the Fae +ManaCost:X U U +Types:Sorcery +A:SP$ ChangeZone | Cost$ X U U | Origin$ Battlefield | Destination$ Hand | ValidTgts$ Creature | ChangeNum$ 1 | References$ X | SubAbility$ DBToken | SpellDescription$ Return target creature with converted mana cost X to its owner's hand. You create X 1/1 blue Faerie creature tokens with flying. +SVar:TrigToken:DB$Token | TokenAmount$ X | References$ X | TokenScript$ u_1_1_faerie_flying | TokenOwner$ You | LegacyImage$ u 1 1 faerie flying eld +SVar:X:Targeted$CardManaCost +AI:RemoveDeck:All +Oracle:Return target creature with converted mana cost X to its owner's hand. You create X 1/1 blue Faerie creature tokens with flying. diff --git a/forge-gui/res/cardsfolder/upcoming/the_magic_mirror.txt b/forge-gui/res/cardsfolder/upcoming/the_magic_mirror.txt new file mode 100644 index 00000000000..eee0b0bdd12 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/the_magic_mirror.txt @@ -0,0 +1,12 @@ +Name:The Magic Mirror +ManaCost:6 U U U +Types:Legendary Artifact +S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ X | References$ X | EffectZone$ All | Description$ CARDNAME costs {1} less to cast for each instant and sorcery card in your graveyard. +SVar:X:Count$ValidGraveyard Instant.YouOwn,Sorcery.YouOwn +DeckHints:Ability$Graveyard +S:Mode$ Continuous | Affected$ You | SetMaxHandSize$ Unlimited | Description$ You have no maximum hand size. +T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ At the beginning of your upkeep, put a knowledge counter on CARDNAME, then draw a card for each knowledge counter on CARDNAME. +SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ KNOWLEDGE | CounterNum$ 1 | SubAbility$ DBDraw +SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ Y | References$ Y +SVar:Y:Count$CardCounters.KNOWLEDGE +Oracle:This spell costs {1} less to cast for each instant and sorcery card in your graveyard.\nYou have no maximum hand size.\nAt the beginning of your upkeep, put a knowledge counter on The Magic Mirror, then draw a card for each knowledge counter on The Magic Mirror. diff --git a/forge-gui/res/cardsfolder/upcoming/thunderous_snapper.txt b/forge-gui/res/cardsfolder/upcoming/thunderous_snapper.txt new file mode 100644 index 00000000000..ee4c37e7c40 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/thunderous_snapper.txt @@ -0,0 +1,7 @@ +Name:Thunderous Snapper +ManaCost:G/U G/U G/U G/U +Types:Creature Turtle Hydra +PT:4/4 +T:Mode$ SpellCast | ValidCard$ Card.cmcGE5 | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigDraw | TriggerDescription$ Whenever you cast a spell with converted mana cost 5 or greater, draw a card. +SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ 1 +Oracle:Whenever you cast a spell with converted mana cost 5 or greater, draw a card. diff --git a/forge-gui/res/cardsfolder/upcoming/trail_of_crumbs.txt b/forge-gui/res/cardsfolder/upcoming/trail_of_crumbs.txt new file mode 100644 index 00000000000..db923432e7f --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/trail_of_crumbs.txt @@ -0,0 +1,8 @@ +Name:Trail of Crumbs +ManaCost:1 G +Types:Enchantment +T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a Food token. +SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_food_sac | TokenOwner$ You | LegacyImage$ c a food sac eld +T:Mode$ Sacrificed | ValidPlayer$ You | ValidCard$ Food.YouCtrl | Origin$ Any | Destination$ Battlefield | Execute$ TrigDig | TriggerZones$ Battlefield | TriggerDescription$ Whenever you sacrifice a Food, you may pay {1}. If you do, look at the top two cards of your library. You may reveal a permanent card from among them and put it into your hand. Put the rest on the bottom of your library in any order. +SVar:TrigDig:AB$ Dig | Cost$ 1 | DigNum$ 2 | ChangeNum$ 1 | Optional$ True | ChangeValid$ Permanent | ForceRevealToController$ True +Oracle:When Trail of Crumbs enters the battlefield, create a Food token.\nWhenever you sacrifice a Food, you may pay {1}. If you do, look at the top two cards of your library. You may reveal a permanent card from among them and put it into your hand. Put the rest on the bottom of your library in any order. diff --git a/forge-gui/res/cardsfolder/upcoming/trapped_in_the_tower.txt b/forge-gui/res/cardsfolder/upcoming/trapped_in_the_tower.txt new file mode 100644 index 00000000000..308203d25d0 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/trapped_in_the_tower.txt @@ -0,0 +1,7 @@ +Name:Trapped in the Tower +ManaCost:1 W +Types:Enchantment Aura +K:Enchant creature without flying +A:SP$ Attach | Cost$ 1 W | ValidTgts$ Creature.withoutFlying | AILogic$ Curse +S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddHiddenKeyword$ CARDNAME can't attack or block. & CARDNAME's activated abilities can't be activated. | Description$ Enchanted creature can't attack or block and its activated abilities can't be activated. +Oracle:Enchant creature without flying\nEnchanted creature can't attack or block, and its activated abilities can't be activated. diff --git a/forge-gui/res/cardsfolder/upcoming/true_loves_kiss.txt b/forge-gui/res/cardsfolder/upcoming/true_loves_kiss.txt new file mode 100644 index 00000000000..af571059ef7 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/true_loves_kiss.txt @@ -0,0 +1,6 @@ +Name:True Love's Kiss +ManaCost:2 W W +Types:Instant +A:SP$ ChangeZone | Cost$ 2 W W | ValidTgts$ Artifact,Enchantment | TgtPrompt$ Select target artifact or enchantment | Origin$ Battlefield | Destination$ Exile | SubAbility$ DBDraw | SpellDescription$ Exile target artifact or enchantment. Draw a card. +SVar:DBDraw:DB$ Draw | NumCards$ 1 +Oracle:Exile target artifact or enchantment.\nDraw a card. diff --git a/forge-gui/res/cardsfolder/upcoming/wolfs_quarry.txt b/forge-gui/res/cardsfolder/upcoming/wolfs_quarry.txt new file mode 100644 index 00000000000..d8052affc0b --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/wolfs_quarry.txt @@ -0,0 +1,6 @@ +Name:Wolf's Quarry +ManaCost:4 G G +Types:Sorcery +A:SP$ Token | Cost$ 4 G G | TokenAmount$ 3 | TokenScript$ g_1_1_boar_food | TokenOwner$ You | LegacyImage$ g 1 1 boar food eld | SpellDescription$ Create three 1/1 green Boar creature tokens with "When this creature dies, create a Food token." (A Food token is an artifact with "{2}, {T}, Sacrifice this artifact: You gain 3 life.") +DeckHas:Ability$Token +Oracle:Create three 1/1 green Boar creature tokens with "When this creature dies, create a Food token." (A Food token is an artifact with "{2}, {T}, Sacrifice this artifact: You gain 3 life.") diff --git a/forge-gui/res/tokenscripts/g_1_1_boar_food.txt b/forge-gui/res/tokenscripts/g_1_1_boar_food.txt new file mode 100644 index 00000000000..d04e54bb41d --- /dev/null +++ b/forge-gui/res/tokenscripts/g_1_1_boar_food.txt @@ -0,0 +1,8 @@ +Name:Boar +ManaCost:no cost +Types:Creature Boar +Colors:green +PT:1/1 +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigToken | TriggerController$ TriggeredCardController | TriggerDescription$ When this creature dies, create a Food token. +SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_food_sac | TokenOwner$ You | LegacyImage$ c a food sac eld +Oracle:When this creature dies, create a Food token. From ad428e2285a46bfc9b8631d9b487ad3c8937bfca Mon Sep 17 00:00:00 2001 From: swordshine Date: Sun, 15 Sep 2019 10:07:46 +0800 Subject: [PATCH 09/47] Fix a subability SVar --- forge-gui/res/cardsfolder/upcoming/fierce_witchstalker.txt | 2 +- forge-gui/res/cardsfolder/upcoming/stolen_by_the_fae.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/forge-gui/res/cardsfolder/upcoming/fierce_witchstalker.txt b/forge-gui/res/cardsfolder/upcoming/fierce_witchstalker.txt index 3b8d789b4d6..73a5b1be5a4 100644 --- a/forge-gui/res/cardsfolder/upcoming/fierce_witchstalker.txt +++ b/forge-gui/res/cardsfolder/upcoming/fierce_witchstalker.txt @@ -3,6 +3,6 @@ ManaCost:2 G G Types:Creature Wolf PT:4/4 K:Trample -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a turn. (It's an artifact with "{2}, {T}, Sacrifice this artifact: You gain 3 life.") +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a Food token. (It's an artifact with "{2}, {T}, Sacrifice this artifact: You gain 3 life.") SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_food_sac | TokenOwner$ You | LegacyImage$ c a food sac eld Oracle:Trample\nWhen Fierce Witchstalker enters the battlefield, create a Food token. (It's an artifact with "{2}, {T}, Sacrifice this artifact: You gain 3 life.") diff --git a/forge-gui/res/cardsfolder/upcoming/stolen_by_the_fae.txt b/forge-gui/res/cardsfolder/upcoming/stolen_by_the_fae.txt index 16a77ad69e1..6348f8665cd 100644 --- a/forge-gui/res/cardsfolder/upcoming/stolen_by_the_fae.txt +++ b/forge-gui/res/cardsfolder/upcoming/stolen_by_the_fae.txt @@ -2,7 +2,7 @@ Name:Stolen by the Fae ManaCost:X U U Types:Sorcery A:SP$ ChangeZone | Cost$ X U U | Origin$ Battlefield | Destination$ Hand | ValidTgts$ Creature | ChangeNum$ 1 | References$ X | SubAbility$ DBToken | SpellDescription$ Return target creature with converted mana cost X to its owner's hand. You create X 1/1 blue Faerie creature tokens with flying. -SVar:TrigToken:DB$Token | TokenAmount$ X | References$ X | TokenScript$ u_1_1_faerie_flying | TokenOwner$ You | LegacyImage$ u 1 1 faerie flying eld +SVar:DBToken:DB$ Token | TokenAmount$ X | References$ X | TokenScript$ u_1_1_faerie_flying | TokenOwner$ You | LegacyImage$ u 1 1 faerie flying eld SVar:X:Targeted$CardManaCost AI:RemoveDeck:All Oracle:Return target creature with converted mana cost X to its owner's hand. You create X 1/1 blue Faerie creature tokens with flying. From 0637c69bfe901babf30a015d11386699407b602b Mon Sep 17 00:00:00 2001 From: swordshine Date: Sun, 15 Sep 2019 10:59:42 +0800 Subject: [PATCH 10/47] Add Irencrag Feat --- forge-gui/res/cardsfolder/upcoming/irencrag_feat.txt | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/irencrag_feat.txt diff --git a/forge-gui/res/cardsfolder/upcoming/irencrag_feat.txt b/forge-gui/res/cardsfolder/upcoming/irencrag_feat.txt new file mode 100644 index 00000000000..039ce222f8e --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/irencrag_feat.txt @@ -0,0 +1,11 @@ +Name:Irencrag Feat +ManaCost:1 R R R +Types:Sorcery +A:SP$ Mana | Cost$ 1 R R R | Produced$ R | Amount$ 7 | SubAbility$ DBEffect | SpellDescription$ Add seven {R}. You can cast only one more spell this turn. +SVar:DBEffect:DB$ Effect | Name$ CARDNAME Effect | StaticAbilities$ STCantBeCast | SVars$ NumCount,TrigRem | Triggers$ StaticRem +SVar:STCantBeCast:Mode$ CantBeCast | Caster$ You | EffectZone$ Command | CheckSVar$ NumCount | SVarCompare$ GE1 | References$ NumCount | Description$ You can cast only one more spell this turn. +SVar:NumCount:Remembered$Amount +SVar:StaticRem:Mode$ SpellCast | ValidActivatingPlayer$ You | Static$ True | Secondary$ True | Execute$ TrigRem +SVar:TrigRem:DB$ Pump | RememberObjects$ TriggeredCard +AI:RemoveDeck:All +Oracle:Add seven {R}. You can cast only one more spell this turn. From 9446af4808b776f0bdcab0846487efd8571fff36 Mon Sep 17 00:00:00 2001 From: swordshine Date: Sun, 15 Sep 2019 13:19:55 +0800 Subject: [PATCH 11/47] Add two cards --- .../res/cardsfolder/upcoming/opportunistic_dragon.txt | 9 +++++++++ forge-gui/res/cardsfolder/upcoming/wishclaw_talisman.txt | 9 +++++++++ 2 files changed, 18 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/opportunistic_dragon.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/wishclaw_talisman.txt diff --git a/forge-gui/res/cardsfolder/upcoming/opportunistic_dragon.txt b/forge-gui/res/cardsfolder/upcoming/opportunistic_dragon.txt new file mode 100644 index 00000000000..31f4b0caccd --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/opportunistic_dragon.txt @@ -0,0 +1,9 @@ +Name:Opportunistic Dragon +ManaCost:2 R R +Types:Creature Dragon +PT:4/3 +K:Flying +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigGainControl | TriggerDescription$ When CARDNAME enters the battlefield, choose target Human or artifact an opponent controls. For as long as CARDNAME remains on the battlefield, gain control of that permanent, it loses all abilities, and it can't attack or block. +SVar:TrigGainControl:DB$ GainControl | ValidTgts$ Human.OppCtrl,Artifact.OppCtrl | TgtPrompt$ Select target Human or artifact an opponent controls | LoseControl$ LeavesPlay | SubAbility$ DBPump +SVar:DBPump:DB$ Animate | Defined$ Targeted | HiddenKeywords$ CARDNAME can't attack or block. | RemoveAllAbilities$ True | UntilHostLeavesPlay$ True +Oracle:Flying\nWhen Opportunistic Dragon enters the battlefield, choose target Human or artifact an opponent controls. For as long as Opportunistic Dragon remains on the battlefield, gain control of that permanent, it loses all abilities, and it can't attack or block. diff --git a/forge-gui/res/cardsfolder/upcoming/wishclaw_talisman.txt b/forge-gui/res/cardsfolder/upcoming/wishclaw_talisman.txt new file mode 100644 index 00000000000..8b8319c45ff --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/wishclaw_talisman.txt @@ -0,0 +1,9 @@ +Name:Wishclaw Talisman +ManaCost:1 B +Types:Artifact +K:etbCounter:WISH:3 +A:AB$ ChangeZone | Cost$ 1 T SubCounter<1/WISH> | Origin$ Library | Destination$ Hand | ChangeType$ Card | ChangeNum$ 1 | SubAbility$ DBChoose | PlayerTurn$ True | SpellDescription$ Search your library for a card and put that card into your hand, then shuffle your library. An opponent gains control of CARDNAME. Activate this ability only during your turn. +SVar:DBChoose:DB$ ChoosePlayer | Choices$ Player.Opponent | SubAbility$ DBGainControl +SVar:DBGainControl:DB$ GainControl | Defined$ Self | NewController$ ChosenPlayer | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearChosenPlayer$ True +Oracle:Wishclaw Talisman enters the battlefield with three wish counters on it.\n{1}, {T}, Remove a wish counter from Wishclaw Talisman: Search your library for a card, put it into your hand, then shuffle your library. An opponent gains control of Wishclaw Talisman. Activate this ability only during your turn. From c079467b9adaffc1b3a440d711682bc94c6bb74e Mon Sep 17 00:00:00 2001 From: swordshine Date: Sun, 15 Sep 2019 13:36:43 +0800 Subject: [PATCH 12/47] Add two cards --- .../cardsfolder/upcoming/emry_lurker_of_the_loch.txt | 12 ++++++++++++ .../res/cardsfolder/upcoming/insatiable_appetite.txt | 9 +++++++++ 2 files changed, 21 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/emry_lurker_of_the_loch.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/insatiable_appetite.txt diff --git a/forge-gui/res/cardsfolder/upcoming/emry_lurker_of_the_loch.txt b/forge-gui/res/cardsfolder/upcoming/emry_lurker_of_the_loch.txt new file mode 100644 index 00000000000..ea83b59b17c --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/emry_lurker_of_the_loch.txt @@ -0,0 +1,12 @@ +Name:Emry, Lurker of the Loch +ManaCost:2 U +Types:Legendary Creature Merfolk Wizard +PT:1/2 +S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ X | References$ X | EffectZone$ All | Description$ This spell costs {1} less to cast for each artifact you control. +SVar:X:Count$Valid Artifact.YouCtrl +DeckNeeds:Type$Artifact +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigMill | TriggerDescription$ When CARDNAME enters the battlefield, put the top four cards of your library into your graveyard. +SVar:TrigMill:DB$ Mill | NumCards$ 4 | Defined$ You +A:AB$ Effect | Cost$ T | TgtZone$ Graveyard | ValidTgts$ Artifact.YouOwn | TgtPrompt$ Select target artifact card in your graveyard | SpellDescription$ Choose target artifact card in your graveyard. You may cast that card this turn. | RememberObjects$ Targeted | StaticAbilities$ STPlay | ExileOnMoved$ Graveyard +SVar:STPlay:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered+nonLand | AffectedZone$ Graveyard | Description$ You may cast that card this turn. +Oracle:This spell costs {1} less to cast for each artifact you control.\nWhen Emry, Lurker of the Loch enters the battlefield, put the top four cards of your library into your graveyard.\n{T}: Choose target artifact card in your graveyard. You may cast that card this turn. diff --git a/forge-gui/res/cardsfolder/upcoming/insatiable_appetite.txt b/forge-gui/res/cardsfolder/upcoming/insatiable_appetite.txt new file mode 100644 index 00000000000..4657f1f06a5 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/insatiable_appetite.txt @@ -0,0 +1,9 @@ +Name:Insatiable Appetite +ManaCost:1 G +Types:Instant +A:SP$ Sacrifice | Cost$ 1 G | SacValid$ Food | Optional$ True | RememberSacrificed$ True | SubAbility$ DBPump | SpellDescription$ You may sacrifice a Food. If you do, target creature gets +5/+5 until end of turn. Otherwise, that creature gets +3/+3 until end of turn. +SVar:DBPump:DB$ Pump | ValidTgts$ Creature | TgtPrompt$ Select target Creature | NumAtt$ +X | NumDef$ +X | References$ X,Y | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:X:Count$Compare Y GE1.5.3 +SVar:Y:Remembered$Amount +Oracle:You may sacrifice a Food. If you do, target creature gets +5/+5 until end of turn. Otherwise, that creature gets +3/+3 until end of turn. From 86f344450d23d325c42ecd0f793a80cd8028ed20 Mon Sep 17 00:00:00 2001 From: swordshine Date: Sun, 15 Sep 2019 19:04:18 +0800 Subject: [PATCH 13/47] Fix Midnight Clock --- forge-gui/res/cardsfolder/upcoming/midnight_clock.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/upcoming/midnight_clock.txt b/forge-gui/res/cardsfolder/upcoming/midnight_clock.txt index a92cf6c1230..73795f49801 100644 --- a/forge-gui/res/cardsfolder/upcoming/midnight_clock.txt +++ b/forge-gui/res/cardsfolder/upcoming/midnight_clock.txt @@ -7,7 +7,7 @@ AI:RemoveDeck:Random T:Mode$ Phase | Phase$ Upkeep | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ At the beginning of each upkeep, put an hour counter on CARDNAME. SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ HOUR | CounterNum$ 1 T:Mode$ CounterAdded | ValidCard$ Card.Self | TriggerZones$ Battlefield | CounterType$ HOUR | CounterAmount$ EQ12 | Execute$ TrigChangeAll | TriggerDescription$ When the twelfth hour counter is put on CARDNAME, shuffle your hand and graveyard into your library, then draw seven cards. Exile CARDNAME. -SVar:TrigChangeAll:DB$ ChangeZoneAll | Origin$ Graveyard,Hand | Destination$ Library | ChangeType$ Card.YouOwn | SubAbility$ DBDraw +SVar:TrigChangeAll:DB$ ChangeZoneAll | Origin$ Graveyard,Hand | Destination$ Library | ChangeType$ Card.YouOwn | Shuffle$ True | SubAbility$ DBDraw SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ 7 | SubAbility$ DBExile SVar:DBChange:DB$ ChangeZone | Origin$ Stack | Destination$ Exile Oracle:{T}: Add {U}.\n{2}{U}: Put an hour counter on Midnight Clock.\nAt the beginning of each upkeep, put an hour counter on Midnight Clock.\nWhen the twelfth hour counter is put on Midnight Clock, shuffle your hand and graveyard into your library, then draw seven cards. Exile Midnight Clock. From 83c6473a7c1f8c8f4063eb4fc51587dabbdce0a9 Mon Sep 17 00:00:00 2001 From: swordshine Date: Sun, 15 Sep 2019 19:23:55 +0800 Subject: [PATCH 14/47] Add Vantress Gargoyle --- .../main/java/forge/game/player/PlayerProperty.java | 9 +++++++++ .../res/cardsfolder/upcoming/vantress_gargoyle.txt | 11 +++++++++++ 2 files changed, 20 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/vantress_gargoyle.txt diff --git a/forge-game/src/main/java/forge/game/player/PlayerProperty.java b/forge-game/src/main/java/forge/game/player/PlayerProperty.java index 88038cad515..5970a266813 100644 --- a/forge-game/src/main/java/forge/game/player/PlayerProperty.java +++ b/forge-game/src/main/java/forge/game/player/PlayerProperty.java @@ -225,6 +225,15 @@ public class PlayerProperty { if (!Expressions.compare(list.size(), comparator, y)) { return false; } + } else if (property.startsWith("HasCardsIn")) { // HasCardsIn[zonetype]_[cardtype]_[comparator] + final String[] type = property.substring(10).split("_"); + final CardCollectionView list = CardLists.getValidCards(player.getCardsIn(ZoneType.smartValueOf(type[0])), type[1], sourceController, source); + String comparator = type[2]; + String compareTo = comparator.substring(2); + int y = StringUtils.isNumeric(compareTo) ? Integer.parseInt(compareTo) : 0; + if (!Expressions.compare(list.size(), comparator, y)) { + return false; + } } else if (property.startsWith("withMore")) { final String cardType = property.split("sThan")[0].substring(8); final Player controller = "Active".equals(property.split("sThan")[1]) ? game.getPhaseHandler().getPlayerTurn() : sourceController; diff --git a/forge-gui/res/cardsfolder/upcoming/vantress_gargoyle.txt b/forge-gui/res/cardsfolder/upcoming/vantress_gargoyle.txt new file mode 100644 index 00000000000..c702ababf39 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/vantress_gargoyle.txt @@ -0,0 +1,11 @@ +Name:Vantress Gargoyle +ManaCost:1 U +Types:Artifact Creature Gargoyle +PT:5/4 +K:Flying +S:Mode$ CantAttack | ValidCard$ Card.Self | UnlessDefender$ HasCardsInGraveyard_Card_GE7 | Description$ CARDNAME can't attack unless defending player has seven or more cards in their graveyard. +S:Mode$ Continuous | Affected$ Card.Self | AddHiddenKeyword$ CARDNAME can't block. | CheckSVar$ X | SVarCompare$ LT4 | Description$ CARDNAME can't block unless you have four or more cards in hand. +SVar:X:Count$InYourHand +A:AB$ Mill | Cost$ T | NumCards$ 1 | Defined$ Player | SpellDescription$ Each player puts the top card of their library into their graveyard. +AI:RemoveDeck:Random +Oracle:Flying\nVantress Gargoyle can't attack unless defending player has seven or more cards in their graveyard.\nVantress Gargoyle can't block unless you have four or more cards in hand.\n{T}: Each player puts the top card of their library into their graveyard. From bfaf054e88e972e17f873a59241e434923012bbf Mon Sep 17 00:00:00 2001 From: swordshine Date: Sun, 15 Sep 2019 20:10:27 +0800 Subject: [PATCH 15/47] Add Wildborn Preserver --- .../game/ability/effects/ImmediateTriggerEffect.java | 5 +++++ forge-gui/res/cardsfolder/s/scattering_stroke.txt | 2 +- .../res/cardsfolder/upcoming/wildborn_preserver.txt | 12 ++++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 forge-gui/res/cardsfolder/upcoming/wildborn_preserver.txt diff --git a/forge-game/src/main/java/forge/game/ability/effects/ImmediateTriggerEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ImmediateTriggerEffect.java index 8fe2f8b4813..7b0e66c1c42 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ImmediateTriggerEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ImmediateTriggerEffect.java @@ -65,6 +65,11 @@ public class ImmediateTriggerEffect extends SpellAbilityEffect { } } + if (sa.hasParam("RememberDefinedNumber")) { + immediateTrig.addRemembered((Integer) AbilityUtils.calculateAmount(sa.getHostCard(), + sa.getParam("RememberDefinedNumber"), sa)); + } + if (mapParams.containsKey("Execute") || sa.hasAdditionalAbility("Execute")) { SpellAbility overridingSA = sa.getAdditionalAbility("Execute"); overridingSA.setActivatingPlayer(sa.getActivatingPlayer()); diff --git a/forge-gui/res/cardsfolder/s/scattering_stroke.txt b/forge-gui/res/cardsfolder/s/scattering_stroke.txt index 7202902e5d5..dd9466ff27c 100644 --- a/forge-gui/res/cardsfolder/s/scattering_stroke.txt +++ b/forge-gui/res/cardsfolder/s/scattering_stroke.txt @@ -8,4 +8,4 @@ SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:AddMana:DB$ Mana | Produced$ C | Amount$ X | References$ X SVar:X:Count$TriggerRememberAmount SVar:Picture:http://www.wizards.com/global/images/magic/general/scattering_stroke.jpg -Oracle:Counter target spell. Clash with an opponent. If you win, at the beginning of your next main phase, you may add an amount of {C} equal to that spell's converted mana cost.. (Each clashing player reveals the top card of their library, then puts that card on the top or bottom. A player wins if their card had a higher converted mana cost.) +Oracle:Counter target spell. Clash with an opponent. If you win, at the beginning of your next main phase, you may add an amount of {C} equal to that spell's converted mana cost. (Each clashing player reveals the top card of their library, then puts that card on the top or bottom. A player wins if their card had a higher converted mana cost.) diff --git a/forge-gui/res/cardsfolder/upcoming/wildborn_preserver.txt b/forge-gui/res/cardsfolder/upcoming/wildborn_preserver.txt new file mode 100644 index 00000000000..b8ef5ca1567 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/wildborn_preserver.txt @@ -0,0 +1,12 @@ +Name:Wildborn Preserver +ManaCost:1 G +Types:Creature Elf Archer +PT:2/2 +K:Flash +K:Reach +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.nonHuman+Other+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigImmediateTrig | TriggerDescription$ Whenever another non-Human creature enters the battlefield under your control, you may pay {X}. When you do, put X +1/+1 counters on CARDNAME. +SVar:TrigImmediateTrig:AB$ ImmediateTrigger | Cost$ X | Execute$ TrigPutCounter | RememberDefinedNumber$ X | References$ X | TriggerDescription$ When you do, put X +1/+1 counters on CARDNAME. +SVar:X:Count$xPaid +SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ Y | References$ Y +SVar:Y:Count$TriggerRememberAmount +Oracle:Flash\nReach\nWhenever another non-Human creature enters the battlefield under your control, you may pay {X}. When you do, put X +1/+1 counters on Wildborn Preserver. From 243726d307b7c5403158bfbca3ca4222dbee739d Mon Sep 17 00:00:00 2001 From: swordshine Date: Sun, 15 Sep 2019 21:37:24 +0800 Subject: [PATCH 16/47] Refactor "For each color among permanents you control, add one mana of that color" --- .../forge/game/ability/effects/ManaEffect.java | 15 ++++++++++++++- .../java/forge/game/card/CardFactoryUtil.java | 10 ++++------ forge-gui/res/cardsfolder/b/bloom_tender.txt | 6 +----- .../res/cardsfolder/upcoming/faeburrow_elder.txt | 7 ++----- 4 files changed, 21 insertions(+), 17 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ability/effects/ManaEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ManaEffect.java index 12a02922419..25269a4f4c1 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ManaEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ManaEffect.java @@ -9,15 +9,18 @@ import forge.game.GameActionUtil; import forge.game.ability.AbilityUtils; import forge.game.ability.SpellAbilityEffect; import forge.game.card.Card; +import forge.game.card.CardCollection; +import forge.game.card.CardLists; import forge.game.mana.Mana; import forge.game.player.Player; import forge.game.spellability.AbilityManaPart; import forge.game.spellability.SpellAbility; import forge.game.spellability.TargetRestrictions; +import forge.game.zone.ZoneType; + import org.apache.commons.lang3.StringUtils; import com.google.common.collect.Iterables; - import java.util.List; public class ManaEffect extends SpellAbilityEffect { @@ -181,6 +184,16 @@ public class ManaEffect extends SpellAbilityEffect { } String cs = manaType.toString(); abMana.setExpressChoice(cs); + } else if (type.startsWith("EachColorAmong")) { + final String res = type.split("_")[1]; + final CardCollection list = CardLists.getValidCards(card.getGame().getCardsIn(ZoneType.Battlefield), + res, sa.getActivatingPlayer(), card, sa); + byte colors = 0; + for (Card c : list) { + colors |= c.determineColor().getColor(); + } + if (colors == 0) return; + abMana.setExpressChoice(ColorSet.fromMask(colors)); } if (abMana.getExpressChoice().isEmpty()) { diff --git a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java index b6d21204033..a1566899fd1 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -1102,13 +1102,11 @@ public class CardFactoryUtil { final String restriction = l[0].substring(11); final String[] rest = restriction.split(","); final CardCollection list = CardLists.getValidCards(cc.getGame().getCardsInGame(), rest, cc, c, null); - int n = 0; - for (final byte col : MagicColor.WUBRG) { - if (!CardLists.getColor(list, col).isEmpty()) { - n++; - } + byte n = 0; + for (final Card card : list) { + n |= card.determineColor().getColor(); } - return doXMath(n, m, c); + return doXMath(ColorSet.fromMask(n).countColors(), m, c); } if (sq[0].contains("CreatureType")) { diff --git a/forge-gui/res/cardsfolder/b/bloom_tender.txt b/forge-gui/res/cardsfolder/b/bloom_tender.txt index e717ae667e6..db8383f11e5 100644 --- a/forge-gui/res/cardsfolder/b/bloom_tender.txt +++ b/forge-gui/res/cardsfolder/b/bloom_tender.txt @@ -2,11 +2,7 @@ Name:Bloom Tender ManaCost:1 G Types:Creature Elf Druid PT:1/1 -A:AB$ Mana | Cost$ T | Produced$ W | ConditionPresent$ Permanent.YouCtrl+White | SubAbility$ DBManaU | SpellDescription$ For each color among permanents you control, add one mana of that color. -SVar:DBManaU:DB$ Mana | Produced$ U | ConditionPresent$ Permanent.YouCtrl+Blue | SubAbility$ DBManaB -SVar:DBManaB:DB$ Mana | Produced$ B | ConditionPresent$ Permanent.YouCtrl+Black | SubAbility$ DBManaR -SVar:DBManaR:DB$ Mana | Produced$ R | ConditionPresent$ Permanent.YouCtrl+Red | SubAbility$ DBManaG -SVar:DBManaG:DB$ Mana | Produced$ G | ConditionPresent$ Permanent.YouCtrl+Green +A:AB$ Mana | Cost$ T | Produced$ Special EachColorAmong_Permanent.YouCtrl | SpellDescription$ For each color among permanents you control, add one mana of that color. AI:RemoveDeck:All SVar:Picture:http://www.wizards.com/global/images/magic/general/bloom_tender.jpg Oracle:{T}: For each color among permanents you control, add one mana of that color. diff --git a/forge-gui/res/cardsfolder/upcoming/faeburrow_elder.txt b/forge-gui/res/cardsfolder/upcoming/faeburrow_elder.txt index f510b652df7..46ee607e76c 100644 --- a/forge-gui/res/cardsfolder/upcoming/faeburrow_elder.txt +++ b/forge-gui/res/cardsfolder/upcoming/faeburrow_elder.txt @@ -5,9 +5,6 @@ PT:0/0 K:Vigilance S:Mode$ Continuous | Affected$ Card.Self | AddPower$ X | AddToughness$ X | Description$ CARDNAME gets +1/+1 for each color among permanents you control. SVar:X:Count$ColorsCtrl Permanent.YouCtrl+inZoneBattlefield -A:AB$ Mana | Cost$ T | Produced$ W | ConditionPresent$ Permanent.YouCtrl+White | SubAbility$ DBManaU | SpellDescription$ For each color among permanents you control, add one mana of that color. -SVar:DBManaU:DB$ Mana | Produced$ U | ConditionPresent$ Permanent.YouCtrl+Blue | SubAbility$ DBManaB -SVar:DBManaB:DB$ Mana | Produced$ B | ConditionPresent$ Permanent.YouCtrl+Black | SubAbility$ DBManaR -SVar:DBManaR:DB$ Mana | Produced$ R | ConditionPresent$ Permanent.YouCtrl+Red | SubAbility$ DBManaG -SVar:DBManaG:DB$ Mana | Produced$ G | ConditionPresent$ Permanent.YouCtrl+Green +A:AB$ Mana | Cost$ T | Produced$ Special EachColorAmong_Permanent.YouCtrl | SpellDescription$ For each color among permanents you control, add one mana of that color. +AI:RemoveDeck:All Oracle:Vigilance\nFaeburrow Elder gets +1/+1 for each color among permanents you control.\n{T}: For each color among permanents you control, add one mana of that color. From f1cbaa9d9595c0ac70eb50b2ed1a567f1a416a0a Mon Sep 17 00:00:00 2001 From: swordshine Date: Mon, 16 Sep 2019 08:29:00 +0800 Subject: [PATCH 17/47] Fix SVar name --- forge-gui/res/cardsfolder/upcoming/midnight_clock.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/upcoming/midnight_clock.txt b/forge-gui/res/cardsfolder/upcoming/midnight_clock.txt index 73795f49801..33a384fb9c5 100644 --- a/forge-gui/res/cardsfolder/upcoming/midnight_clock.txt +++ b/forge-gui/res/cardsfolder/upcoming/midnight_clock.txt @@ -9,5 +9,5 @@ SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ HOUR | Counter T:Mode$ CounterAdded | ValidCard$ Card.Self | TriggerZones$ Battlefield | CounterType$ HOUR | CounterAmount$ EQ12 | Execute$ TrigChangeAll | TriggerDescription$ When the twelfth hour counter is put on CARDNAME, shuffle your hand and graveyard into your library, then draw seven cards. Exile CARDNAME. SVar:TrigChangeAll:DB$ ChangeZoneAll | Origin$ Graveyard,Hand | Destination$ Library | ChangeType$ Card.YouOwn | Shuffle$ True | SubAbility$ DBDraw SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ 7 | SubAbility$ DBExile -SVar:DBChange:DB$ ChangeZone | Origin$ Stack | Destination$ Exile +SVar:DBExile:DB$ ChangeZone | Origin$ Stack | Destination$ Exile Oracle:{T}: Add {U}.\n{2}{U}: Put an hour counter on Midnight Clock.\nAt the beginning of each upkeep, put an hour counter on Midnight Clock.\nWhen the twelfth hour counter is put on Midnight Clock, shuffle your hand and graveyard into your library, then draw seven cards. Exile Midnight Clock. From c42f0037551c5d475c1247441dc304fbb230c948 Mon Sep 17 00:00:00 2001 From: swordshine Date: Mon, 16 Sep 2019 16:12:00 +0800 Subject: [PATCH 18/47] Add Folio of Fancies --- .../res/cardsfolder/upcoming/folio_of_fancies.txt | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/folio_of_fancies.txt diff --git a/forge-gui/res/cardsfolder/upcoming/folio_of_fancies.txt b/forge-gui/res/cardsfolder/upcoming/folio_of_fancies.txt new file mode 100644 index 00000000000..f9dd3d0a9e0 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/folio_of_fancies.txt @@ -0,0 +1,12 @@ +Name:Folio of Fancies +ManaCost:1 U +Types:Artifact +S:Mode$ Continuous | Affected$ Player | SetMaxHandSize$ Unlimited | Description$ Players have no maximum hand size. +SVar:NonStackingEffect:True +A:AB$ Draw | Cost$ X X T | NumCards$ X | References$ X | Defined$ Player | SpellDescription$ Each player draws X cards. +SVar:X:Count$xPaid +A:AB$ RepeatEach | Cost$ 2 U T | RepeatPlayers$ Player.Opponent | RepeatSubAbility$ DBMill | SpellDescription$ Each opponent puts a number of cards equal to the number of cards in their hand from the top of their library into their graveyard. +SVar:DBMill:DB$ Mill | Defined$ Remembered | NumCards$ Y | References$ Y +SVar:Y:Count$ValidHand Card.RememberedPlayerCtrl +AI:RemoveDeck:All +Oracle:Players have no maximum hand size.\n{X}{X}, {T}: Each player draws X cards.\n{2}{U}, {T}: Each opponent puts a number of cards equal to the number of cards in their hand from the top of their library into their graveyard. From 0e5884d7573fab7e084d77a7d16bf13da34e1a8d Mon Sep 17 00:00:00 2001 From: swordshine Date: Mon, 16 Sep 2019 16:35:06 +0800 Subject: [PATCH 19/47] Add Henge Walker --- .../src/main/java/forge/game/CardTraitBase.java | 14 +++++++++++++- .../res/cardsfolder/upcoming/henge_walker.txt | 6 ++++++ 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 forge-gui/res/cardsfolder/upcoming/henge_walker.txt diff --git a/forge-game/src/main/java/forge/game/CardTraitBase.java b/forge-game/src/main/java/forge/game/CardTraitBase.java index a56db98f6f9..e51ab5202c0 100644 --- a/forge-game/src/main/java/forge/game/CardTraitBase.java +++ b/forge-game/src/main/java/forge/game/CardTraitBase.java @@ -259,7 +259,19 @@ public abstract class CardTraitBase extends GameObject implements IHasCardView { return false; } final String payingMana = StringUtils.join(hostCard.getCastSA().getPayingMana()); - if (StringUtils.countMatches(payingMana, MagicColor.toShortString(params.get("Adamant"))) < 3) { + final String color = params.get("Adamant"); + if ("Any".equals(color)) { + boolean bFlag = false; + for (byte c : MagicColor.WUBRG) { + if (StringUtils.countMatches(payingMana, MagicColor.toShortString(c)) >= 3) { + bFlag = true; + break; + } + } + if (!bFlag) { + return false; + } + } else if (StringUtils.countMatches(payingMana, MagicColor.toShortString(color)) < 3) { return false; } } diff --git a/forge-gui/res/cardsfolder/upcoming/henge_walker.txt b/forge-gui/res/cardsfolder/upcoming/henge_walker.txt new file mode 100644 index 00000000000..e85b1bdfef4 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/henge_walker.txt @@ -0,0 +1,6 @@ +Name:Henge Walker +ManaCost:3 +Types:Artifact Creature Golem +PT:2/2 +K:etbCounter:P1P1:1:Adamant$ Any:Adamant — If at least three mana of the same color was spent to cast this spell, CARDNAME enters the battlefield with a +1/+1 counter on it. +Oracle:Adamant — If at least three mana of the same color was spent to cast this spell, Henge Walker enters the battlefield with a +1/+1 counter on it. From 12b05147e70de9b89439d7859721daf10fb198f2 Mon Sep 17 00:00:00 2001 From: swordshine Date: Mon, 16 Sep 2019 18:27:10 +0800 Subject: [PATCH 20/47] Update two Adamant cards --- forge-game/src/main/java/forge/game/card/CardUtil.java | 3 ++- forge-gui/res/cardsfolder/upcoming/embereth_paladin.txt | 4 +--- forge-gui/res/cardsfolder/upcoming/garenbrig_paladin.txt | 4 +--- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/forge-game/src/main/java/forge/game/card/CardUtil.java b/forge-game/src/main/java/forge/game/card/CardUtil.java index 7bf0cfe1390..1bb94cdcdb4 100644 --- a/forge-game/src/main/java/forge/game/card/CardUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardUtil.java @@ -56,7 +56,8 @@ public final class CardUtil { "Transmute", "Replicate", "Recover", "Suspend", "Aura swap", "Fortify", "Transfigure", "Champion", "Evoke", "Prowl", "IfReach", "Reinforce", "Unearth", "Level up", "Miracle", "Overload", - "Scavenge", "Bestow", "Outlast", "Dash", "Surge", "Emerge", "Hexproof:").build(); + "Scavenge", "Bestow", "Outlast", "Dash", "Surge", "Emerge", "Hexproof:", + "etbCounter").build(); /** List of keyword endings of keywords that could be modified by text changes. */ public static final ImmutableList modifiableKeywordEndings = ImmutableList.builder().add( "walk", "cycling", "offering").build(); diff --git a/forge-gui/res/cardsfolder/upcoming/embereth_paladin.txt b/forge-gui/res/cardsfolder/upcoming/embereth_paladin.txt index b76ada65fcd..456f35744c0 100644 --- a/forge-gui/res/cardsfolder/upcoming/embereth_paladin.txt +++ b/forge-gui/res/cardsfolder/upcoming/embereth_paladin.txt @@ -3,7 +3,5 @@ ManaCost:3 R Types:Creature Human Knight PT:4/1 K:Haste -R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | Adamant$ Red | ReplaceWith$ ETBAddCounter | Description$ Adamant — If at least three red mana was spent to cast this spell, CARDNAME enters the battlefield with a +1/+1 counter on it. -SVar:ETBAddCounter:DB$ PutCounter | ETB$ True | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ MoveToPlay -SVar:MoveToPlay:DB$ ChangeZone | Hidden$ True | Origin$ All | Destination$ Battlefield | Defined$ ReplacedCard +K:etbCounter:P1P1:1:Adamant$ Red:Adamant — If at least three red mana was spent to cast this spell, CARDNAME enters the battlefield with a +1/+1 counter on it. Oracle:Haste\nAdamant — If at least three red mana was spent to cast this spell, Embereth Paladin enters the battlefield with a +1/+1 counter on it. diff --git a/forge-gui/res/cardsfolder/upcoming/garenbrig_paladin.txt b/forge-gui/res/cardsfolder/upcoming/garenbrig_paladin.txt index cdb510b7e22..8c81772b74d 100644 --- a/forge-gui/res/cardsfolder/upcoming/garenbrig_paladin.txt +++ b/forge-gui/res/cardsfolder/upcoming/garenbrig_paladin.txt @@ -2,8 +2,6 @@ Name:Garenbrig Paladin ManaCost:4 G Types:Creature Giant Knight PT:4/4 -R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | Adamant$ Green | ReplaceWith$ ETBAddCounter | Description$ Adamant — If at least three green mana was spent to cast this spell, CARDNAME enters the battlefield with a +1/+1 counter on it. -SVar:ETBAddCounter:DB$ PutCounter | ETB$ True | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ MoveToPlay -SVar:MoveToPlay:DB$ ChangeZone | Hidden$ True | Origin$ All | Destination$ Battlefield | Defined$ ReplacedCard +K:etbCounter:P1P1:1:Adamant$ Green:Adamant — If at least three green mana was spent to cast this spell, CARDNAME enters the battlefield with a +1/+1 counter on it. K:CantBeBlockedBy Creature.powerLE2 Oracle:Adamant — If at least three green mana was spent to cast this spell, Garenbrig Paladin enters the battlefield with a +1/+1 counter on it.\nGarenbrig Paladin can't be blocked by creatures with power 2 or less. From 716faf4706f23d8814a8544c86c96c6a03f44f45 Mon Sep 17 00:00:00 2001 From: swordshine Date: Mon, 16 Sep 2019 18:35:31 +0800 Subject: [PATCH 21/47] Add Clockwork Servant --- forge-gui/res/cardsfolder/upcoming/clockwork_servant.txt | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/clockwork_servant.txt diff --git a/forge-gui/res/cardsfolder/upcoming/clockwork_servant.txt b/forge-gui/res/cardsfolder/upcoming/clockwork_servant.txt new file mode 100644 index 00000000000..fff1fe161a5 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/clockwork_servant.txt @@ -0,0 +1,7 @@ +Name:Clockwork Servant +ManaCost:3 +Types:Artifact Creature Gnome +PT:2/3 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Adamant$ Any | Execute$ TrigDraw | TriggerDescription$ Adamant — When CARDNAME enters the battlefield, if at least three mana of the same color was spent to cast it, draw a card. +SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ 1 +Oracle:Adamant — When Clockwork Servant enters the battlefield, if at least three mana of the same color was spent to cast it, draw a card. From e0f2802eda44767626d638fd26091629d538a4d2 Mon Sep 17 00:00:00 2001 From: swordshine Date: Mon, 16 Sep 2019 18:49:46 +0800 Subject: [PATCH 22/47] Add Sundering Stroke --- .../src/main/java/forge/game/ability/AbilityUtils.java | 3 ++- forge-gui/res/cardsfolder/upcoming/sundering_stroke.txt | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 forge-gui/res/cardsfolder/upcoming/sundering_stroke.txt diff --git a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java index fa03796fa5a..f8abf7b00b0 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java @@ -1620,7 +1620,8 @@ public class AbilityUtils { // Count$Adamant... if (sq[0].startsWith("Adamant")) { final String payingMana = StringUtils.join(sa.getRootAbility().getPayingMana()); - final boolean adamant = StringUtils.countMatches(payingMana, MagicColor.toShortString(sq[1])) >= 3; + final int num = sq[0].length() > 7 ? Integer.parseInt(sq[0].split("_")[1]) : 3; + final boolean adamant = StringUtils.countMatches(payingMana, MagicColor.toShortString(sq[1])) >= num; return CardFactoryUtil.doXMath(Integer.parseInt(sq[adamant ? 2 : 3]), expr, c); } diff --git a/forge-gui/res/cardsfolder/upcoming/sundering_stroke.txt b/forge-gui/res/cardsfolder/upcoming/sundering_stroke.txt new file mode 100644 index 00000000000..e34f7f05e6a --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/sundering_stroke.txt @@ -0,0 +1,7 @@ +Name:Sundering Stroke +ManaCost:6 R +Types:Sorcery +A:SP$ DealDamage | Cost$ 6 R | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target to distribute damage to | NumDmg$ 7 | TargetMin$ 1 | TargetMax$ 3 | DividedAsYouChoose$ 7 | ConditionCheckSVar$ X | ConditionSVarCompare$ EQ0 | References$ X | SubAbility$ DBDmgAll | StackDescription$ SpellDescription | SpellDescription$ CARDNAME deals 7 damage divided as you choose among one, two, or three targets. If at least seven red mana was spent to cast this spell, instead CARDNAME deals 7 damage to each of those permanents and/or players. +SVar:DBDmgAll:DB$ DealDamage | Defined$ Targeted | NumDmg$ 7 | ConditionCheckSVar$ X | References$ X | StackDescription$ None +SVar:X:Count$Adamant_7.Red.1.0 +Oracle:Sundering Stroke deals 7 damage divided as you choose among one, two, or three targets. If at least seven red mana was spent to cast this spell, instead Sundering Stroke deals 7 damage to each of those permanents and/or players. From 70f640b41424723d1d755b476d8abce368ecc318 Mon Sep 17 00:00:00 2001 From: swordshine Date: Mon, 16 Sep 2019 20:10:08 +0800 Subject: [PATCH 23/47] Add two cards --- forge-gui/res/cardsfolder/p/psychic_intrusion.txt | 4 +--- .../res/cardsfolder/upcoming/blow_your_house_down.txt | 6 ++++++ forge-gui/res/cardsfolder/upcoming/covetous_urge.txt | 9 +++++++++ 3 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 forge-gui/res/cardsfolder/upcoming/blow_your_house_down.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/covetous_urge.txt diff --git a/forge-gui/res/cardsfolder/p/psychic_intrusion.txt b/forge-gui/res/cardsfolder/p/psychic_intrusion.txt index fd16b080671..1d0a7051b39 100644 --- a/forge-gui/res/cardsfolder/p/psychic_intrusion.txt +++ b/forge-gui/res/cardsfolder/p/psychic_intrusion.txt @@ -2,10 +2,8 @@ Name:Psychic Intrusion ManaCost:3 U B Types:Sorcery A:SP$ ChangeZone | Cost$ 3 U B | Origin$ Hand,Graveyard | Destination$ Exile | ValidTgts$ Opponent | DefinedPlayer$ Targeted | Chooser$ You | TgtPrompt$ Select target opponent | ChangeType$ Card.nonLand | ChangeNum$ 1 | IsCurse$ True | RememberChanged$ True | SubAbility$ DBEffect | StackDescription$ SpellDescription | SpellDescription$ Target opponent reveals their hand. You choose a nonland card from that player's graveyard or hand and exile it. You may cast that card for as long as it remains exiled, and you may spend mana as though it were mana of any color to cast that spell. -SVar:DBEffect:DB$ Effect | StaticAbilities$ STPlay | Triggers$ TriggerCastPI | SVars$ TrigRemoveSelf | RememberObjects$ Remembered | Duration$ Permanent | SubAbility$ DBCleanup +SVar:DBEffect:DB$ Effect | StaticAbilities$ STPlay | RememberObjects$ Remembered | Duration$ Permanent | ExileOnMoved$ Exile | SubAbility$ DBCleanup SVar:STPlay:Mode$ Continuous | MayPlay$ True | MayPlayIgnoreColor$ True | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Exile | Description$ You may cast that card and you may spend mana as though it were mana of any color to cast it. -SVar:TriggerCastPI:Mode$ SpellCast | ValidCard$ Card.IsRemembered | TriggerZones$ Command | Execute$ TrigRemoveSelf | Static$ True -SVar:TrigRemoveSelf:DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True AI:RemoveDeck:All SVar:Picture:http://www.wizards.com/global/images/magic/general/psychic_intrusion.jpg diff --git a/forge-gui/res/cardsfolder/upcoming/blow_your_house_down.txt b/forge-gui/res/cardsfolder/upcoming/blow_your_house_down.txt new file mode 100644 index 00000000000..94decc095c2 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/blow_your_house_down.txt @@ -0,0 +1,6 @@ +Name:Blow Your House Down +ManaCost:2 R +Types:Sorcery +A:SP$ Pump | Cost$ 2 R | ValidTgts$ Creature | TargetMin$ 0 | TargetMax$ 3 | KW$ HIDDEN CARDNAME can't block. | IsCurse$ True | TgtPrompt$ Select target creature | SubAbility$ DBDestroy | SpellDescription$ Up to three target creatures can't block this turn. Destroy any of them that are Walls. +SVar:DBDestroy:DB$ DestroyAll | ValidCards$ Targeted.Wall +Oracle:Up to three target creatures can't block this turn. Destroy any of them that are Walls. diff --git a/forge-gui/res/cardsfolder/upcoming/covetous_urge.txt b/forge-gui/res/cardsfolder/upcoming/covetous_urge.txt new file mode 100644 index 00000000000..97b9ce91901 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/covetous_urge.txt @@ -0,0 +1,9 @@ +Name:Covetous Urge +ManaCost:U/B U/B U/B U/B +Types:Sorcery +A:SP$ ChangeZone | Cost$ U/B U/B U/B U/B | Origin$ Hand,Graveyard | Destination$ Exile | ValidTgts$ Opponent | DefinedPlayer$ Targeted | Chooser$ You | TgtPrompt$ Select target opponent | ChangeType$ Card.nonLand | ChangeNum$ 1 | IsCurse$ True | RememberChanged$ True | SubAbility$ DBEffect | StackDescription$ SpellDescription | SpellDescription$ Target opponent reveals their hand. You choose a nonland card from that player's graveyard or hand and exile it. You may cast that card for as long as it remains exiled, and you may spend mana as though it were mana of any color to cast that spell. +SVar:DBEffect:DB$ Effect | StaticAbilities$ STPlay | RememberObjects$ Remembered | Duration$ Permanent | ExileOnMoved$ Exile | SubAbility$ DBCleanup +SVar:STPlay:Mode$ Continuous | MayPlay$ True | MayPlayIgnoreColor$ True | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Exile | Description$ You may cast that card and you may spend mana as though it were mana of any color to cast it. +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +AI:RemoveDeck:All +Oracle:Target opponent reveals their hand. You choose a nonland card from that player's graveyard or hand and exile it. You may cast that card for as long as it remains exiled, and you may spend mana as though it were mana of any color to cast that spell. From c8cb56c416a79dcef7ba4e4b6aa5bf0a568445bf Mon Sep 17 00:00:00 2001 From: swordshine Date: Mon, 16 Sep 2019 20:20:07 +0800 Subject: [PATCH 24/47] Update a script --- forge-gui/res/cardsfolder/p/prahv.txt | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/forge-gui/res/cardsfolder/p/prahv.txt b/forge-gui/res/cardsfolder/p/prahv.txt index eec7a7065c7..be2396dbeac 100644 --- a/forge-gui/res/cardsfolder/p/prahv.txt +++ b/forge-gui/res/cardsfolder/p/prahv.txt @@ -4,12 +4,7 @@ Types:Plane Ravnica S:Mode$ CantAttack | EffectZone$ Command | ValidCard$ Creature.YouCtrl | CheckSVar$ CheckThisTurnCast | Description$ If you cast a spell this turn, you can't attack with creatures. SVar:CheckThisTurnCast:Count$ThisTurnCast_Card.YouCtrl S:Mode$ CantBeCast | EffectZone$ Command | ValidCard$ Card | Caster$ You | CheckSVar$ CheckThisTurnAttacked | Description$ If you attacked with creatures this turn, you can't cast spells. -SVar:CheckThisTurnAttacked:Number$0 -T:Mode$ Attacks | ValidCard$ Creature.YouCtrl | Execute$ DBStoreSVar | Static$ True -SVar:DBStoreSVar:DB$ StoreSVar | SVar$ CheckThisTurnAttacked | Type$ Number | Expression$ 1 -T:Mode$ PlaneswalkedFrom | ValidCard$ Plane.Self | Execute$ DBReset | Static$ True -T:Mode$ Phase | Phase$ Cleanup | Execute$ DBReset | Static$ True -SVar:DBReset:DB$ StoreSVar | SVar$ CheckThisTurnAttacked | Type$ Number | Expression$ 0 +SVar:CheckThisTurnAttacked:Count$AttackersDeclared T:Mode$ PlanarDice | Result$ Chaos | TriggerZones$ Command | Execute$ RolledChaos | TriggerDescription$ Whenever you roll {CHAOS}, you gain life equal to the number of cards in your hand. SVar:RolledChaos:DB$ GainLife | LifeAmount$ PrahvX | References$ PrahvX | Defined$ You SVar:PrahvX:Count$InYourHand From 4b031c6928bbb3e863a52eebf7de076d4874bc4b Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Mon, 16 Sep 2019 13:31:54 +0000 Subject: [PATCH 25/47] Fix Cinder Cloud and Noxious Gearhulk Interaction with Cards with CDA (Noxious Gearhulk -> Malignus, as reported on forums) --- forge-gui/res/cardsfolder/c/cinder_cloud.txt | 2 +- forge-gui/res/cardsfolder/n/noxious_gearhulk.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/forge-gui/res/cardsfolder/c/cinder_cloud.txt b/forge-gui/res/cardsfolder/c/cinder_cloud.txt index 18be7982e0e..f0d280b4d84 100644 --- a/forge-gui/res/cardsfolder/c/cinder_cloud.txt +++ b/forge-gui/res/cardsfolder/c/cinder_cloud.txt @@ -1,7 +1,7 @@ Name:Cinder Cloud ManaCost:3 R R Types:Instant -A:SP$ Destroy | Cost$ 3 R R | ValidTgts$ Creature | TgtPrompt$ Select target creature | RememberDestroyed$ True | SubAbility$ DBDamage | SpellDescription$ Destroy target creature. If a white creature dies this way, Cinder Cloud deals damage to that creature's controller equal to the creature's power. +A:SP$ Destroy | Cost$ 3 R R | ValidTgts$ Creature | TgtPrompt$ Select target creature | RememberLKI$ True | SubAbility$ DBDamage | SpellDescription$ Destroy target creature. If a white creature dies this way, Cinder Cloud deals damage to that creature's controller equal to the creature's power. SVar:DBDamage:DB$ DealDamage | Defined$ RememberedController | NumDmg$ Z | ConditionCheckSVar$ Y | ConditionSVarCompare$ GE1 | References$ Y,Z SVar:Y:RememberedLKI$Valid Creature.White SVar:Z:RememberedLKI$CardPower diff --git a/forge-gui/res/cardsfolder/n/noxious_gearhulk.txt b/forge-gui/res/cardsfolder/n/noxious_gearhulk.txt index 501c4a800cc..52ced432ad1 100644 --- a/forge-gui/res/cardsfolder/n/noxious_gearhulk.txt +++ b/forge-gui/res/cardsfolder/n/noxious_gearhulk.txt @@ -4,7 +4,7 @@ Types: Artifact Creature Construct PT:5/4 K:Menace T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDestroy | OptionalDecider$ You | RememberLKI$ True | TriggerDescription$ When CARDNAME enters the battlefield, you may destroy another target creature. If a creature is destroyed this way, you gain life equal to its toughness. -SVar:TrigDestroy:DB$ Destroy | ValidTgts$ Creature.Other | TgtPrompt$ Select another target creature. | RememberDestroyed$ True | SubAbility$ DBGainLife +SVar:TrigDestroy:DB$ Destroy | ValidTgts$ Creature.Other | TgtPrompt$ Select another target creature. | RememberLKI$ True | SubAbility$ DBGainLife SVar:DBGainLife:DB$GainLife | Defined$ You | LifeAmount$ X | References$ X | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:X:RememberedLKI$CardToughness From e98cb0043de6c66668065678b3122e407a9f0b29 Mon Sep 17 00:00:00 2001 From: swordshine Date: Mon, 16 Sep 2019 22:05:14 +0800 Subject: [PATCH 26/47] Add Robber of the Rich --- .../main/java/forge/ai/ability/DamageDealAi.java | 2 +- .../src/main/java/forge/ai/ability/DestroyAi.java | 2 +- .../java/forge/game/card/CardFactoryUtil.java | 7 +++++++ .../main/java/forge/game/combat/CombatUtil.java | 2 +- .../game/combat/GlobalAttackRestrictions.java | 2 +- .../src/main/java/forge/game/player/Player.java | 15 +++++++++------ .../forge/game/staticability/StaticAbility.java | 2 +- .../cardsfolder/upcoming/robber_of_the_rich.txt | 15 +++++++++++++++ 8 files changed, 36 insertions(+), 11 deletions(-) create mode 100644 forge-gui/res/cardsfolder/upcoming/robber_of_the_rich.txt diff --git a/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java b/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java index f4af5ec56dc..40141ae80a4 100644 --- a/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/DamageDealAi.java @@ -156,7 +156,7 @@ public class DamageDealAi extends DamageAiBase { } } } - if (ai.getAttackedWithCreatureThisTurn()) { + if (!ai.getCreaturesAttackedThisTurn().isEmpty()) { dmg = Integer.parseInt(logic.substring(logic.indexOf(".") + 1)); } } else if ("WildHunt".equals(logic)) { diff --git a/forge-ai/src/main/java/forge/ai/ability/DestroyAi.java b/forge-ai/src/main/java/forge/ai/ability/DestroyAi.java index 69c5bf22fc0..fd7632bc44d 100644 --- a/forge-ai/src/main/java/forge/ai/ability/DestroyAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/DestroyAi.java @@ -63,7 +63,7 @@ public class DestroyAi extends SpellAbilityAi { } } else if ("AtEOTIfNotAttacking".equals(sa.getParam("AILogic"))) { PhaseHandler ph = ai.getGame().getPhaseHandler(); - if (!ph.is(PhaseType.END_OF_TURN) || ai.getAttackedWithCreatureThisTurn()) { + if (!ph.is(PhaseType.END_OF_TURN) || !ai.getCreaturesAttackedThisTurn().isEmpty()) { return false; } } diff --git a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java index a1566899fd1..dde9459e34d 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -1329,6 +1329,13 @@ public class CardFactoryUtil { return doXMath(cc.getAttackersDeclaredThisTurn(), m, c); } + // Count$CardAttackedThisTurn_ + if (sq[0].contains("CreaturesAttackedThisTurn")) { + final String[] workingCopy = l[0].split("_"); + final String validFilter = workingCopy[1]; + return doXMath(CardLists.getType(cc.getCreaturesAttackedThisTurn(), validFilter).size(), m, c); + } + // Count$ThisTurnCast // Count$LastTurnCast if (sq[0].contains("ThisTurnCast") || sq[0].contains("LastTurnCast")) { diff --git a/forge-game/src/main/java/forge/game/combat/CombatUtil.java b/forge-game/src/main/java/forge/game/combat/CombatUtil.java index 2b17d5b3003..1578b1d1d81 100644 --- a/forge-game/src/main/java/forge/game/combat/CombatUtil.java +++ b/forge-game/src/main/java/forge/game/combat/CombatUtil.java @@ -317,7 +317,7 @@ public class CombatUtil { c.getDamageHistory().setCreatureAttackedThisCombat(true); c.getDamageHistory().clearNotAttackedSinceLastUpkeepOf(); - c.getController().setAttackedWithCreatureThisTurn(true); + c.getController().addCreaturesAttackedThisTurn(c); c.getController().incrementAttackersDeclaredThisTurn(); if (combat.getDefenderByAttacker(c) != null && combat.getDefenderByAttacker(c) instanceof Player) { diff --git a/forge-game/src/main/java/forge/game/combat/GlobalAttackRestrictions.java b/forge-game/src/main/java/forge/game/combat/GlobalAttackRestrictions.java index dc8eabe113f..da168fe0cab 100644 --- a/forge-game/src/main/java/forge/game/combat/GlobalAttackRestrictions.java +++ b/forge-game/src/main/java/forge/game/combat/GlobalAttackRestrictions.java @@ -150,7 +150,7 @@ public class GlobalAttackRestrictions { final Game game = attackingPlayer.getGame(); /* if (game.getStaticEffects().getGlobalRuleChange(GlobalRuleChange.onlyOneAttackerATurn)) { - if (attackingPlayer.getAttackedWithCreatureThisTurn()) { + if (!attackingPlayer.getAttackedWithCreatureThisTurn().isEmpty()) { max = 0; } else { max = 1; diff --git a/forge-game/src/main/java/forge/game/player/Player.java b/forge-game/src/main/java/forge/game/player/Player.java index 887af26d406..f03e5a075a7 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -124,7 +124,7 @@ public class Player extends GameEntity implements Comparable { private ManaPool manaPool = new ManaPool(this); private GameEntity mustAttackEntity = null; private GameEntity mustAttackEntityThisTurn = null; - private boolean attackedWithCreatureThisTurn = false; + private CardCollection creatureAttackedThisTurn = new CardCollection(); private boolean activateLoyaltyAbilityThisTurn = false; private boolean tappedLandForManaThisTurn = false; private int attackersDeclaredThisTurn = 0; @@ -1824,11 +1824,14 @@ public class Player extends GameEntity implements Comparable { activateLoyaltyAbilityThisTurn = b; } - public final boolean getAttackedWithCreatureThisTurn() { - return attackedWithCreatureThisTurn; + public final CardCollection getCreaturesAttackedThisTurn() { + return creatureAttackedThisTurn; } - public final void setAttackedWithCreatureThisTurn(final boolean b) { - attackedWithCreatureThisTurn = b; + public final void addCreaturesAttackedThisTurn(final Card c) { + creatureAttackedThisTurn.add(c); + } + public final void clearCreaturesAttackedThisTurn() { + creatureAttackedThisTurn.clear(); } public final int getAttackersDeclaredThisTurn() { @@ -2389,7 +2392,7 @@ public class Player extends GameEntity implements Comparable { resetNumDrawnThisTurn(); resetNumDiscardedThisTurn(); setNumCardsInHandStartedThisTurnWith(getCardsIn(ZoneType.Hand).size()); - setAttackedWithCreatureThisTurn(false); + clearCreaturesAttackedThisTurn(); setActivateLoyaltyAbilityThisTurn(false); setTappedLandForManaThisTurn(false); setLandsPlayedLastTurn(getLandsPlayedThisTurn()); diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbility.java b/forge-game/src/main/java/forge/game/staticability/StaticAbility.java index 3906fe03688..ca2446d0e8d 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbility.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbility.java @@ -527,7 +527,7 @@ public class StaticAbility extends CardTraitBase implements IIdentifiable, Clone } if (hasParam("PlayerAttackedWithCreatureThisTurn") - && !player.getAttackedWithCreatureThisTurn()) { + && player.getCreaturesAttackedThisTurn().isEmpty()) { return false; } diff --git a/forge-gui/res/cardsfolder/upcoming/robber_of_the_rich.txt b/forge-gui/res/cardsfolder/upcoming/robber_of_the_rich.txt new file mode 100644 index 00000000000..57fbc9b8631 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/robber_of_the_rich.txt @@ -0,0 +1,15 @@ +Name:Robber of the Rich +ManaCost:1 R +Types:Creature Human Archer Rogue +PT:2/2 +K:Reach +K:Haste +T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigExile | CheckSVar$ X | SVarCompare$ GTY | References$ X,Y | TriggerDescription$ Whenever CARDNAME attacks, if defending player has more cards in hand than you, exile the top card of their library. +SVar:TrigExile:DB$ Mill | Defined$ TriggeredDefendingPlayer | NumCards$ 1 | Destination$ Exile | RememberMilled$ True | SubAbility$ DBEffect +SVar:DBEffect:DB$ Effect | RememberObjects$ RememberedCard | StaticAbilities$ STPlay | SVars$ Z | SubAbility$ DBCleanup | ExileOnMoved$ Exile | Duration$ Permanent +SVar:STPlay:Mode$ Continuous | MayPlay$ True | MayPlayIgnoreColor$ True | EffectZone$ Command | Affected$ Card.IsRemembered+nonLand | AffectedZone$ Exile | CheckSVar$ Z | References$ Z | Description$ During any turn you attacked with a Rogue, you may cast that card and you may spend mana as though it were mana of any color to cast that spell. +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:X:Count$ValidHand Card.DefenderCtrl +SVar:Y:Count$InYourHand +SVar:Z:Count$CreaturesAttackedThisTurn_Rogue +Oracle:Reach, haste\nWhenever Robber of the Rich attacks, if defending player has more cards in hand than you, exile the top card of their library. During any turn you attacked with a Rogue, you may cast that card and you may spend mana as though it were mana of any color to cast that spell. From 72079ad60944ff4306edb8e1ffd920a5f2acadf4 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Mon, 16 Sep 2019 17:57:22 +0000 Subject: [PATCH 27/47] Fix Cinder Cloud and Noxious Gearhulk Interaction with Cards with CDA (Noxious Gearhulk -> Malignus, as reported on forums) --- forge-gui-android/AndroidManifest.xml | 3 +-- forge-gui-android/src/forge/app/Main.java | 13 ++++--------- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/forge-gui-android/AndroidManifest.xml b/forge-gui-android/AndroidManifest.xml index f207f20d405..5edbcfad66e 100644 --- a/forge-gui-android/AndroidManifest.xml +++ b/forge-gui-android/AndroidManifest.xml @@ -7,8 +7,7 @@ - - + diff --git a/forge-gui-android/src/forge/app/Main.java b/forge-gui-android/src/forge/app/Main.java index b9d26086c2b..66728960885 100644 --- a/forge-gui-android/src/forge/app/Main.java +++ b/forge-gui-android/src/forge/app/Main.java @@ -17,13 +17,10 @@ import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.os.PowerManager; -import android.provider.Settings; -import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT; import android.view.WindowManager; import android.webkit.MimeTypeMap; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.backends.android.AndroidApplication; -import forge.FThreads; import forge.Forge; import forge.interfaces.IDeviceAdapter; import forge.model.FModel; @@ -37,7 +34,6 @@ import java.io.OutputStream; import java.util.concurrent.Callable; public class Main extends AndroidApplication { - public int time = -2; @Override protected void onCreate(Bundle savedInstanceState) { @@ -239,17 +235,16 @@ public class Main extends AndroidApplication { @Override public void preventSystemSleep(final boolean preventSleep) { - if (time == -2) - time = Settings.System.getInt(getContentResolver(), SCREEN_OFF_TIMEOUT, 0); - FThreads.invokeInEdtNowOrLater(new Runnable() { //must set window flags from EDT thread + // Setting getWindow() Flags needs to run on UI thread. + // Should fix android.view.ViewRoot$CalledFromWrongThreadException: + // Only the original thread that created a view hierarchy can touch its views. + runOnUiThread(new Runnable() { @Override public void run() { if (preventSleep) { - Settings.System.putInt(getContentResolver(), SCREEN_OFF_TIMEOUT, Integer.MAX_VALUE); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } else { - Settings.System.putInt(getContentResolver(), SCREEN_OFF_TIMEOUT, time); getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } } From b462f0dba18c70cec05862fa50a1c3f8fe37ee02 Mon Sep 17 00:00:00 2001 From: swordshine Date: Tue, 17 Sep 2019 10:52:25 +0800 Subject: [PATCH 28/47] Update trigger description --- forge-gui/res/cardsfolder/upcoming/robber_of_the_rich.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/upcoming/robber_of_the_rich.txt b/forge-gui/res/cardsfolder/upcoming/robber_of_the_rich.txt index 57fbc9b8631..575d5a15686 100644 --- a/forge-gui/res/cardsfolder/upcoming/robber_of_the_rich.txt +++ b/forge-gui/res/cardsfolder/upcoming/robber_of_the_rich.txt @@ -4,7 +4,7 @@ Types:Creature Human Archer Rogue PT:2/2 K:Reach K:Haste -T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigExile | CheckSVar$ X | SVarCompare$ GTY | References$ X,Y | TriggerDescription$ Whenever CARDNAME attacks, if defending player has more cards in hand than you, exile the top card of their library. +T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigExile | CheckSVar$ X | SVarCompare$ GTY | References$ X,Y | TriggerDescription$ Whenever CARDNAME attacks, if defending player has more cards in hand than you, exile the top card of their library. During any turn you attacked with a Rogue, you may cast that card and you may spend mana as though it were mana of any color to cast that spell. SVar:TrigExile:DB$ Mill | Defined$ TriggeredDefendingPlayer | NumCards$ 1 | Destination$ Exile | RememberMilled$ True | SubAbility$ DBEffect SVar:DBEffect:DB$ Effect | RememberObjects$ RememberedCard | StaticAbilities$ STPlay | SVars$ Z | SubAbility$ DBCleanup | ExileOnMoved$ Exile | Duration$ Permanent SVar:STPlay:Mode$ Continuous | MayPlay$ True | MayPlayIgnoreColor$ True | EffectZone$ Command | Affected$ Card.IsRemembered+nonLand | AffectedZone$ Exile | CheckSVar$ Z | References$ Z | Description$ During any turn you attacked with a Rogue, you may cast that card and you may spend mana as though it were mana of any color to cast that spell. From 5d1618104e22336a71418f8a32f3be8cc75dc1a8 Mon Sep 17 00:00:00 2001 From: swordshine Date: Tue, 17 Sep 2019 15:22:06 +0800 Subject: [PATCH 29/47] Add three cards --- forge-gui/res/cardsfolder/upcoming/ardenvale_paladin.txt | 6 ++++++ forge-gui/res/cardsfolder/upcoming/mystical_dispute.txt | 8 ++++++++ .../res/cardsfolder/upcoming/rally_for_the_throne.txt | 8 ++++++++ 3 files changed, 22 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/ardenvale_paladin.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/mystical_dispute.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/rally_for_the_throne.txt diff --git a/forge-gui/res/cardsfolder/upcoming/ardenvale_paladin.txt b/forge-gui/res/cardsfolder/upcoming/ardenvale_paladin.txt new file mode 100644 index 00000000000..74fbc6bddca --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/ardenvale_paladin.txt @@ -0,0 +1,6 @@ +Name:Ardenvale Paladin +ManaCost:3 W +Types:Creature Human Knight +PT:2/5 +K:etbCounter:P1P1:1:Adamant$ White:Adamant — If at least three white mana was spent to cast this spell, CARDNAME enters the battlefield with a +1/+1 counter on it. +Oracle:Adamant — If at least three white mana was spent to cast this spell, Ardenvale Paladin enters the battlefield with a +1/+1 counter on it. diff --git a/forge-gui/res/cardsfolder/upcoming/mystical_dispute.txt b/forge-gui/res/cardsfolder/upcoming/mystical_dispute.txt new file mode 100644 index 00000000000..2bc300fc49a --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/mystical_dispute.txt @@ -0,0 +1,8 @@ +Name:Mystical Dispute +ManaCost:2 U +Types:Instant +S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ XBlue | Relative$ True | EffectZone$ All | Description$ CARDNAME costs {2} less to cast if it targets a blue spell. +SVar:XBlue:Count$Compare CheckTgt GE1.2.0 +SVar:CheckTgt:Targeted$Valid Card.Blue +A:SP$ Counter | Cost$ 2 U | TargetType$ Spell | TgtPrompt$ Select target spell | ValidTgts$ Card | UnlessCost$ 3 | References$ XBlue,CheckTgt | SpellDescription$ This spell costs {2} less to cast if it targets a blue spell. Counter target spell unless its controller pays {3}. +Oracle:This spell costs {2} less to cast if it targets a blue spell.\nCounter target spell unless its controller pays {3}. diff --git a/forge-gui/res/cardsfolder/upcoming/rally_for_the_throne.txt b/forge-gui/res/cardsfolder/upcoming/rally_for_the_throne.txt new file mode 100644 index 00000000000..38416eb5e4d --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/rally_for_the_throne.txt @@ -0,0 +1,8 @@ +Name:Rally for the Throne +ManaCost:2 W +Types:Instant +A:SP$ Token | Cost$ 2 W | TokenAmount$ 2 | TokenScript$ w_1_1_human | TokenOwner$ You | LegacyImage$ w 1 1 human eld | SubAbility$ DBGainLife | SpellDescription$ Create two 1/1 white Human creature tokens. Adamant — If at least three white mana was spent to cast this spell, you gain 1 life for each creature you control. +SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ Y | ConditionCheckSVar$ X | References$ X,Y +SVar:X:Count$Adamant.White.1.0 +SVar:Y:Count$Valid Creature.YouCtrl +Oracle:Create two 1/1 white Human creature tokens.\nAdamant — If at least three white mana was spent to cast this spell, you gain 1 life for each creature you control. From d56568b4997ffdf7cb47d9c9b641fa6cdb323e7f Mon Sep 17 00:00:00 2001 From: swordshine Date: Tue, 17 Sep 2019 15:22:19 +0800 Subject: [PATCH 30/47] Add Cauldron's Gift --- .../java/forge/game/ability/effects/ChangeZoneEffect.java | 5 ++++- forge-gui/res/cardsfolder/upcoming/cauldrons_gift.txt | 7 +++++++ 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 forge-gui/res/cardsfolder/upcoming/cauldrons_gift.txt diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java index 7debeb1d96a..128c49d24a8 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java @@ -980,7 +980,10 @@ public class ChangeZoneEffect extends SpellAbilityEffect { } c.setController(newController, game.getNextTimestamp()); } - + if (sa.hasParam("WithCounters")) { + String[] parse = sa.getParam("WithCounters").split("_"); + c.addEtbCounter(CounterType.getType(parse[0]), Integer.parseInt(parse[1]), player); + } if (sa.hasParam("Transformed")) { if (c.isDoubleFaced()) { c.changeCardState("Transform", null); diff --git a/forge-gui/res/cardsfolder/upcoming/cauldrons_gift.txt b/forge-gui/res/cardsfolder/upcoming/cauldrons_gift.txt new file mode 100644 index 00000000000..da233a0b65b --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/cauldrons_gift.txt @@ -0,0 +1,7 @@ +Name:Cauldron's Gift +ManaCost:4 B +Types:Sorcery +A:SP$ Mill | Cost$ 4 B | NumCards$ 4 | Defined$ You | SubAbility$ DBChangeZone | ConditionCheckSVar$ X | References$ X | SpellDescription$ Adamant — If at least three black mana was spent to cast this spell, put the top four cards of your library into your graveyard. You may choose a creature card in your graveyard. If you do, return it to the battlefield with an additional +1/+1 counter on it. +SVar:DBChangeZone:DB$ ChangeZone | Origin$ Graveyard | Destination$ Battlefield | ChangeType$ Creature.YouOwn | Hidden$ True | ChangeNum$ 1 | WithCounters$ P1P1_1 +SVar:X:Count$Adamant.Black.1.0 +Oracle:Adamant — If at least three black mana was spent to cast this spell, put the top four cards of your library into your graveyard.\nYou may choose a creature card in your graveyard. If you do, return it to the battlefield with an additional +1/+1 counter on it. From 2d9d53a19dd41acc8126ad0c2d20441280ac9356 Mon Sep 17 00:00:00 2001 From: swordshine Date: Tue, 17 Sep 2019 20:45:25 +0800 Subject: [PATCH 31/47] Update Hollow One --- .../src/main/java/forge/game/ability/AbilityUtils.java | 9 +++------ .../src/main/java/forge/game/cost/CostAdjustment.java | 3 +++ forge-gui/res/cardsfolder/h/hollow_one.txt | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java index f8abf7b00b0..eb8ac91c253 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java @@ -462,12 +462,9 @@ public class AbilityUtils { players.remove(game.getPhaseHandler().getPlayerTurn()); val = CardFactoryUtil.playerXCount(players, calcX[1], card); } - else if (hType.startsWith("PropertyYou") && !(ability instanceof SpellAbility)) { - // Related to the controller of the card with ability when the ability is static (or otherwise not a SpellAbility) - // TODO: This doesn't work in situations when the controller of the card is different from the spell caster - // (e.g. opponent's Hollow One exiled by Hostage Taker - cost reduction will not work in this scenario, requires - // a more significant rework). - players.add(card.getController()); + else if (hType.startsWith("PropertyYou") && ability instanceof SpellAbility) { + // Hollow One + players.add(((SpellAbility) ability).getActivatingPlayer()); val = CardFactoryUtil.playerXCount(players, calcX[1], card); } else if (hType.startsWith("Property") && ability instanceof SpellAbility) { diff --git a/forge-game/src/main/java/forge/game/cost/CostAdjustment.java b/forge-game/src/main/java/forge/game/cost/CostAdjustment.java index 554a7697404..25c4ca28ca7 100644 --- a/forge-game/src/main/java/forge/game/cost/CostAdjustment.java +++ b/forge-game/src/main/java/forge/game/cost/CostAdjustment.java @@ -381,6 +381,9 @@ public class CostAdjustment { } else if ("Undaunted".equals(amount)) { value = card.getController().getOpponents().size(); } else if (staticAbility.hasParam("Relative")) { + // TODO: update cards with "This spell costs X less to cast...if you..." + // The caster is sa.getActivatingPlayer() + // cards like Hostage Taker can cast spells from other players. value = AbilityUtils.calculateAmount(hostCard, amount, sa); } else { value = AbilityUtils.calculateAmount(hostCard, amount, staticAbility); diff --git a/forge-gui/res/cardsfolder/h/hollow_one.txt b/forge-gui/res/cardsfolder/h/hollow_one.txt index feccc64423e..a5899c928f7 100644 --- a/forge-gui/res/cardsfolder/h/hollow_one.txt +++ b/forge-gui/res/cardsfolder/h/hollow_one.txt @@ -2,8 +2,8 @@ Name:Hollow One ManaCost:5 Types:Artifact Creature Golem PT:4/4 -S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ Y | EffectZone$ All | Description$ CARDNAME costs {2} less to cast for each card you've cycled or discarded this turn. +S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ Y | Relative$ True | EffectZone$ All | Description$ This spell costs {2} less to cast for each card you've cycled or discarded this turn. K:Cycling:2 SVar:Y:PlayerCountPropertyYou$CardsDiscardedThisTurn/Twice SVar:Picture:http://www.wizards.com/global/images/magic/general/hollow_one.jpg -Oracle:Hollow One costs {2} less to cast for each card you've cycled or discarded this turn.\nCycling {2} ({2}, Discard this card: Draw a card.) \ No newline at end of file +Oracle:This spell costs {2} less to cast for each card you've cycled or discarded this turn.\nCycling {2} ({2}, Discard this card: Draw a card.) From cf9a72fc42dff1e0a98e623c992e4ccbd5a890c7 Mon Sep 17 00:00:00 2001 From: swordshine Date: Wed, 18 Sep 2019 10:24:04 +0800 Subject: [PATCH 32/47] Add Once Upon a Time --- .../forge/game/ability/effects/RestartGameEffect.java | 1 + .../src/main/java/forge/game/card/CardFactoryUtil.java | 5 +++++ forge-game/src/main/java/forge/game/player/Player.java | 9 ++++++++- forge-gui/res/cardsfolder/upcoming/once_upon_a_time.txt | 7 +++++++ 4 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 forge-gui/res/cardsfolder/upcoming/once_upon_a_time.txt diff --git a/forge-game/src/main/java/forge/game/ability/effects/RestartGameEffect.java b/forge-game/src/main/java/forge/game/ability/effects/RestartGameEffect.java index 4641d05d75f..61848eba1f3 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/RestartGameEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/RestartGameEffect.java @@ -70,6 +70,7 @@ public class RestartGameEffect extends SpellAbilityEffect { player.setStartingLife(psc.getStartingLife()); player.setPoisonCounters(0, sa.getHostCard()); + player.resetSpellCastThisGame(); player.setLandsPlayedLastTurn(0); player.resetLandsPlayedThisTurn(); player.resetInvestigatedThisTurn(); diff --git a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java index dde9459e34d..4490a81a8e4 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -917,6 +917,10 @@ public class CardFactoryUtil { return doXMath(cc.getSurveilThisTurn(), m, c); } + if (sq[0].equals("YouCastThisGame")) { + return doXMath(cc.getSpellsCastThisGame(), m, c); + } + if (sq[0].equals("FirstSpellTotalManaSpent")) { try{ return doXMath(c.getFirstSpellAbility().getTotalManaSpent(), m, c); @@ -926,6 +930,7 @@ public class CardFactoryUtil { } } + if (sq[0].equals("StormCount")) { return doXMath(game.getStack().getSpellsCastThisTurn().size() - 1, m, c); } diff --git a/forge-game/src/main/java/forge/game/player/Player.java b/forge-game/src/main/java/forge/game/player/Player.java index f03e5a075a7..b7aec94aa23 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -84,6 +84,7 @@ public class Player extends GameEntity implements Comparable { private final Map assignedDamage = Maps.newHashMap(); private final Map assignedCombatDamage = Maps.newHashMap(); private int spellsCastThisTurn = 0; + private int spellsCastThisGame = 0; private int spellsCastLastTurn = 0; private int landsPlayedThisTurn = 0; private int landsPlayedLastTurn = 0; @@ -2209,6 +2210,7 @@ public class Player extends GameEntity implements Comparable { } public final void addSpellCastThisTurn() { spellsCastThisTurn++; + spellsCastThisGame++; achievementTracker.spellsCast++; if (spellsCastThisTurn > achievementTracker.maxStormCount) { achievementTracker.maxStormCount = spellsCastThisTurn; @@ -2220,7 +2222,12 @@ public class Player extends GameEntity implements Comparable { public final void setSpellsCastLastTurn(int num) { spellsCastLastTurn = num; } - + public final int getSpellsCastThisGame() { + return spellsCastThisGame; + } + public final void resetSpellCastThisGame() { + spellsCastThisGame = 0; + } public final int getLifeGainedByTeamThisTurn() { return lifeGainedByTeamThisTurn; } diff --git a/forge-gui/res/cardsfolder/upcoming/once_upon_a_time.txt b/forge-gui/res/cardsfolder/upcoming/once_upon_a_time.txt new file mode 100644 index 00000000000..13c6d4baada --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/once_upon_a_time.txt @@ -0,0 +1,7 @@ +Name:Once Upon a Time +ManaCost:1 G +Types:Instant +S:Mode$ Continuous | Affected$ Card.Self | EffectZone$ All | CheckSVar$ X | SVarCompare$ EQ0 | MayPlay$ True | MayPlayWithoutManaCost$ True | Description$ If this spell is the first spell you've cast this game, you may cast it without paying its mana cost. +SVar:X:Count$YouCastThisGame +A:SP$ Dig | Cost$ 1 G | DigNum$ 5 | ChangeNum$ 1 | Optional$ True | ForceRevealToController$ True | ChangeValid$ Card.Creature,Card.Land | RestRandomOrder$ True | SpellDescription$ Look at the top five cards of your library. You may reveal a creature or land card from among them and put it into your hand. Put the rest on the bottom of your library in a random order. +Oracle:If this spell is the first spell you've cast this game, you may cast it without paying its mana cost.\nLook at the top five cards of your library. You may reveal a creature or land card from among them and put it into your hand. Put the rest on the bottom of your library in a random order. From 87fffa0dddf330623cd3f5f4c2974bd7590434d3 Mon Sep 17 00:00:00 2001 From: swordshine Date: Wed, 18 Sep 2019 12:29:05 +0800 Subject: [PATCH 33/47] Add Dance of the Manse --- .../src/main/java/forge/game/card/CardFactoryUtil.java | 1 - forge-gui/res/cardsfolder/upcoming/dance_of_the_manse.txt | 8 ++++++++ 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 forge-gui/res/cardsfolder/upcoming/dance_of_the_manse.txt diff --git a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java index 4490a81a8e4..d31f304b90b 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -930,7 +930,6 @@ public class CardFactoryUtil { } } - if (sq[0].equals("StormCount")) { return doXMath(game.getStack().getSpellsCastThisTurn().size() - 1, m, c); } diff --git a/forge-gui/res/cardsfolder/upcoming/dance_of_the_manse.txt b/forge-gui/res/cardsfolder/upcoming/dance_of_the_manse.txt new file mode 100644 index 00000000000..b9d1a86e96f --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/dance_of_the_manse.txt @@ -0,0 +1,8 @@ +Name:Dance of the Manse +ManaCost:X W U +Types:Sorcery +A:SP$ ChangeZone | Cost$ X W U | Announce$ X | Origin$ Graveyard | Destination$ Battlefield | ValidTgts$ Artifact.cmcLEX,Enchantment.cmcLEX | TgtPrompt$ Select target artifact or enchantment in your graveyard | TargetMin$ 0 | TargetMax$ X | SubAbility$ DBAnimate | SpellDescription$ Return up to X target artifact and/or non-Aura enchantment cards with converted mana cost X or less from your graveyard to the battlefield. If X is 6 or more, those permanents are 4/4 creatures in addition to their other types. +SVar:DBAnimate:DB$ Animate | Defined$ Targeted | Types$ Creature | Power$ 4 | Toughness$ 4 | Permanent$ True | ConditionCheckSVar$ X | ConditionSVarCompare$ GE6 | References$ X +SVar:X:Count$xPaid +AI:RemoveDeck:All +Oracle:Return up to X target artifact and/or non-Aura enchantment cards each with converted mana cost X or less from your graveyard to the battlefield. If X is 6 or more, those permanents are 4/4 creatures in addition to their other types. From 97ebdff83528708ca55c9cd77d23f76af3d65bd6 Mon Sep 17 00:00:00 2001 From: swordshine Date: Wed, 18 Sep 2019 12:46:52 +0800 Subject: [PATCH 34/47] Add Clackbridge Troll --- .../res/cardsfolder/upcoming/clackbridge_troll.txt | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/clackbridge_troll.txt diff --git a/forge-gui/res/cardsfolder/upcoming/clackbridge_troll.txt b/forge-gui/res/cardsfolder/upcoming/clackbridge_troll.txt new file mode 100644 index 00000000000..8a640e10fc2 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/clackbridge_troll.txt @@ -0,0 +1,13 @@ +Name:Clackbridge Troll +ManaCost:3 B B +Types:Creature Troll +PT:8/8 +K:Haste +K:Trample +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TripleGoat | TriggerDescription$ When CARDNAME enters the battlefield, target opponent creates three 0/1 white Goat creature tokens. +SVar:TripleGoat:DB$ Token | TokenAmount$ 3 | TokenScript$ w_0_1_goat | LegacyImage$ w 0 1 goat eld | ValidTgts$ Opponent | TokenOwner$ Targeted +T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | Execute$ TrigTap | TriggerZones$ Battlefield | TriggerDescription$ At the beginning of combat on your turn, any opponent may sacrifice a creature. If a player does, tap CARDNAME, you gain 3 life, and you draw a card. +SVar:TrigTap:DB$ Tap | Defined$ Self | SubAbility$ DBDraw | UnlessCost$ Sac<1/Creature> | UnlessPayer$ Player.Opponent | UnlessSwitched$ True | UnlessAI$ LifeLE10 | UnlessResolveSubs$ WhenPaid | SubAbility$ DBGainLife +SVar:DBGainLife:DB$ GainLife | LifeAmount$ 3 | SubAbility$ DBDraw +SVar:DBDraw:DB$ Draw | NumCards$ 1 | Defined$ You +Oracle:Trample, haste\nWhen Clackbridge Troll enters the battlefield, target opponent creates three 0/1 white Goat creature tokens.\nAt the beginning of combat on your turn, any opponent may sacrifice a creature. If a player does, tap Clackbridge Troll, you gain 3 life, and you draw a card. From 9d6aa6b7559f1b8d703a35bb74cdfa62f28e3c90 Mon Sep 17 00:00:00 2001 From: Peter Date: Wed, 18 Sep 2019 10:58:06 +0200 Subject: [PATCH 35/47] Updated german translation Contributed by twosat at https://www.slightlymagic.net/forum/viewtopic.php?f=26&t=23215#p230047 --- forge-gui/res/languages/de-DE.properties | 184 +++++++++++------------ 1 file changed, 92 insertions(+), 92 deletions(-) diff --git a/forge-gui/res/languages/de-DE.properties b/forge-gui/res/languages/de-DE.properties index 71643ddb8f7..5142a6a34ce 100644 --- a/forge-gui/res/languages/de-DE.properties +++ b/forge-gui/res/languages/de-DE.properties @@ -176,11 +176,11 @@ nlEnableMusic=Hintergrundmusik während des Spiels nlAltSoundSystem=Nutze alternatives Sound-System (nur nutzen, wenn es Probleme mit fehlenden Geräuschen gibt) KeyboardShortcuts=Tastenkombinationen # VSubmenuAchievements.java -lblAchievements=Erfolge +lblAchievements=Errungenschaften # VSubmenuDownloaders.java btnDownloadSetPics=Bilder(LQ) Sets herunterladen +btnDownloadPicsHQ=Bilder(HQ Karten herunterladen (Sehr langsam!) btnDownloadPics=Bilder(LQ) Karten herunterladen -btnDownloadPicsHQ=Bilder(HQ) Karten herunterladen (Sehr langsam!) btnDownloadQuestImages=Bilder für Quests herunterladen btnDownloadAchievementImages=Bilder für Erfolge herunterladen btnReportBug=Einen Fehler melden @@ -191,7 +191,7 @@ btnHowToPlay=Wie man spielt btnDownloadPrices=Kartenpreise herunterladen btnLicensing=Lizenzhinweis lblDownloadPics=Lädt ein Standardbild pro Karte. -lblDownloadPicsHQ=Lädt ein Standardbild (HQ) pro Karte. +lblDownloadPicsHQ=Lädt ein HQ-Standardbild pro Karte. lblDownloadSetPics=Lädt alle Bilder pro Karte. Eines für jedes Set, in welchem die Karte auftauchte. lblDownloadQuestImages=Lädt die Bilder für den Quest-Modus. lblDownloadAchievementImages=Lädt die Bilder zu den möglichen Erfolgen. Verschönert die Trophäensammlung. @@ -389,7 +389,7 @@ lblVanguardDesc=Jeder Spieler hat eine eigene spielbeeinflussende \"Avatar\"-Kar lblCommander=Commander lblCommanderDesc=Jeder Spieler hat eine legendäre \"General\"-Karte, welche (fast) jederzeit gespielt werden kann und die Farben des Decks bestimmt. lblOathbreaker=Eidbrecher -lblOathbreakerDesc=Jeder Spieler hat eine Planeswalker-Karte als "Eidbrecher", die jederzeit gewirkt werden kann und die Deckfarben festlegt. Jeder Spieler hat auch einen Signaturzauber, der gewirkt werden kann, wenn sein Eidbrecher auf dem Schlachtfeld ist. +lblOathbreakerDesc=Jeder Spieler hat eine Plainswalker-Karte als seinen "Eidbrecher", welche jederzeit gespielt werdeb kann und die Farben des Decks festlegt. Jeder Spieler hat außerdem noch einnen "Signatur"-Spruch, welcher gespielt werden kann, solange der Eidbrecher im Spiel ist. lblTinyLeaders=Kleine Anführer lblTinyLeadersDesc=Jeder Spieler hat eine legendäre \"General\"-Karte, welche (fast) jederzeit gespielt werden kann und die Farben des Decks bestimmt. Alle Karten haben umgewandelte Manakosten von max. 3. lblBrawl=Brawl @@ -523,12 +523,12 @@ lblQuestDesc2=Erstelle und verbessere dein Deck mit Karten aus deiner wachsenden lblQuestDesc3=Dann wechsle zu Duellen und Herausforderungen um durch Kämpfe weitere Karten zu erhalten. lblBuildaNewDeck=Erstelle ein neues Deck #Decktype.java -lblCustomUserDecks=Benutzererzeugte Decks +lblCustomUserDecks=Selbsterstelles Decks lblConstructedDecks=Konstruierte Decks lblCommanderDecks=Commander Decks lblRandomCommanderDecks=Zufälliges Commander Deck lblRandomCommanderCard-basedDecks=Zufälliges Commander Deck (kartenbasiert) -lblOathbreakerDecks=Eidbrecher-Decks +lblOathbreakerDecks=Oathbreaker-Decks lblTinyLeadersDecks=Kleine-Anführer-Decks lblBrawlDecks=Brawl Decks lblSchemeDecks=Komplott-Decks @@ -785,8 +785,8 @@ lblfromdeck=vom Deck lbltosideboard=zum Sideboard lblfromsideboard=vom Sideboard lblascommander=als Kommandeur -lblasoathbreaker=als Eidbrecher -lblassignaturespell=als Signaturzauber +lblasoathbreaker=als "Eidbrecher" +lblassignaturespell=als "Signatur"-Spruch lblasavatar=als Avatar lblfromschemedeck=vom Komplottdeck lblfromplanardeck=vom Weltendeck @@ -796,7 +796,7 @@ lbltoplanardeck=zum Weltendeck lbltoconspiracydeck=zum Verschwörungsdeck lblMove=Verschieben #VDock.java -lblDock=Symbolleiste +lblDock=Anhängen lblViewDeckList=Zeige Deckliste lblRevertLayout=Layout zurücksetzen lblOpenLayout=Lade Layout @@ -849,8 +849,8 @@ ttbtnRandDeck5=Erzeugt konstuiertes Deck in fünf Farben lblCurrentDeck2=aktuelles Deck lblUntitled=Unbenannt #VPrompt.java -lblPrompt=Meldungen -lblGameSetup=Spielvorbereitung +lblPrompt=Abfrage +lblGameSetup=Spielaufbau #ColumnDef.java lblAIStatus=KI-Status lblCMC=UMK @@ -885,88 +885,88 @@ ttToughness=Widerstand ttType=Typ #HomeScreen.java lblNewGame=Neues Spiel -lblLoadGame=Spiel laden -lblPlayOnline=Online spielen -lblSettings=Spieleinstellungen +lblLoadGame=Lade Spiel +lblPlayOnline=Spiele im Netz +lblSettings=Einstellungen #SettingsPage.java -lblAutomaticBugReports=Automatic Bug Reports -lblBattlefieldTextureFiltering=Battlefield Texture Filtering -lblCompactListItems=Compact List Items -lblCompactTabs=Compact Tabs -lblCardOverlays=Card Overlays -lblDisableCardEffect=Disable Card 'Effect' Images -lblDynamicBackgroundPlanechase=Dynamic Background Planechase -lblGameplayOptions=Gameplay Options -lblGeneralSettings=General Settings -lblHotSeatMode=Hot Seat Mode -lblLandscapeMode=Landscape Mode -lblLater=Later -lblMinimizeScreenLock=Minimize on Screen Lock -lblOrderGraveyard=Order Graveyard -lblRestartForge=Restart Forge -lblRestartForgeDescription=You must restart Forge for this change to take effect. -lblRotateZoomPlanesPhenomena=Rotate Zoom Image of Planes/Phenomena -lblRotateZoomSplit=Rotate Zoom Image of Split Cards -lblShowCardIDOverlays=Show Card ID Overlays -lblShowCardManaCostOverlays=Show Card Mana Cost Overlays -lblShowCardNameOverlays=Show Card Name Overlays -lblShowCardOverlays=Show Card Overlays -lblShowCardPTOverlays=Show Card P/T Overlays -lblShowMatchBackground=Show Match Background -lblVibrateAfterLongPress=Vibrate After Long Press -lblVibrateWhenLosingLife=Vibrate When Losing Life -lblVibrationOptions=Vibration Options -nlAutomaticBugReports=Automatically send bug reports to the developers, without prompting. -nlBattlefieldTextureFiltering=Filter card art on battlefield to make it less pixelated on large screens (restart required, may reduce performance). -nlCompactListItems=Show only a single line of text for cards and decks on all list views by default. -nlCompactTabs=Show smaller tabs on the top of tab page screens (such as this screen). -nlDisableCardEffect=Disable the zoomed image for the 'Effect' cards. -nlDynamicBackgroundPlanechase=Use current plane images as background (Planes Card images must be on the cache/pics/planechase folder). -nlHotSeatMode=When starting a game with 2 human players, use single prompt to control both players. -nlLandscapeMode=Use landscape (horizontal) orientation for app instead of portrait (vertical). -nlMinimizeScreenLock=Minimize Forge when screen is locked (enable if you experience graphic glitches after locking your screen). -nlOrderGraveyard=Determines when to allow to order cards going to graveyard (never/always/only with relevant cards). -nlRotateZoomPlanesPhenomena=Rotates the zoomed image of Plane or Phenomenon cards. -nlRotateZoomSplit=Rotates the zoomed image of split cards. -nlShowCardIDOverlays=Show id overlays for cards, otherwise they're hidden. -nlShowCardManaCostOverlays=Show mana cost overlays for cards, otherwise they're hidden. -nlShowCardNameOverlays=Show name overlays for cards, otherwise they're hidden. -nlShowCardOverlays=Show name, mana cost, p/t, and id overlays for cards, otherwise they're hidden. -nlShowCardPTOverlays=Show power/toughness/loyalty overlays for cards, otherwise they're hidden. -nlShowMatchBackground=Show match background image on battlefield, otherwise background texture shown instead. -nlTheme=Sets the theme that determines how display components are skinned. -nlVibrateAfterLongPress=Enable quick vibration to signify a long press, such as for card zooming. -nlVibrateWhenLosingLife=Enable vibration when your player loses life or takes damage during a game. +lblAutomaticBugReports=Automatischer Fehlerbericht +lblBattlefieldTextureFiltering=Texturenfilter Spielfeld +lblCompactListItems=kompakte Liste +lblCompactTabs=kompakte Tabs +lblCardOverlays=Karten-Overlays +lblDisableCardEffect=Karten-"Effekt"-Anzeige abschalten +lblDynamicBackgroundPlanechase=Weltenjagd dynamischer Hintergrund +lblGameplayOptions=Spiel-Optionen +lblGeneralSettings=allgem. Einstellungen +lblHotSeatMode=Hot-Seat-Modus +lblLandscapeMode=Querformat +lblLater=Später +lblMinimizeScreenLock=Minimiere bei Bildschirmsperre +lblOrderGraveyard=Friedhof-Reihenfolge +lblRestartForge=Neustart +lblRestartForgeDescription=Um die Änderung zu übernehmen mußt du Forge neu starten. +lblRotateZoomPlanesPhenomena=Drehe die Bilder von Welten und Phänomenen +lblRotateZoomSplit=Drehe vergößerte Bilder von geteilten Karten +lblShowCardIDOverlays=Blende die ID der Karten ein +lblShowCardManaCostOverlays=Blende die Manakosten der Karten ein +lblShowCardNameOverlays=Blende den Namen der Karten ein +lblShowCardOverlays=Zeige Karten-Einblendungen an +lblShowCardPTOverlays=Blende Stärke und Widerstand ein +lblShowMatchBackground=Zeige Duell hintergund an +lblVibrateAfterLongPress=Vibieren nach langem Tastendruck +lblVibrateWhenLosingLife=Vibrieren nach Lebenspunktverlust +lblVibrationOptions=Vibrationsoptionen +nlAutomaticBugReports=Sende automatisch einen Fehlerbericht, ohne Bestätigung. +nlBattlefieldTextureFiltering=Nutze den Texturenfilter um Kartenbilder auf großen Anzeigen weniger grob wirken zu lassen (bedingt Neustart). +nlCompactListItems=Zeige in allen Listen für jeder Karte und jedes Deck nur eine Zeile. +nlCompactTabs=Nutz kompaktere Karteikartenreiter (Tabulatoren/Tabs). +nlDisableCardEffect=Schaltet Effekt-Anzeigen für vergrößerte Karten ab. +nlDynamicBackgroundPlanechase=Nutzt das Bild der aktuellen Weltenkarte als Hintergrund (Die Bilder müssen sich im Pfad cache/pics/planechase befinden). +nlHotSeatMode=Bei Start eines Spiels mit zwei menschlichen Spielern nutzen beide die selben Steuerelemente! +nlLandscapeMode=Nutze die horizontale Anzeige statt der vertikalen. +nlMinimizeScreenLock=Minimiere Forge wenn der Sperrbildschirm aktiviert wird. Hilft manchmal bei Grafikproblemen in diesem Zusammenhang. +nlOrderGraveyard=Entscheidet, wann auf die Reihenfolge, in welcher Karten auf den Friedhof wandern, geachtet wird. (Niemals, immer oder nur wenn bestimmte Karten es nötig machen.) +nlRotateZoomPlanesPhenomena=Rotiert die vergrößerte Anzeige von Welten- und Phänomen-Karten. +nlRotateZoomSplit=Rotiert die vergrößerte Anzeige von geteilten Karten. +nlShowCardIDOverlays=Blendet die ID-Nummer über die Karten. +nlShowCardManaCostOverlays=Blendet die Manakosten über die Karten. +nlShowCardNameOverlays=Blendet die Namen über die Karten. +nlShowCardOverlays=Aktiviert die Einblendungen übder den Karten. +nlShowCardPTOverlays=Blendet die Stärke und Widerstand über die Karten. +nlShowMatchBackground=Zeige Bilder im Spielfeldhintergrund. +nlTheme=Wähle ein Thema um die Bildschirmanzeigen anzupassen. +nlVibrateAfterLongPress=Aktiviert Vabration bei langen Druck, z.B. beim Zoomen. +nlVibrateWhenLosingLife=Aktiviert eine Vibration bei jedem Lebenspunktverlust. #MatchScreen.java -lblPlayers=Players -lblLog=Log -lblDev=Dev -lblStack=Stack -lblMustWaitPriority=Must wait for priority... +lblPlayers=Spieler +lblLog=Bericht +lblDev=Entw. +lblStack=Stapel +lblMustWaitPriority=Warte auf Priorität... #FDeckEditor.java -lblImportFromClipboard=Import from Clipboard -lblSaveAs=Save As... -lblNameNewCopyDeck=Enter name for new copy of deck -lblRenameDeck=Rename Deck -lblNewNameDeck=Enter new name for deck -lblDeleteDeck=Delete Deck -lblDelete=Delete -lblConfirmDelete=Are you sure you want to delete -lblNameNewDeck=Enter name for new deck -lblSaveChangesCurrentDeck=Save changes to current deck? -lblAddFavorites=Add to Favorites -lblRemoveFavorites=Remove from Favorites -lblChangePreferredArt=Change Preferred Art -lblSelectPreferredArt=Select preferred art for -lblTo=to +lblImportFromClipboard=Aus Zwischenablage +lblSaveAs=Speichern als... +lblNameNewCopyDeck=Name für das neue Deck +lblRenameDeck=Umbenennen +lblNewNameDeck=Gib eine neuen Namen ein +lblDeleteDeck=Deck löschen +lblDelete=Löschen +lblConfirmDelete=Willst du wirklich löschen +lblNameNewDeck=Gib einen Namen ein +lblSaveChangesCurrentDeck=Änderungen sichern? +lblAddFavorites=Zu den Favoriten hinzufügen +lblRemoveFavorites=Von den Favoriten entfernen +lblChangePreferredArt=Setze bevorzugte Form +lblSelectPreferredArt=Wähle bevorzugte Form für +lblTo=zu lblAvatar=Avatar -lblCards=Cards -lblPlanes=Planes -lblSchemes=Schemes -lblToMainDeck=to Main Deck -lblHowMany=how many? -lblInventory=Inventory -lblCollection=Collection -lblCatalog=Catalog -lblCommanders=Commanders -lblOathbreakers=Oathbreakers \ No newline at end of file +lblCards=Karten +lblPlanes=Welten +lblSchemes=Verschwörungen +lblToMainDeck=zum Haupt-Deck +lblHowMany=wie viel? +lblInventory=Inhaltsverzeichnis +lblCollection=Sammlung +lblCatalog=Katalog +lblCommanders=Komandeure +lblOathbreakers=Eidbrecher From f89cc76a76da15e382a01b9520b2796408a64236 Mon Sep 17 00:00:00 2001 From: swordshine Date: Wed, 18 Sep 2019 17:45:30 +0800 Subject: [PATCH 36/47] Update Once Upon a Time --- forge-gui/res/cardsfolder/upcoming/once_upon_a_time.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/upcoming/once_upon_a_time.txt b/forge-gui/res/cardsfolder/upcoming/once_upon_a_time.txt index 13c6d4baada..d4a0ca42d5f 100644 --- a/forge-gui/res/cardsfolder/upcoming/once_upon_a_time.txt +++ b/forge-gui/res/cardsfolder/upcoming/once_upon_a_time.txt @@ -1,7 +1,7 @@ Name:Once Upon a Time ManaCost:1 G Types:Instant -S:Mode$ Continuous | Affected$ Card.Self | EffectZone$ All | CheckSVar$ X | SVarCompare$ EQ0 | MayPlay$ True | MayPlayWithoutManaCost$ True | Description$ If this spell is the first spell you've cast this game, you may cast it without paying its mana cost. +S:Mode$ Continuous | Affected$ Card.Self | EffectZone$ All | CheckSVar$ X | SVarCompare$ EQ0 | MayPlay$ True | MayPlayDontGrantZonePermissions$ True | MayPlayWithoutManaCost$ True | Description$ If this spell is the first spell you've cast this game, you may cast it without paying its mana cost. SVar:X:Count$YouCastThisGame A:SP$ Dig | Cost$ 1 G | DigNum$ 5 | ChangeNum$ 1 | Optional$ True | ForceRevealToController$ True | ChangeValid$ Card.Creature,Card.Land | RestRandomOrder$ True | SpellDescription$ Look at the top five cards of your library. You may reveal a creature or land card from among them and put it into your hand. Put the rest on the bottom of your library in a random order. Oracle:If this spell is the first spell you've cast this game, you may cast it without paying its mana cost.\nLook at the top five cards of your library. You may reveal a creature or land card from among them and put it into your hand. Put the rest on the bottom of your library in a random order. From c6a312211003aa08fd37e37edac06b9c4b89800d Mon Sep 17 00:00:00 2001 From: swordshine Date: Wed, 18 Sep 2019 18:53:51 +0800 Subject: [PATCH 37/47] Update a reference --- forge-gui/res/cardsfolder/d/dark_petition.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/res/cardsfolder/d/dark_petition.txt b/forge-gui/res/cardsfolder/d/dark_petition.txt index 43559e5a5b4..c9e04c820f2 100644 --- a/forge-gui/res/cardsfolder/d/dark_petition.txt +++ b/forge-gui/res/cardsfolder/d/dark_petition.txt @@ -2,7 +2,7 @@ Name:Dark Petition ManaCost:3 B B Types:Sorcery A:SP$ ChangeZone | Cost$ 3 B B | Origin$ Library | Destination$ Hand | ChangeType$ Card | ChangeNum$ 1 | Mandatory$ True | SubAbility$ DBMana | SpellDescription$ Search your library for a card and put that card into your hand. Then shuffle your library. Spell mastery — If there are two or more instant and/or sorcery cards in your graveyard, add {B}{B}{B}. -SVar:DBMana:DB$ Mana | ConditionCheckSVar$ X | ConditionSVarCompare$ GE2 | Produced$ B | Amount$ 3 +SVar:DBMana:DB$ Mana | ConditionCheckSVar$ X | References$ X | ConditionSVarCompare$ GE2 | Produced$ B | Amount$ 3 SVar:X:Count$ValidGraveyard Instant.YouOwn,Sorcery.YouOwn #TODO: Improve the tutoring logic for the AI. Currently will generally look for the most expensive castable thing in the library (which can, of course, be used to advantage in properly constructed AI decks). AI:RemoveDeck:Random From 0fe6b3b52b4f27782db58b4c7864cd15e77f46f5 Mon Sep 17 00:00:00 2001 From: swordshine Date: Wed, 18 Sep 2019 20:03:56 +0800 Subject: [PATCH 38/47] Add Once and Future --- forge-gui/res/cardsfolder/e/endless_atlas.txt | 2 +- forge-gui/res/cardsfolder/f/force_of_negation.txt | 1 - forge-gui/res/cardsfolder/g/grinning_totem.txt | 4 ++-- forge-gui/res/cardsfolder/p/psychic_theft.txt | 2 +- .../res/cardsfolder/upcoming/once_and_future.txt | 12 ++++++++++++ 5 files changed, 16 insertions(+), 5 deletions(-) create mode 100644 forge-gui/res/cardsfolder/upcoming/once_and_future.txt diff --git a/forge-gui/res/cardsfolder/e/endless_atlas.txt b/forge-gui/res/cardsfolder/e/endless_atlas.txt index 7cede437bbe..1bb6efb56da 100644 --- a/forge-gui/res/cardsfolder/e/endless_atlas.txt +++ b/forge-gui/res/cardsfolder/e/endless_atlas.txt @@ -1,6 +1,6 @@ Name:Endless Atlas ManaCost:2 Types:Artifact -A:AB$ Draw | Cost$ 2 T | CheckSvar$ X | SVarCompare$ GE3 | References$ X | SpellDescription$ Draw a card. Activate this ability only if you control three or more lands with the same name. +A:AB$ Draw | Cost$ 2 T | CheckSVar$ X | SVarCompare$ GE3 | References$ X | SpellDescription$ Draw a card. Activate this ability only if you control three or more lands with the same name. SVar:X:Count$MostCardName Land.YouCtrl Oracle:2, T: Draw a card. Activate this ability only if you control three or more lands with the same name. diff --git a/forge-gui/res/cardsfolder/f/force_of_negation.txt b/forge-gui/res/cardsfolder/f/force_of_negation.txt index 0bfe3e7f8b1..5c84d3dc9e6 100644 --- a/forge-gui/res/cardsfolder/f/force_of_negation.txt +++ b/forge-gui/res/cardsfolder/f/force_of_negation.txt @@ -3,5 +3,4 @@ ManaCost:1 U U Types:Instant A:SP$ Counter | Cost$ 1 U U | TargetType$ Spell | TgtPrompt$ Select target nonCreature Spell | ValidTgts$ Card.nonCreature | Destination$ Exile | SpellDescription$ Counter target noncreature spell. If that spell is countered this way, exile it instead of putting it into its owner's graveyayrd. SVar:AltCost:Cost$ ExileFromHand<1/Card.Blue> | OpponentTurn$ True | Description$ If it's not your turn, you may exile a blue card from your hand rather than pay this spell's mana cost. -Svar:Picture:http://mythicspoiler.com/mh1/cards/forceofnegation.jpg Oracle:If it's not your turn, you may exile a blue card from your hand rather than pay this spell's mana cost.\nCounter target noncreature spell. If that spell is countered this way, exile it instead of putting it into its owner's graveyayrd. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/g/grinning_totem.txt b/forge-gui/res/cardsfolder/g/grinning_totem.txt index 8194fd08f06..f5f2bce00a6 100644 --- a/forge-gui/res/cardsfolder/g/grinning_totem.txt +++ b/forge-gui/res/cardsfolder/g/grinning_totem.txt @@ -4,13 +4,13 @@ Types:Artifact A:AB$ ChangeZone | Cost$ 2 T Sac<1/CARDNAME> | ValidTgts$ Player.Opponent | IsCurse$ True | Chooser$ You | Origin$ Library | Destination$ Exile | ChangeType$ Card | ChangeNum$ 1 | IsCurse$ True | RememberChanged$ True | SubAbility$ TotemEffect | SpellDescription$ Search target opponent's library for a card and exile it. Then that player shuffles their library. Until the beginning of your next upkeep, you may play that card. At the beginning of your next upkeep, if you haven't played it, put it into its owner's graveyard. | StackDescription$ SpellDescription SVar:TotemEffect:DB$ Effect | StaticAbilities$ STGrinning | Duration$ Permanent | RememberObjects$ Remembered | Triggers$ TrigDuration,TrigReturn,TrigLandPlayed,TrigCast | SVars$ DBDuration,ActiveTotem,RemoveEffect,DBReturn | SubAbility$ DBResetSVar # Even though the Effect is "Permanent", it's not really permanent -SVar:DBResetSVar:DB$ StoreSvar | SVar$ ActiveTotem | Type$ Number | Expression$ 1 | SubAbility$ DBCleanup +SVar:DBResetSVar:DB$ StoreSVar | SVar$ ActiveTotem | Type$ Number | Expression$ 1 | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:ActiveTotem:Number$1 SVar:STGrinning:Mode$ Continuous | Affected$ Card.IsRemembered+OppOwn | MayPlay$ True | EffectZone$ Command | AffectedZone$ Exile | CheckSVar$ ActiveTotem | Description$ Until the beginning of your next upkeep, you may play that card. # Turn off the duration at the beginning of the upkeep statically SVar:TrigDuration:Mode$ Phase | Phase$ Upkeep | Player$ You | Static$ True | TriggerZones$ Command | Execute$ DBDuration -SVar:DBDuration:DB$ StoreSvar | SVar$ ActiveTotem | Type$ Number | Expression$ 0 +SVar:DBDuration:DB$ StoreSVar | SVar$ ActiveTotem | Type$ Number | Expression$ 0 # Return the card as a normal trigger SVar:TrigReturn:Mode$ Phase | Phase$ Upkeep | Player$ You | Static$ True | TriggerZones$ Command | Execute$ DBReturn SVar:DBReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Graveyard | SubAbility$ RemoveEffect diff --git a/forge-gui/res/cardsfolder/p/psychic_theft.txt b/forge-gui/res/cardsfolder/p/psychic_theft.txt index ee8aa45d7e8..a771d08d6de 100644 --- a/forge-gui/res/cardsfolder/p/psychic_theft.txt +++ b/forge-gui/res/cardsfolder/p/psychic_theft.txt @@ -4,7 +4,7 @@ Types:Sorcery A:SP$ ChangeZone | Cost$ 1 U | ValidTgts$ Player | Origin$ Hand | Destination$ Exile | ChangeType$ Instant,Sorcery | IsCurse$ True | Chooser$ You | ChangeNum$ 1 | RememberChanged$ True | SubAbility$ TheftEffect | SpellDescription$ Target player reveals their hand. You choose an instant or sorcery card from it and exile that card. You may cast that card for as long as it remains exiled. At the beginning of the next end step, if you haven't cast the card, return it to its owner's hand. | StackDescription$ SpellDescription SVar:TheftEffect:DB$ Effect | StaticAbilities$ STThieving | Duration$ Permanent | RememberObjects$ Remembered | Triggers$ TrigReturn,TrigCast | SVars$ ActivePsychic,RemoveEffect,DBReturn | SubAbility$ DBResetSVar # Even though the Effect is "Permanent", it's not really permanent -SVar:DBResetSVar:DB$ StoreSvar | SVar$ ActivePsychic | Type$ Number | Expression$ 1 | SubAbility$ DBCleanup +SVar:DBResetSVar:DB$ StoreSVar | SVar$ ActivePsychic | Type$ Number | Expression$ 1 | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:ActivePsychic:Number$1 SVar:STThieving:Mode$ Continuous | Affected$ Card.IsRemembered+OppOwn | MayPlay$ True | EffectZone$ Command | AffectedZone$ Exile | CheckSVar$ ActivePsychic | Description$ You may cast that card for as long as it remains exiled. diff --git a/forge-gui/res/cardsfolder/upcoming/once_and_future.txt b/forge-gui/res/cardsfolder/upcoming/once_and_future.txt new file mode 100644 index 00000000000..aac1b9d2b82 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/once_and_future.txt @@ -0,0 +1,12 @@ +Name:Once and Future +ManaCost:3 G +Types:Instant +A:SP$ ChangeZone | Cost$ 3 G | Origin$ Graveyard | Destination$ Hand | TgtPrompt$ Select target card in your graveyard | ValidTgts$ Card.YouOwn | SubAbility$ DBPump | SpellDescription$ Return target card from your graveyard to your hand. Put up to one other target card from your graveyard on top of your library. Exile CARDNAME. Adamant — If at least three green mana was spent to cast this spell, instead return those cards to your hand and exile CARDNAME. +SVar:DBPump:DB$ Pump | TargetMin$ 0 | TargetMax$ 1 | TgtZone$ Graveyard | TgtPrompt$ Choose target card in your graveyard | ValidTgts$ Card.YouOwn | TargetUnique$ True | RememberObjects$ ThisTargetedCard | SubAbility$ DBReturn +SVar:DBReturn:DB$ ChangeZone | Origin$ Graveyard | Destination$ Library | Hidden$ True | Defined$ Remembered | ConditionCheckSVar$ X | ConditionSVarCompare$ EQ0 | References$ X | SubAbility$ DBReturn2 +SVar:DBReturn2:DB$ ChangeZone | Origin$ Graveyard | Destination$ Hand | Hidden$ True | Defined$ Remembered | ConditionCheckSVar$ X | References$ X | SubAbility$ DBExile +SVar:DBExile:DB$ ChangeZone | Defined$ Self | Origin$ Stack | Destination$ Exile | SubAbility$ DBCleanup +SVar:DBCleanup:DB$ Cleanup | ClearRemebered$ True +SVar:X:Count$Adamant.Green.1.0 +AI:RemoveDeck:Random +Oracle:Return target card from your graveyard to your hand. Put up to one other target card from your graveyard on top of your library. Exile Once and Future.\nAdamant — If at least three green mana was spent to cast this spell, instead return those cards to your hand and exile Once and Future. From 9ab35769d59d4307c9c810a44d85a06c7db1662e Mon Sep 17 00:00:00 2001 From: Ryan1729 Date: Wed, 18 Sep 2019 21:34:19 -0600 Subject: [PATCH 39/47] fix restricted cards not being restricted to one. --- forge-gui/src/main/java/forge/deck/DeckgenUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/src/main/java/forge/deck/DeckgenUtil.java b/forge-gui/src/main/java/forge/deck/DeckgenUtil.java index 67dd9217b04..2ccc98d7e08 100644 --- a/forge-gui/src/main/java/forge/deck/DeckgenUtil.java +++ b/forge-gui/src/main/java/forge/deck/DeckgenUtil.java @@ -282,7 +282,7 @@ public class DeckgenUtil { } List restrictedCardsAdded = new ArrayList<>(); for (PaperCard c:selectedCards){ - if (format.getRestrictedCards().contains(c.getName())&&!restrictedCardsAdded.contains(c)){ + if (format.getRestrictedCards().contains(c.getName())&&!restrictedCardsAdded.contains(c.getName())){ playsetList.add(c); restrictedCardsAdded.add(c.getName()); continue; From 3573a27bdb31f637a90d8f384039c1d7a45250dc Mon Sep 17 00:00:00 2001 From: swordshine Date: Thu, 19 Sep 2019 12:16:41 +0800 Subject: [PATCH 40/47] Add some forgescribed cards --- .../res/cardsfolder/upcoming/acclaimed_contender.txt | 7 +++++++ .../cardsfolder/upcoming/archon_of_absolution.txt | 8 ++++++++ forge-gui/res/cardsfolder/upcoming/barge_in.txt | 6 ++++++ forge-gui/res/cardsfolder/upcoming/bartered_cow.txt | 10 ++++++++++ .../res/cardsfolder/upcoming/blacklance_paragon.txt | 8 ++++++++ .../res/cardsfolder/upcoming/castle_ardenvale.txt | 10 ++++++++++ .../res/cardsfolder/upcoming/castle_embereth.txt | 9 +++++++++ .../res/cardsfolder/upcoming/castle_garenbrig.txt | 8 ++++++++ .../res/cardsfolder/upcoming/castle_locthwain.txt | 10 ++++++++++ .../res/cardsfolder/upcoming/castle_vantress.txt | 8 ++++++++ .../res/cardsfolder/upcoming/escape_to_the_wilds.txt | 12 ++++++++++++ .../cardsfolder/upcoming/ferocity_of_the_wilds.txt | 6 ++++++ .../upcoming/linden_the_steadfast_queen.txt | 8 ++++++++ .../cardsfolder/upcoming/syr_alin_the_lions_claw.txt | 8 ++++++++ .../upcoming/syr_faren_the_hengehammer.txt | 8 ++++++++ 15 files changed, 126 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/acclaimed_contender.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/archon_of_absolution.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/barge_in.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/bartered_cow.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/blacklance_paragon.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/castle_ardenvale.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/castle_embereth.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/castle_garenbrig.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/castle_locthwain.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/castle_vantress.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/escape_to_the_wilds.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/ferocity_of_the_wilds.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/linden_the_steadfast_queen.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/syr_alin_the_lions_claw.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/syr_faren_the_hengehammer.txt diff --git a/forge-gui/res/cardsfolder/upcoming/acclaimed_contender.txt b/forge-gui/res/cardsfolder/upcoming/acclaimed_contender.txt new file mode 100644 index 00000000000..1b3a5160860 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/acclaimed_contender.txt @@ -0,0 +1,7 @@ +Name:Acclaimed Contender +ManaCost:2 W +Types:Creature Human Knight +PT:3/3 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | IsPresent$ Knight.YouCtrl+Other | Execute$ TrigDig | TriggerDescription$ When CARDNAME enters the battlefield, if you control another Knight, look at the top five cards of your library. You may reveal a Knight, Aura, Equipment, or legendary artifact card from among them and put it into your hand. Put the rest on the bottom of your library in a random order. +SVar:TrigDig:DB$ Dig | DigNum$ 5 | ChangeNum$ 1 | ChangeValid$ Card.Knight,Aura,Equipment,Artifact.Legendary | RestRandomOrder$ True +Oracle:When Acclaimed Contender enters the battlefield, if you control another Knight, look at the top five cards of your library. You may reveal a Knight, Aura, Equipment, or legendary artifact card from among them and put it into your hand. Put the rest on the bottom of your library in a random order. diff --git a/forge-gui/res/cardsfolder/upcoming/archon_of_absolution.txt b/forge-gui/res/cardsfolder/upcoming/archon_of_absolution.txt new file mode 100644 index 00000000000..25c9de6f2c4 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/archon_of_absolution.txt @@ -0,0 +1,8 @@ +Name:Archon of Absolution +ManaCost:3 W +Types:Creature Archon +PT:3/2 +K:Flying +K:Protection from white +S:Mode$ CantAttackUnless | ValidCard$ Creature | Target$ You,Planeswalker.YouCtrl | Cost$ 1 | Description$ Creatures can't attack you or a planeswalker you control unless their controller pays {1} for each of those creatures. +Oracle:Flying\nProtection from white (This creature can't be blocked, targeted, dealt damage, enchanted, or equipped by anything white.)\nCreatures can't attack you or a planeswalker you control unless their controller pays {1} for each of those creatures. diff --git a/forge-gui/res/cardsfolder/upcoming/barge_in.txt b/forge-gui/res/cardsfolder/upcoming/barge_in.txt new file mode 100644 index 00000000000..07a14c80710 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/barge_in.txt @@ -0,0 +1,6 @@ +Name:Barge In +ManaCost:R +Types:Instant +A:SP$ Pump | Cost$ R | ValidTgts$ Creature.attacking | TgtPrompt$ Select target attacking creature | NumAtt$ +2 | NumDef$ +2 | SubAbility$ DBPump | SpellDescription$ Target attacking creature gets +2/+2 until end of turn. Each attacking non-Human creature gains trample until end of turn. +SVar:DBPump:DB$ PumpAll | ValidCards$ Creature.nonHuman+attacking | KW$ Trample +Oracle:Target attacking creature gets +2/+2 until end of turn. Each attacking non-Human creature gains trample until end of turn. diff --git a/forge-gui/res/cardsfolder/upcoming/bartered_cow.txt b/forge-gui/res/cardsfolder/upcoming/bartered_cow.txt new file mode 100644 index 00000000000..323eac840f0 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/bartered_cow.txt @@ -0,0 +1,10 @@ +Name:Bartered Cow +ManaCost:3 W +Types:Creature Ox +PT:3/3 +T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Battlefield | Destination$ Graveyard | TriggerController$ TriggeredCardController | Execute$ TrigToken | TriggerDescription$ When CARDNAME dies or blocks you discard it, create a Food token. (It's an artifact with "{2}, {T}, Sacrifice this artifact: You gain 3 life.") +T:Mode$ Discarded | ValidCard$ Card.Self | Execute$ TrigToken | Secondary$ True | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies or blocks you discard it, create a Food token. (It's an artifact with "{2}, {T}, Sacrifice this artifact: You gain 3 life.") +SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_food_sac | TokenOwner$ You | LegacyImage$ c a food sac eld +SVar:SacMe:1 +SVar:DiscardMe:3 +Oracle:When Bartered Cow dies or when you discard it, create a Food token. (It's an artifact with "{2}, {T}, Sacrifice this artifact: You gain 3 life.") diff --git a/forge-gui/res/cardsfolder/upcoming/blacklance_paragon.txt b/forge-gui/res/cardsfolder/upcoming/blacklance_paragon.txt new file mode 100644 index 00000000000..48693c7c552 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/blacklance_paragon.txt @@ -0,0 +1,8 @@ +Name:Blacklance Paragon +ManaCost:1 B +Types:Creature Human Knight +PT:3/1 +K:Flash +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPump | TriggerDescription$ When CARDNAME enters the battlefield, target Knight gains deathtouch and lifelink until end of turn. +SVar:TrigPump:DB$ Pump | ValidTgts$ Knight | TgtPrompt$ Select target Knight | KW$ Deathtouch & Lifelink +Oracle:Flash\nWhen Blacklance Paragon enters the battlefield, target Knight gains deathtouch and lifelink until end of turn. diff --git a/forge-gui/res/cardsfolder/upcoming/castle_ardenvale.txt b/forge-gui/res/cardsfolder/upcoming/castle_ardenvale.txt new file mode 100644 index 00000000000..7a11b90efd0 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/castle_ardenvale.txt @@ -0,0 +1,10 @@ +Name:Castle Ardenvale +ManaCost:no cost +Types:Land +K:ETBReplacement:Other:LandTapped +SVar:LandTapped:DB$ Tap | Defined$ Self | ETB$ True | ConditionPresent$ Plains.YouCtrl | ConditionCompare$ EQ0 | SpellDescription$ CARDNAME enters the battlefield tapped unless you control a Plains. +A:AB$ Mana | Cost$ T | Produced$ W | SpellDescription$ Add {W}. +A:AB$ Token | Cost$ 2 W W T | TokenAmount$ 1 | TokenScript$ w_1_1_human | TokenOwner$ You | LegacyImage$ w 1 1 human eld | SpellDescription$ Create a 1/1 white Human creature token. +DeckHints:Type$Human +DeckHas:Ability$Token +Oracle:Castle Ardenvale enters the battlefield tapped unless you control a Plains.\n{T}: Add {W}.\n{2}{W}{W}, {T}: Create a 1/1 white Human creature token. diff --git a/forge-gui/res/cardsfolder/upcoming/castle_embereth.txt b/forge-gui/res/cardsfolder/upcoming/castle_embereth.txt new file mode 100644 index 00000000000..1a506611e16 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/castle_embereth.txt @@ -0,0 +1,9 @@ +Name:Castle Embereth +ManaCost:no cost +Types:Land +K:ETBReplacement:Other:LandTapped +SVar:LandTapped:DB$ Tap | Defined$ Self | ETB$ True | ConditionPresent$ Mountain.YouCtrl | ConditionCompare$ EQ0 | SpellDescription$ CARDNAME enters the battlefield tapped unless you control a Mountain. +A:AB$ Mana | Cost$ T | Produced$ R | SpellDescription$ Add {R}. +SVar:PlayMain1:TRUE +A:AB$ PumpAll | Cost$ 1 R R T | ValidCards$ Creature.YouCtrl | NumAtt$ +1 | SpellDescription$ Creatures you control get +1/+0 until end of turn. +Oracle:Castle Embereth enters the battlefield tapped unless you control a Mountain.\n{T}: Add {R}.\n{1}{R}{R}, {T}: Creatures you control get +1/+0 until end of turn. diff --git a/forge-gui/res/cardsfolder/upcoming/castle_garenbrig.txt b/forge-gui/res/cardsfolder/upcoming/castle_garenbrig.txt new file mode 100644 index 00000000000..0a5a271a550 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/castle_garenbrig.txt @@ -0,0 +1,8 @@ +Name:Castle Garenbrig +ManaCost:no cost +Types:Land +K:ETBReplacement:Other:LandTapped +SVar:LandTapped:DB$ Tap | Defined$ Self | ETB$ True | ConditionPresent$ Forest.YouCtrl | ConditionCompare$ EQ0 | SpellDescription$ CARDNAME enters the battlefield tapped unless you control a Forest. +A:AB$ Mana | Cost$ T | Produced$ G | SpellDescription$ Add {G}. +A:AB$ Mana | Cost$ 2 G G T | Produced$ G | Amount$ 6 | RestrictValid$ Spell.Creature,Activated.Creature | SpellDescription$ Add six {G}. Spend this mana only to cast creature spells or activate abilities of creatures. +Oracle:Castle Garenbrig enters the battlefield tapped unless you control a Forest.\n{T}: Add {G}.\n{2}{G}{G}, {T}: Add six {G}. Spend this mana only to cast creature spells or activate abilities of creatures. diff --git a/forge-gui/res/cardsfolder/upcoming/castle_locthwain.txt b/forge-gui/res/cardsfolder/upcoming/castle_locthwain.txt new file mode 100644 index 00000000000..3112cad52ad --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/castle_locthwain.txt @@ -0,0 +1,10 @@ +Name:Castle Locthwain +ManaCost:no cost +Types:Land +K:ETBReplacement:Other:LandTapped +SVar:LandTapped:DB$ Tap | Defined$ Self | ETB$ True | ConditionPresent$ Swamp.YouCtrl | ConditionCompare$ EQ0 | SpellDescription$ CARDNAME enters the battlefield tapped unless you control a Swamp. +A:AB$ Mana | Cost$ T | Produced$ B | SpellDescription$ Add {B}. +A:AB$ Draw | Cost$ 1 B B T | NumCards$ 1 | SpellDescription$ Draw a card, then you lose life equal to the number of cards in your hand. | SubAbility$ DBLoseLife +SVar:DBLoseLife:DB$ LoseLife | LifeAmount$ X | References$ X +SVar:X:Count$InYourHand +Oracle:Castle Locthwain enters the battlefield tapped unless you control a Swamp.\n{T}: Add {B}.\n{1}{B}{B}, {T}: Draw a card, then you lose life equal to the number of cards in your hand. diff --git a/forge-gui/res/cardsfolder/upcoming/castle_vantress.txt b/forge-gui/res/cardsfolder/upcoming/castle_vantress.txt new file mode 100644 index 00000000000..15be04c43b1 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/castle_vantress.txt @@ -0,0 +1,8 @@ +Name:Castle Vantress +ManaCost:no cost +Types:Land +K:ETBReplacement:Other:LandTapped +SVar:LandTapped:DB$ Tap | Defined$ Self | ETB$ True | ConditionPresent$ Island.YouCtrl | ConditionCompare$ EQ0 | SpellDescription$ CARDNAME enters the battlefield tapped unless you control an Island. +A:AB$ Mana | Cost$ T | Produced$ U | SpellDescription$ Add {U}. +A:AB$ Scry | Cost$ 2 U U T | ScryNum$ 2 | SpellDescription$ Scry 2. +Oracle:Castle Vantress enters the battlefield tapped unless you control an Island.\n{T}: Add {U}.\n{2}{U}{U}, {T}: Scry 2. diff --git a/forge-gui/res/cardsfolder/upcoming/escape_to_the_wilds.txt b/forge-gui/res/cardsfolder/upcoming/escape_to_the_wilds.txt new file mode 100644 index 00000000000..ef196ed4c5e --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/escape_to_the_wilds.txt @@ -0,0 +1,12 @@ +Name:Escape to the Wilds +ManaCost:3 R G +Types:Sorcery +A:SP$ Mill | Cost$ 3 R G | Destination$ Exile | NumCards$ 5 | RememberMilled$ True | SubAbility$ DBEffect | SpellDescription$ Exile the top five cards of your library. You may play cards exiled this way until the end of your next turn. +SVar:DBEffect:DB$ Effect | RememberObjects$ RememberedCard | ForgetOnMoved$ Exile | StaticAbilities$ Play | Duration$ UntilTheEndOfYourNextTurn | SubAbility$ DBEffect2 +SVar:Play:Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered | AffectedZone$ Exile | Description$ You may play cards exiled this the end of your next turn. +SVar:DBEffect2$ Effect | Cost$ 3 R G | Name$ CARDNAME Effect | StaticAbilities$ Exploration | AILogic$ Always | SpellDescription$ You may play an additional land this turn. | SubAbility$ DBCleanup +SVar:Exploration:Mode$ Continuous | Affected$ You | AddKeyword$ AdjustLandPlays:1 | EffectZone$ Command | Description$ You may play an additional land this turn. +SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True +SVar:NeedsToPlayVar:ZZ GE1 +SVar:ZZ:Count$ValidHand Land.YouOwn +Oracle:Exile the top five cards of your library. You may play cards exiled this way until the end of your next turn.\nYou may play an additional land this turn. diff --git a/forge-gui/res/cardsfolder/upcoming/ferocity_of_the_wilds.txt b/forge-gui/res/cardsfolder/upcoming/ferocity_of_the_wilds.txt new file mode 100644 index 00000000000..6d09ef063be --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/ferocity_of_the_wilds.txt @@ -0,0 +1,6 @@ +Name:Ferocity of the Wilds +ManaCost:2 R +Types:Enchantment +S:Mode$ Continuous | Affected$ Creature.nonHuman+attacking+YouCtrl | AddPower$ 1 | AddKeyword$ Trample | Description$ Attacking non-Human creatures you control get +1/+0 and have trample. +SVar:PlayMain1:TRUE +Oracle:Attacking non-Human creatures you control get +1/+0 and have trample. diff --git a/forge-gui/res/cardsfolder/upcoming/linden_the_steadfast_queen.txt b/forge-gui/res/cardsfolder/upcoming/linden_the_steadfast_queen.txt new file mode 100644 index 00000000000..9936a7111b3 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/linden_the_steadfast_queen.txt @@ -0,0 +1,8 @@ +Name:Linden, the Steadfast Queen +ManaCost:W W W +Types:Legendary Creature Human Noble +PT:3/3 +K:Vigilance +T:Mode$ Attacks | ValidCard$ Creature.White+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigGainLife | TriggerDescription$ Whenever a white creature you control attacks, you gain 1 life. +SVar:TrigGainLife:DB$GainLife | LifeAmount$ 1 | Defined$ You +Oracle:Vigilance\nWhenever a white creature you control attacks, you gain 1 life. diff --git a/forge-gui/res/cardsfolder/upcoming/syr_alin_the_lions_claw.txt b/forge-gui/res/cardsfolder/upcoming/syr_alin_the_lions_claw.txt new file mode 100644 index 00000000000..641984a1f42 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/syr_alin_the_lions_claw.txt @@ -0,0 +1,8 @@ +Name:Syr Alin, the Lion's Claw +ManaCost:3 W W +Types:Legendary Creature Human Knight +PT:4/4 +K:First Strike +T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigPumpAll | TriggerDescription$ Whenever CARDNAME attacks, other creatures you control get +1/+1 until end of turn. +SVar:TrigPumpAll:DB$ PumpAll | ValidCards$ Creature.Other+YouCtrl | NumAtt$ +1 | NumDef$ +1 +Oracle:First strike\nWhenever Syr Alin, the Lion's Claw attacks, other creatures you control get +1/+1 until end of turn. diff --git a/forge-gui/res/cardsfolder/upcoming/syr_faren_the_hengehammer.txt b/forge-gui/res/cardsfolder/upcoming/syr_faren_the_hengehammer.txt new file mode 100644 index 00000000000..3415ec81776 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/syr_faren_the_hengehammer.txt @@ -0,0 +1,8 @@ +Name:Syr Faren, the Hengehammer +ManaCost:G G +Types:Legendary Creature Human Knight +PT:2/2 +T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ Whenever CARDNAME attacks, another target creature gets +X/+X until end of turn, where X is CARDNAME's power. +SVar:TrigPump:DB$ Pump | ValidTgts$ Creature.attacking+Other | TgtPrompt$ Select another target attacking creature | NumAtt$ X | NumDef$ X | References$ X +SVar:X:Count$CardPower +Oracle:Whenever Syr Faren, the Hengehammer attacks, another target attacking creature gets +X/+X until end of turn, where X is Syr Faren's power. From 91abbcd3c5ed458787f60b68f652f6728bc3cfd6 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Thu, 19 Sep 2019 04:31:42 +0000 Subject: [PATCH 41/47] Fix setloadingaMatch prematurely, if the startgame is null there must be an error/showdialog happened. --- .../src/forge/screens/constructed/LobbyScreen.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/forge-gui-mobile/src/forge/screens/constructed/LobbyScreen.java b/forge-gui-mobile/src/forge/screens/constructed/LobbyScreen.java index d9b8c2dc78d..b111fa139f4 100644 --- a/forge-gui-mobile/src/forge/screens/constructed/LobbyScreen.java +++ b/forge-gui-mobile/src/forge/screens/constructed/LobbyScreen.java @@ -272,13 +272,13 @@ public abstract class LobbyScreen extends LaunchScreen implements ILobbyView { updateDeck(i);//TODO: Investigate why AI names cannot be overriden? updateName(i, getPlayerName(i)); } - //set this so we cant get any multi/rapid tap on start button - Forge.setLoadingaMatch(true); FThreads.invokeInBackgroundThread(new Runnable() { //must call startGame in background thread in case there are alerts @Override public void run() { final Runnable startGame = lobby.startGame(); if (startGame != null) { + //set this so we cant get any multi/rapid tap on start button + Forge.setLoadingaMatch(true); FThreads.invokeInEdtLater(new Runnable() { @Override public void run() { From 1b9bce51657bebd25b5ecfa39ca6819795291b24 Mon Sep 17 00:00:00 2001 From: CCTV-1 Date: Thu, 19 Sep 2019 13:53:55 +0800 Subject: [PATCH 42/47] translation Forge.java --- forge-gui-mobile/src/forge/Forge.java | 23 ++++++++++++++++++----- forge-gui/res/languages/de-DE.properties | 4 ++++ forge-gui/res/languages/en-US.properties | 6 +++++- forge-gui/res/languages/es-ES.properties | 6 +++++- forge-gui/res/languages/zh-CN.properties | 6 +++++- 5 files changed, 37 insertions(+), 8 deletions(-) diff --git a/forge-gui-mobile/src/forge/Forge.java b/forge-gui-mobile/src/forge/Forge.java index 372d19a39c1..3523df7e579 100644 --- a/forge-gui-mobile/src/forge/Forge.java +++ b/forge-gui-mobile/src/forge/Forge.java @@ -28,6 +28,7 @@ import forge.sound.SoundSystem; import forge.toolbox.*; import forge.util.Callback; import forge.util.FileUtil; +import forge.util.Localizer; import forge.util.Utils; import java.util.ArrayList; @@ -96,6 +97,8 @@ public class Forge implements ApplicationListener { textureFiltering = prefs.getPrefBoolean(FPref.UI_LIBGDX_TEXTURE_FILTERING); + final Localizer localizer = Localizer.getInstance(); + //load model on background thread (using progress bar to report progress) FThreads.invokeInBackgroundThread(new Runnable() { @Override @@ -106,13 +109,13 @@ public class Forge implements ApplicationListener { FModel.initialize(splashScreen.getProgressBar(), null); - splashScreen.getProgressBar().setDescription("Loading fonts..."); + splashScreen.getProgressBar().setDescription(localizer.getMessage("lblLoadingFonts")); FSkinFont.preloadAll(); - splashScreen.getProgressBar().setDescription("Loading card translations..."); + splashScreen.getProgressBar().setDescription(localizer.getMessage("lblLoadingCardTranslations")); CardTranslation.preloadTranslation(prefs.getPref(FPref.UI_LANGUAGE)); - splashScreen.getProgressBar().setDescription("Finishing startup..."); + splashScreen.getProgressBar().setDescription(localizer.getMessage("lblFinishingStartup")); Gdx.app.postRunnable(new Runnable() { @Override @@ -248,11 +251,16 @@ public class Forge implements ApplicationListener { } } }; + + final Localizer localizer = Localizer.getInstance(); + if (silent) { callback.run(true); } else { - FOptionPane.showConfirmDialog("Are you sure you wish to restart Forge?", "Restart Forge", "Restart", "Cancel", callback); + FOptionPane.showConfirmDialog( + localizer.getMessage("lblAreYouSureYouWishRestartForge"), localizer.getMessage("lblRestartForge"), + localizer.getMessage("lblRestart"), localizer.getMessage("lblCancel"), callback); } } @@ -268,11 +276,16 @@ public class Forge implements ApplicationListener { } } }; + + final Localizer localizer = Localizer.getInstance(); + if (silent) { callback.run(true); } else { - FOptionPane.showConfirmDialog("Are you sure you wish to exit Forge?", "Exit Forge", "Exit", "Cancel", callback); + FOptionPane.showConfirmDialog( + localizer.getMessage("lblAreYouSureYouWishExitForge"), localizer.getMessage("lblExitForge"), + localizer.getMessage("lblExit"), localizer.getMessage("lblCancel"), callback); } } diff --git a/forge-gui/res/languages/de-DE.properties b/forge-gui/res/languages/de-DE.properties index 5142a6a34ce..994f8550aed 100644 --- a/forge-gui/res/languages/de-DE.properties +++ b/forge-gui/res/languages/de-DE.properties @@ -970,3 +970,7 @@ lblCollection=Sammlung lblCatalog=Katalog lblCommanders=Komandeure lblOathbreakers=Eidbrecher +#Forge.java +lblLoadingFonts=Loading fonts... +lblLoadingCardTranslations=Loading card translations... +lblFinishingStartup=Finishing startup... \ No newline at end of file diff --git a/forge-gui/res/languages/en-US.properties b/forge-gui/res/languages/en-US.properties index f94a7edc84c..86f39905691 100644 --- a/forge-gui/res/languages/en-US.properties +++ b/forge-gui/res/languages/en-US.properties @@ -969,4 +969,8 @@ lblInventory=Inventory lblCollection=Collection lblCatalog=Catalog lblCommanders=Commanders -lblOathbreakers=Oathbreakers \ No newline at end of file +lblOathbreakers=Oathbreakers +#Forge.java +lblLoadingFonts=Loading fonts... +lblLoadingCardTranslations=Loading card translations... +lblFinishingStartup=Finishing startup... \ No newline at end of file diff --git a/forge-gui/res/languages/es-ES.properties b/forge-gui/res/languages/es-ES.properties index 5e916608fcd..968fbf9fc48 100644 --- a/forge-gui/res/languages/es-ES.properties +++ b/forge-gui/res/languages/es-ES.properties @@ -969,4 +969,8 @@ lblInventory=Inventario lblCollection=Colección lblCatalog=Catálogo lblCommanders=Commanders -lblOathbreakers=Oathbreakers \ No newline at end of file +lblOathbreakers=Oathbreakers +#Forge.java +lblLoadingFonts=Loading fonts... +lblLoadingCardTranslations=Loading card translations... +lblFinishingStartup=Finishing startup... \ No newline at end of file diff --git a/forge-gui/res/languages/zh-CN.properties b/forge-gui/res/languages/zh-CN.properties index b23a8408ba6..a588789c5db 100644 --- a/forge-gui/res/languages/zh-CN.properties +++ b/forge-gui/res/languages/zh-CN.properties @@ -969,4 +969,8 @@ lblInventory=库存 lblCollection=珍藏 lblCatalog=目录 lblCommanders=指挥官 -lblOathbreakers=破誓者 \ No newline at end of file +lblOathbreakers=破誓者 +#Forge.java +lblLoadingFonts=加载字体中 +lblLoadingCardTranslations=加载卡牌翻译中 +lblFinishingStartup=完成启动 \ No newline at end of file From ee53353501f9dab6d8ef2addd6ae9f49fa22d7fa Mon Sep 17 00:00:00 2001 From: swordshine Date: Thu, 19 Sep 2019 16:20:11 +0800 Subject: [PATCH 43/47] More forgescribed cards --- .../cardsfolder/upcoming/fortifying_provisions.txt | 8 ++++++++ forge-gui/res/cardsfolder/upcoming/giants_skewer.txt | 9 +++++++++ .../cardsfolder/upcoming/grumgully_the_generous.txt | 7 +++++++ .../res/cardsfolder/upcoming/idyllic_grange.txt | 10 ++++++++++ forge-gui/res/cardsfolder/upcoming/loch_dragon.txt | 9 +++++++++ .../cardsfolder/upcoming/mistford_river_turtle.txt | 7 +++++++ .../res/cardsfolder/upcoming/oakhame_adversary.txt | 9 +++++++++ .../cardsfolder/upcoming/overwhelmed_apprentice.txt | 8 ++++++++ .../res/cardsfolder/upcoming/witchs_cottage.txt | 2 +- .../cardsfolder/upcoming/yorvo_lord_of_garenbrig.txt | 12 ++++++++++++ forge-gui/res/tokenscripts/g_7_7_giant.txt | 6 ++++++ 11 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 forge-gui/res/cardsfolder/upcoming/fortifying_provisions.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/giants_skewer.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/grumgully_the_generous.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/idyllic_grange.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/loch_dragon.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/mistford_river_turtle.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/oakhame_adversary.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/overwhelmed_apprentice.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/yorvo_lord_of_garenbrig.txt create mode 100644 forge-gui/res/tokenscripts/g_7_7_giant.txt diff --git a/forge-gui/res/cardsfolder/upcoming/fortifying_provisions.txt b/forge-gui/res/cardsfolder/upcoming/fortifying_provisions.txt new file mode 100644 index 00000000000..6db938168b6 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/fortifying_provisions.txt @@ -0,0 +1,8 @@ +Name:Fortifying Provisions +ManaCost:2 W +Types:Enchantment +S:Mode$ Continuous | Affected$ Creature.YouCtrl | AddToughness$ 1 | Description$ Creatures you control get +0/+1. +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a Food token. (It's an artifact with "{2}, {T}, Sacrifice this artifact: You gain 3 life.") +SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_food_sac | TokenOwner$ You | LegacyImage$ c a food sac eld +SVar:PlayMain1:TRUE +Oracle:Creatures you control get +0/+1.\nWhen Fortifying Provisions enters the battlefield, create a Food token. (It's an artifact with "{2}, {T}, Sacrifice this artifact: You gain 3 life.") diff --git a/forge-gui/res/cardsfolder/upcoming/giants_skewer.txt b/forge-gui/res/cardsfolder/upcoming/giants_skewer.txt new file mode 100644 index 00000000000..d2ecf989060 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/giants_skewer.txt @@ -0,0 +1,9 @@ +Name:Giant's Skewer +ManaCost:1 B +Types:Artifact Equipment +S:Mode$ Continuous | Affected$ Creature.EquippedBy | AddPower$ 2 | AddToughness$ 1 | Description$ Equipped creature gets +2/+1. +T:Mode$ DamageDone | ValidSource$ Creature.EquippedBy | ValidTarget$ Creature | CombatDamage$ True | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ Whenever equipped creature deals combat damage to a creature, create a Food token. (It's an artifact with "{2}, {T}, Sacrifice this artifact: You gain 3 life.") +SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_food_sac | TokenOwner$ You | LegacyImage$ c a food sac eld +DeckHas:Ability$LifeGain +K:Equip:3 +Oracle:Equipped creature gets +2/+1.\nWhenever equipped creature deals combat damage to a creature, create a Food token. (It's an artifact with "{2}, {T}, Sacrifice this artifact: You gain 3 life.")\nEquip {3} ({3}: Attach to target creature you control. Equip only as a sorcery.) diff --git a/forge-gui/res/cardsfolder/upcoming/grumgully_the_generous.txt b/forge-gui/res/cardsfolder/upcoming/grumgully_the_generous.txt new file mode 100644 index 00000000000..ab653e8e3c8 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/grumgully_the_generous.txt @@ -0,0 +1,7 @@ +Name:Grumgully, the Generous +ManaCost:1 R G +Types:Legendary Creature Goblin Shaman +PT:3/3 +K:ETBReplacement:Other:AddExtraCounter:Mandatory:Battlefield:Creature.YouCtrl+Other+nonHuman +SVar:AddExtraCounter:DB$ PutCounter | ETB$ True | Defined$ ReplacedCard | CounterType$ P1P1 | CounterNum$ 1 | SpellDescription$ Each other non-Human creature you controls enters the battlefield with an additional +1/+1 counter on it. +Oracle:Each other non-Human creature you controls enters the battlefield with an additional +1/+1 counter on it. diff --git a/forge-gui/res/cardsfolder/upcoming/idyllic_grange.txt b/forge-gui/res/cardsfolder/upcoming/idyllic_grange.txt new file mode 100644 index 00000000000..bb0830870b0 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/idyllic_grange.txt @@ -0,0 +1,10 @@ +Name:Idyllic Grange +ManaCost:no cost +Types:Land Plains +R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplaceWith$ LandTapped | Description$ CARDNAME enters the battlefield tapped unless you control three or more other Plains. +SVar:LandTapped:DB$ Tap | Defined$ Self | ETB$ True | ConditionCheckSVar$ ETBCheckSVar | ConditionSVarCompare$ LT3 | References$ ETBCheckSVar | SubAbility$ MoveToPlay +SVar:MoveToPlay:DB$ ChangeZone | Defined$ Self | Origin$ All | Destination$ Battlefield +SVar:ETBCheckSVar:Count$Valid Plains.YouCtrl+Other +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self+untapped | Execute$ TrigPutCounter | TriggerDescription$ When CARDNAME enters the battlefield untapped, put a +1/+1 counter on target creature you control. +SVar:TrigPutCounter:DB$ PutCounter | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | CounterType$ P1P1 | CounterNum$ 1 +Oracle:({T}: Add {W}.)\nIdyllic Grange enters the battlefield tapped unless you control three or more other Plains.\nWhen Idyllic Grange enters the battlefield untapped, put a +1/+1 counter on target creature you control. diff --git a/forge-gui/res/cardsfolder/upcoming/loch_dragon.txt b/forge-gui/res/cardsfolder/upcoming/loch_dragon.txt new file mode 100644 index 00000000000..97faf198374 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/loch_dragon.txt @@ -0,0 +1,9 @@ +Name:Loch Dragon +ManaCost:U/R U/R U/R U/R +Types:Creature Dragon +PT:3/2 +K:Flying +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDraw | TriggerDescription$ Whenever CARDNAME enters the battlefield or attacks, you may discard a card. If you do, draw a card. +T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigDraw | Secondary$ True | TriggerDescription$ Whenever CARDNAME enters the battlefield or attacks, you may discard a card. If you do, draw a card. +SVar:TrigDraw:AB$ Draw | Cost$ Discard<1/Card> | NumCards$ 1 +Oracle:Flying\nWhenever Loch Dragon enters the battlefield or attacks, you may discard a card. If you do, draw a card. diff --git a/forge-gui/res/cardsfolder/upcoming/mistford_river_turtle.txt b/forge-gui/res/cardsfolder/upcoming/mistford_river_turtle.txt new file mode 100644 index 00000000000..533e41737a7 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/mistford_river_turtle.txt @@ -0,0 +1,7 @@ +Name:Mistford River Turtle +ManaCost:3 U +Types:Creature Turtle +PT:1/5 +T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ Whenever CARDNAME attacks, another target creature can't be blocked this turn. +SVar:TrigPump:DB$ Pump | ValidTgts$ Creature.nonHuman+Other+attacking | TgtPrompt$ Select another target attacking non-Human creature | KW$ HIDDEN Unblockable +Oracle:Whenever Mistford River Turtle attacks, another target attacking non-Human creature can't be blocked this turn. diff --git a/forge-gui/res/cardsfolder/upcoming/oakhame_adversary.txt b/forge-gui/res/cardsfolder/upcoming/oakhame_adversary.txt new file mode 100644 index 00000000000..f0eb3973ad3 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/oakhame_adversary.txt @@ -0,0 +1,9 @@ +Name:Oakhame Adversary +ManaCost:3 G +Types:Creature Elf Warrior +PT:2/3 +S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ 2 | EffectZone$ All | IsPresent$ Permanent.Green+OppCtrl | Description$ CARDNAME costs {2} less to cast if your opponent controls a green permanent. +K:Deathtouch +T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigDraw | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, draw a card. +SVar:TrigDraw:DB$ Draw | Defined$ You | NumCards$ 1 +Oracle:This spell costs {2} less to cast if your opponent controls a green permanent.\nDeathtouch\nWhenever Oakhame Adversary deals combat damage to a player, draw a card. diff --git a/forge-gui/res/cardsfolder/upcoming/overwhelmed_apprentice.txt b/forge-gui/res/cardsfolder/upcoming/overwhelmed_apprentice.txt new file mode 100644 index 00000000000..34dc290b974 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/overwhelmed_apprentice.txt @@ -0,0 +1,8 @@ +Name:Overwhelmed Apprentice +ManaCost:U +Types:Creature Human Wizard +PT:1/2 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigMill | TriggerDescription$ When CARDNAME enters the battlefield, each opponent puts the top two cards of their library into their graveyard. Then you 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:TrigMill:DB$ Mill | Defined$ Player.Opponent | NumCards$ 2 | SubAbility$ DBScry +SVar:DBScry:DB$ Scry | ScryNum$ 2 +Oracle:When Overwhelmed Apprentice enters the battlefield, each opponent puts the top two cards of their library into their graveyard. Then you 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.) diff --git a/forge-gui/res/cardsfolder/upcoming/witchs_cottage.txt b/forge-gui/res/cardsfolder/upcoming/witchs_cottage.txt index b6b9625fad9..f961ea09bbd 100644 --- a/forge-gui/res/cardsfolder/upcoming/witchs_cottage.txt +++ b/forge-gui/res/cardsfolder/upcoming/witchs_cottage.txt @@ -5,6 +5,6 @@ R:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplaceWith$ SVar:LandTapped:DB$ Tap | Defined$ Self | ETB$ True | ConditionCheckSVar$ ETBCheckSVar | ConditionSVarCompare$ LT3 | References$ ETBCheckSVar | SubAbility$ MoveToPlay SVar:MoveToPlay:DB$ ChangeZone | Defined$ Self | Origin$ All | Destination$ Battlefield SVar:ETBCheckSVar:Count$Valid Swamp.YouCtrl+Other -T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may put target creature card from your graveyard on top of your library. +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self+untapped | Execute$ TrigChange | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield untapped, you may put target creature card from your graveyard on top of your library. SVar:TrigChange:DB$ ChangeZone | TgtPrompt$ Choose target creature card in your graveyard | ValidTgts$ Creature.YouOwn | Origin$ Graveyard | Destination$ Library Oracle:({T}: Add {B}.)\nWitch's Cottage enters the battlefield tapped unless you control three or more other Swamps.\nWhen Witch's Cottage enters the battlefield untapped, you may put target creature card from your graveyard on top of your library. diff --git a/forge-gui/res/cardsfolder/upcoming/yorvo_lord_of_garenbrig.txt b/forge-gui/res/cardsfolder/upcoming/yorvo_lord_of_garenbrig.txt new file mode 100644 index 00000000000..06d4ac10138 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/yorvo_lord_of_garenbrig.txt @@ -0,0 +1,12 @@ +Name:Yorvo, Lord of Garenbrig +ManaCost:G G G +Types:Legendary Creature Giant Noble +PT:0/0 +K:etbCounter:P1P1:4 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.Other+YouCtrl+Green | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever another green creature enters the battlefield under your control, put a +1/+1 counter on CARDNAME. Then if that creature's power is greater than CARDNAME's power, put another +1/+1 counter on CARDNAME. +SVar:TrigPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ DBPutCounter +SVar:DBPutCounter:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 | COnditionCheckSVar$ X | ConditionSVarCompare$ GEY | References$ X,Y +SVar:X:TriggeredCard$CardPower +SVar:Y:Count$CardPower +DeckHas:Ability$Counters +Oracle:Yorvo, Lord of Garenbrig enters the battlefield with four +1/+1 counters on it.\nWhenever another green creature enters the battlefield under your control, put a +1/+1 counter on Yorvo. Then if that creature's power is greater than Yorvo's power, put another +1/+1 counter on Yorvo. diff --git a/forge-gui/res/tokenscripts/g_7_7_giant.txt b/forge-gui/res/tokenscripts/g_7_7_giant.txt new file mode 100644 index 00000000000..ab0ad7d07b6 --- /dev/null +++ b/forge-gui/res/tokenscripts/g_7_7_giant.txt @@ -0,0 +1,6 @@ +Name:Giant +Colors:green +ManaCost:no cost +PT:7/7 +Types:Creature Giant +Oracle: \ No newline at end of file From 191ffa67beac288456857bf3c0230f7225cb2f07 Mon Sep 17 00:00:00 2001 From: swordshine Date: Thu, 19 Sep 2019 16:47:13 +0800 Subject: [PATCH 44/47] More ELD cards --- forge-gui/res/cardsfolder/upcoming/redcap_raiders.txt | 7 +++++++ .../res/cardsfolder/upcoming/revenge_of_ravens.txt | 7 +++++++ .../res/cardsfolder/upcoming/stonecoil_serpent.txt | 10 ++++++++++ .../res/cardsfolder/upcoming/stormfist_crusader.txt | 9 +++++++++ .../res/cardsfolder/upcoming/tall_as_a_beanstalk.txt | 7 +++++++ forge-gui/res/cardsfolder/upcoming/tempting_witch.txt | 9 +++++++++ .../cardsfolder/upcoming/the_cauldron_of_eternity.txt | 10 ++++++++++ .../res/cardsfolder/upcoming/the_great_henge.txt | 11 +++++++++++ .../upcoming/torbran_thane_of_red_fell.txt | 9 +++++++++ .../res/cardsfolder/upcoming/unexplained_vision.txt | 7 +++++++ 10 files changed, 86 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/redcap_raiders.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/revenge_of_ravens.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/stonecoil_serpent.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/stormfist_crusader.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/tall_as_a_beanstalk.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/tempting_witch.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/the_cauldron_of_eternity.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/the_great_henge.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/torbran_thane_of_red_fell.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/unexplained_vision.txt diff --git a/forge-gui/res/cardsfolder/upcoming/redcap_raiders.txt b/forge-gui/res/cardsfolder/upcoming/redcap_raiders.txt new file mode 100644 index 00000000000..11b60b9d93d --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/redcap_raiders.txt @@ -0,0 +1,7 @@ +Name:Redcap Raiders +ManaCost:2 R +Types:Creature Goblin Warrior +PT:3/2 +T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigPump | TriggerDescription$ Whenever CARDNAME attacks, you may tap an untapped non-Human creature you control. If you do, CARDNAME gets +1/+1 and gains trample until end of turn. +SVar:TrigPump:AB$ Pump | Cost$ tapXType<1/Creature.nonHuman/non-Human creature> | Defined$ Self | NumAtt$ 1 | NumDef$ 1 | KW$ Trample +Oracle:Whenever Redcap Raiders attacks, you may tap an untapped non-Human creature you control. If you do, Redcap Raiders gets +1/+1 and gains trample until end of turn. diff --git a/forge-gui/res/cardsfolder/upcoming/revenge_of_ravens.txt b/forge-gui/res/cardsfolder/upcoming/revenge_of_ravens.txt new file mode 100644 index 00000000000..262ffd25dd6 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/revenge_of_ravens.txt @@ -0,0 +1,7 @@ +Name:Revenge of Ravens +ManaCost:3 B +Types:Enchantment +T:Mode$ Attacks | ValidCard$ Creature | Attacked$ You,Planeswalker.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigLoseLife | TriggerDescription$ Whenever a creature attacks you or a planeswalker you control, that creature's controller loses 1 life and you gain 1 life. +SVar:TrigLoseLife:DB$ LoseLife | Defined$ TriggeredAttackerController | LifeAmount$ 1 | SubAbility$ DBGainLife +SVar:DBGainLife:DB$ GainLife | LifeAmount$ 1 +Oracle:Whenever a creature attacks you or a planeswalker you control, that creature's controller loses 1 life and you gain 1 life. diff --git a/forge-gui/res/cardsfolder/upcoming/stonecoil_serpent.txt b/forge-gui/res/cardsfolder/upcoming/stonecoil_serpent.txt new file mode 100644 index 00000000000..dd379d1423c --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/stonecoil_serpent.txt @@ -0,0 +1,10 @@ +Name:Stonecoil Serpent +ManaCost:X +Types:Artifact Creature Snake +PT:0/0 +K:Reach +K:Trample +K:Protection from multicolored +K:etbCounter:P1P1:X +SVar:X:Count$xPaid +Oracle:Reach, trample, protection from multicolored\nStonecoil Serpent enters the battlefield with X +1/+1 counters on it. diff --git a/forge-gui/res/cardsfolder/upcoming/stormfist_crusader.txt b/forge-gui/res/cardsfolder/upcoming/stormfist_crusader.txt new file mode 100644 index 00000000000..6f2481fa7f8 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/stormfist_crusader.txt @@ -0,0 +1,9 @@ +Name:Stormfist Crusader +ManaCost:B R +Types:Creature Human Knight +PT:2/2 +K:Menace +T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigDraw | TriggerDescription$ At the beginning of your upkeep, each player draws a card and loses 1 life. +SVar:TrigDraw:DB$ Draw | Defined$ Player | NumCards$ 1 | SubAbility$ DBLoseLife +SVar:DBLoseLife:DB$ LoseLife | Defined$ Player | LifeAmount$ 1 +Oracle:Menace\nAt the beginning of your upkeep, each player draws a card and loses 1 life. diff --git a/forge-gui/res/cardsfolder/upcoming/tall_as_a_beanstalk.txt b/forge-gui/res/cardsfolder/upcoming/tall_as_a_beanstalk.txt new file mode 100644 index 00000000000..1d5b16a59ca --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/tall_as_a_beanstalk.txt @@ -0,0 +1,7 @@ +Name:Tall as a Beanstalk +ManaCost:3 G +Types:Enchantment Aura +K:Enchant creature +A:SP$ Attach | Cost$ 3 G | ValidTgts$ Creature | AILogic$ Pump +S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddPower$ 3 | AddToughness$ 3 | AddKeyword$ Reach | AddType$ Giant | Description$ Enchanted creature gets +3/+3, has reach, and is a Giant in addition to its other types. +Oracle:Enchant creature\nEnchanted creature gets +3/+3, has reach, and is a Giant in addition to its other types. diff --git a/forge-gui/res/cardsfolder/upcoming/tempting_witch.txt b/forge-gui/res/cardsfolder/upcoming/tempting_witch.txt new file mode 100644 index 00000000000..34ba26dbdb6 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/tempting_witch.txt @@ -0,0 +1,9 @@ +Name:Tempting Witch +ManaCost:2 B +Types:Creature Human Warlock +PT:1/3 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, create a Food token. (It's an artifact with "{2}, {T}, Sacrifice this artifact: You gain 3 life.") +SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ c_a_food_sac | TokenOwner$ You | LegacyImage$ c a food sac eld +DeckHas:Ability$LifeGain +A:AB$ LoseLife | Cost$ 2 T Sac<1/Food> | ValidTgts$ Player | TgtPrompt$ Select a player | LifeAmount$ 3 | SpellDescription$ Target player loses 3 life. +Oracle:When Tempting Witch enters the battlefield, create a Food token. (It's an artifact with "{2}, {T}, Sacrifice this artifact: You gain 3 life.")\n{2}, {T}, Sacrifice a Food: Target player loses 3 life. diff --git a/forge-gui/res/cardsfolder/upcoming/the_cauldron_of_eternity.txt b/forge-gui/res/cardsfolder/upcoming/the_cauldron_of_eternity.txt new file mode 100644 index 00000000000..fdd657ee8a5 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/the_cauldron_of_eternity.txt @@ -0,0 +1,10 @@ +Name:The Cauldron of Eternity +ManaCost:10 B B +Types:Legendary Artifact +S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ X | References$ X | EffectZone$ All | Description$ CARDNAME costs {2} less for each creature card in your graveyard. +SVar:X:Count$TypeInYourYard.Creature +T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigChange | TriggerDescription$ Whenever a creature you control dies, put it on the bottom of its owner's library. +SVar:TrigChange:DB$ ChangeZone | Defined$ TriggeredCard | Origin$ Graveyard | Destination$ Library | LibraryPosition$ -1 +SVar:BuffedBy:Creature +A:AB$ ChangeZone | Cost$ 2 B T PayLife<2> | TgtPrompt$ Choose target creature card in your graveyard | ValidTgts$ Creature.YouCtrl | Origin$ Graveyard | Destination$ Battlefield | SorcerySpeed$ True | SpellDescription$ Return target creature card from your graveyard to the battlefield. Activate this ability only any time you could cast a sorcery. +Oracle:This spell costs {2} less for each creature card in your graveyard.\nWhenever a creature you control dies, put it on the bottom of its owner's library.\n{2}{B}, {T}, Pay 2 life: Return target creature card from your graveyard to the battlefield. Activate this ability only any time you could cast a sorcery. diff --git a/forge-gui/res/cardsfolder/upcoming/the_great_henge.txt b/forge-gui/res/cardsfolder/upcoming/the_great_henge.txt new file mode 100644 index 00000000000..4628b019329 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/the_great_henge.txt @@ -0,0 +1,11 @@ +Name:The Great Henge +ManaCost:7 G G +Types:Legendary Artifact +S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ X | References$ X | EffectZone$ All | Description$ CARDNAME costs {X} less to cast, where X is the greatest power among creatures you control. +SVar:X:Count$GreatestPower_Creature.YouCtrl +A:AB$ Mana | Cost$ T | Produced$ G | Amount$ 2 | SubAbility$ DBGainLife | SpellDescription$ Add {G}{G}. You gain 2 life. +SVar:DBGainLife:DB$ GainLife | LifeAmount$ 2 +T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.nonToken+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever a nontoken creature enters the battlefield under your control, put a +1/+1 counter on it and draw a card. +SVar:TrigPutCounter:DB$ PutCounter | Defined$ TriggeredCardLKICopy | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ DBDraw +SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ 1 +Oracle:This spell costs {X} less to cast, where X is the greatest power among creatures you control.\n{T}: Add {G}{G}. You gain 2 life.\nWhenever a nontoken creature enters the battlefield under your control, put a +1/+1 counter on it and draw a card. diff --git a/forge-gui/res/cardsfolder/upcoming/torbran_thane_of_red_fell.txt b/forge-gui/res/cardsfolder/upcoming/torbran_thane_of_red_fell.txt new file mode 100644 index 00000000000..b22438badd9 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/torbran_thane_of_red_fell.txt @@ -0,0 +1,9 @@ +Name:Torbran, Thane of Red Fell +ManaCost:1 R R R +Types:Legendary Creature Dwarf Noble +PT:2/4 +R:Event$ DamageDone | ActiveZones$ Battlefield | ValidSource$ Card.RedSource+YouCtrl | ValidTarget$ Player.Opponent,Permanent.OppCtrl | ReplaceWith$ DmgPlus2 | Description$ If a red source you control would deal damage to an opponent or a permanent an opponent controls, it deals that much damage plus 2 instead. +SVar:DmgPlus2:DB$ ReplaceEffect | VarName$ DamageAmount | VarValue$ X | References$ X +SVar:X:ReplaceCount$DamageAmount/Plus.2 +SVar:PlayMain1:TRUE +Oracle:If a red source you control would deal damage to an opponent or a permanent an opponent controls, it deals that much damage plus 2 instead. diff --git a/forge-gui/res/cardsfolder/upcoming/unexplained_vision.txt b/forge-gui/res/cardsfolder/upcoming/unexplained_vision.txt new file mode 100644 index 00000000000..7f484b8a997 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/unexplained_vision.txt @@ -0,0 +1,7 @@ +Name:Unexplained Vision +ManaCost:4 U +Types:Sorcery +A:SP$ Draw | Cost$ 4 U | NumCards$ 3 | SubAbility$ DBScry | SpellDescription$ Draw three cards. Adamant — If at least three blue mana was spent to cast this spell, scry 3. +SVar:DBScry:DB$ Scry | ScryNum$ 3 | ConditionCheckSVar$ X | References$ X +SVar:X:Count$Adamant.Blue.1.0 +Oracle:Draw three cards.\nAdamant — If at least three blue mana was spent to cast this spell, scry 3. From a90b6033b04e16e9a74c543163df91314a946805 Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Thu, 19 Sep 2019 10:54:34 +0000 Subject: [PATCH 45/47] TriggerHandler: fix Dieharmonicon with new TriggerKeys --- .../src/main/java/forge/game/trigger/TriggerHandler.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java b/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java index 87d51dc130d..cf2f159ae65 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java @@ -735,8 +735,8 @@ public class TriggerHandler { } } else if (kw.startsWith("Dieharmonicon")) { // 700.4. The term dies means "is put into a graveyard from the battlefield." - if (runParams.get(AbilityKey.Destination) instanceof String) { - final String origin = (String) runParams.get(AbilityKey.Destination); + if (runParams.get(AbilityKey.Origin) instanceof String) { + final String origin = (String) runParams.get(AbilityKey.Origin); if ("Battlefield".equals(origin) && runParams.get(AbilityKey.Destination) instanceof String) { final String dest = (String) runParams.get(AbilityKey.Destination); if ("Graveyard".equals(dest) && runParams.get(AbilityKey.Card) instanceof Card) { From 42aa6f0eb36bc94d3daa08457fe862737da7d268 Mon Sep 17 00:00:00 2001 From: swordshine Date: Thu, 19 Sep 2019 19:08:09 +0800 Subject: [PATCH 46/47] More forgescribed cards --- forge-gui/res/cardsfolder/upcoming/rampart_smasher.txt | 6 ++++++ forge-gui/res/cardsfolder/upcoming/sorcerers_broom.txt | 8 ++++++++ forge-gui/res/cardsfolder/upcoming/vantress_paladin.txt | 7 +++++++ 3 files changed, 21 insertions(+) create mode 100644 forge-gui/res/cardsfolder/upcoming/rampart_smasher.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/sorcerers_broom.txt create mode 100644 forge-gui/res/cardsfolder/upcoming/vantress_paladin.txt diff --git a/forge-gui/res/cardsfolder/upcoming/rampart_smasher.txt b/forge-gui/res/cardsfolder/upcoming/rampart_smasher.txt new file mode 100644 index 00000000000..dca21af2bcb --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/rampart_smasher.txt @@ -0,0 +1,6 @@ +Name:Rampart Smasher +ManaCost:R/G R/G R/G R/G +Types:Creature Giant +PT:5/5 +S:Mode$ CantBlockBy | ValidAttacker$ Creature.Self | ValidBlocker$ Creature.Knight,Creature.Wall | Description$ CARDNAME can't be blocked by Knights or Walls. +Oracle:Rampart Smasher can't be blocked by Knights or Walls. diff --git a/forge-gui/res/cardsfolder/upcoming/sorcerers_broom.txt b/forge-gui/res/cardsfolder/upcoming/sorcerers_broom.txt new file mode 100644 index 00000000000..94a6a2c8eea --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/sorcerers_broom.txt @@ -0,0 +1,8 @@ +Name:Sorcerer's Broom +ManaCost:2 +Types:Artifact Creature Spirit +PT:2/1 +T:Mode$ Sacrificed | ValidCard$ Permanent.Other | Execute$ TrigCopy | TriggerZones$ Battlefield | ValidPlayer$ You | TriggerDescription$ Whenever you sacrifice another permanent, you may pay {3}. If you do, create a token that's a copy of CARDNAME. +SVar:TrigCopy:AB$ CopyPermanent | Cost$ 3 | Defined$ Self | NumCopies$ 1 +AI:RemoveDeck:All +Oracle:Whenever you sacrifice another permanent, you may pay {3}. If you do, create a token that's a copy of Sorcerer's Broom. diff --git a/forge-gui/res/cardsfolder/upcoming/vantress_paladin.txt b/forge-gui/res/cardsfolder/upcoming/vantress_paladin.txt new file mode 100644 index 00000000000..3b0476c39c0 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/vantress_paladin.txt @@ -0,0 +1,7 @@ +Name:Vantress Paladin +ManaCost:3 U +Types:Creature Human Knight +PT:2/2 +K:Flying +K:etbCounter:P1P1:1:Adamant$ Blue:Adamant — If at least three blue mana was spent to cast this spell, CARDNAME enters the battlefield with a +1/+1 counter on it. +Oracle:Flying\nAdamant — If at least three blue mana was spent to cast this spell, Vantress Paladin enters the battlefield with a +1/+1 counter on it. From 80c6c2328949fb22542a2493213169394d944c6b Mon Sep 17 00:00:00 2001 From: swordshine Date: Thu, 19 Sep 2019 20:57:49 +0800 Subject: [PATCH 47/47] Update ability text if it's not translated --- forge-game/src/main/java/forge/game/card/CardView.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/forge-game/src/main/java/forge/game/card/CardView.java b/forge-game/src/main/java/forge/game/card/CardView.java index 19b1bfa52f8..53911856989 100644 --- a/forge-game/src/main/java/forge/game/card/CardView.java +++ b/forge-game/src/main/java/forge/game/card/CardView.java @@ -557,7 +557,7 @@ public class CardView extends GameEntityView { } tname = tname.isEmpty() ? state.getName() : tname; - toracle = toracle.isEmpty() ? state.getOracleText() : toracle; + if (isSplitCard()) { taltname = getAlternateState().getName(); taltoracle = getAlternateState().getOracleText(); @@ -572,7 +572,7 @@ public class CardView extends GameEntityView { sb.append(taltoracle); return sb.toString().trim(); } else { - return toracle; + return toracle.isEmpty() ? state.getOracleText() : toracle; } }