From 5d55a66a6cf37962a64fc36e7212459d5b28b11c Mon Sep 17 00:00:00 2001 From: Hanmac Date: Tue, 31 Jan 2017 05:44:43 +0000 Subject: [PATCH] CardFactoryUtil & Card: make etbCounter abilities different. they do not add a keyword anymore for the ability to remove it the Replacement Effect is now Secondary and Card itself does do the Description of the Keywords --- .../src/main/java/forge/game/card/Card.java | 21 ++-- .../java/forge/game/card/CardFactoryUtil.java | 96 ++++++++++++------- 2 files changed, 75 insertions(+), 42 deletions(-) diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index 9109315a042..387dd231a34 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -1336,7 +1336,9 @@ public class Card extends GameEntity implements Comparable { final String[] p = keyword.split(":"); final StringBuilder s = new StringBuilder(); if (p.length > 4) { - s.append(p[4]); + if (!"no desc".equals(p[4])) { + s.append(p[4]); + } } else { s.append(getName()); s.append(" enters the battlefield with "); @@ -1356,7 +1358,7 @@ public class Card extends GameEntity implements Comparable { String k = keyword; k = k.replace("Curse", ""); sbLong.append(k).append("\r\n"); - } else if (keyword.startsWith("Fading") || keyword.startsWith("Ripple") || keyword.startsWith("Vanishing")) { + } else if (keyword.startsWith("Ripple")) { sbLong.append(keyword.replace(":", " ")).append("\r\n"); } else if (keyword.startsWith("Madness")) { String[] parts = keyword.split(":"); @@ -1447,19 +1449,18 @@ public class Card extends GameEntity implements Comparable { } else if (keyword.contains("At the beginning of your upkeep, ") && keyword.contains(" unless you pay")) { sbLong.append(keyword).append("\r\n"); - } else if (keyword.startsWith("Modular") || keyword.startsWith("Bloodthirst") - || keyword.startsWith("Strive") || keyword.startsWith("Escalate") - || keyword.startsWith("Cycling") || keyword.startsWith("TypeCycling") + } else if (keyword.startsWith("Strive") || keyword.startsWith("Escalate") || keyword.startsWith("ETBReplacement") || keyword.startsWith("MayEffectFromOpeningHand") - || keyword.equals("Undaunted") || keyword.startsWith("Monstrosity") - || keyword.startsWith("Graft") || keyword.startsWith("UpkeepCost")) { + || keyword.startsWith("UpkeepCost")) { } else if (keyword.startsWith("Provoke") || keyword.startsWith("Devour") || keyword.equals("Unleash") || keyword.startsWith("Soulbond") || keyword.equals("Partner") || keyword.equals("Retrace") || keyword.equals("Living Weapon") || keyword.equals("Myriad") || keyword.equals("Exploit") || keyword.equals("Ingest") || keyword.equals("Changeling")) { sbLong.append(keyword + " (" + Keyword.getInstance(keyword).getReminderText() + ")"); - } else if (keyword.startsWith("Fabricate") || keyword.startsWith("Soulshift") + } else if (keyword.startsWith("Modular") || keyword.startsWith("Bloodthirst") + || keyword.startsWith("Fabricate") || keyword.startsWith("Soulshift") || keyword.startsWith("Crew") || keyword.startsWith("Tribute") + || keyword.startsWith("Graft") || keyword.startsWith("Fading") || keyword.startsWith("Vanishing") || keyword.startsWith("Renown") || keyword.startsWith("Annihilator")) { final String[] k = keyword.split(":"); sbLong.append(k[0] + " " + k[1] + " (" + Keyword.getInstance(keyword).getReminderText() + ")"); @@ -1488,7 +1489,9 @@ public class Card extends GameEntity implements Comparable { } else if (keyword.startsWith("Equip") || keyword.startsWith("Fortify") || keyword.startsWith("Outlast") || keyword.startsWith("Unearth") || keyword.startsWith("Scavenge") || keyword.startsWith("Ninjutsu") || keyword.startsWith("Evoke") || keyword.startsWith("Bestow") || keyword.startsWith("Dash") - || keyword.startsWith("Surge") || keyword.startsWith("Transmute") || keyword.startsWith("Suspend")) { + || keyword.startsWith("Surge") || keyword.startsWith("Transmute") || keyword.startsWith("Suspend") + || keyword.equals("Undaunted") || keyword.startsWith("Monstrosity") + || keyword.startsWith("Cycling") || keyword.startsWith("TypeCycling")) { // keyword parsing takes care of adding a proper description } else if (keyword.startsWith("CantBeBlockedBy")) { sbLong.append(getName()).append(" can't be blocked "); 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 d858cb6ce69..b23eafad033 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -2131,31 +2131,15 @@ public class CardFactoryUtil { addTriggerAbility(keyword, card, null); } else if (keyword.startsWith("Fading")) { - final String[] k = keyword.split(":"); - - card.addIntrinsicKeyword("etbCounter:FADE:" + k[1] + ":no Condition:no desc"); - - String upkeepTrig = "Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield " + - " | Execute$ TrigUpkeepFading | Secondary$ True | TriggerDescription$ At the beginning of " + - "your upkeep, remove a fade counter from CARDNAME. If you can't, sacrifice CARDNAME."; - - card.setSVar("TrigUpkeepFading", "AB$ RemoveCounter | Cost$ 0 | Defined$ Self | CounterType$ FADE" + - " | CounterNum$ 1 | RememberRemoved$ True | SubAbility$ DBUpkeepFadingSac"); - card.setSVar("DBUpkeepFadingSac","DB$ Sacrifice | SacValid$ Self | ConditionCheckSVar$ FadingCheckSVar" + - " | ConditionSVarCompare$ EQ0 | References$ FadingCheckSVar | SubAbility$ FadingCleanup"); - card.setSVar("FadingCleanup","DB$ Cleanup | ClearRemembered$ True"); - card.setSVar("FadingCheckSVar","Count$RememberedSize"); - final Trigger parsedUpkeepTrig = TriggerHandler.parseTrigger(upkeepTrig, card, true); - card.addTrigger(parsedUpkeepTrig); + addTriggerAbility(keyword, card, null); + addReplacementEffect(keyword, card, null); } else if (keyword.startsWith("Renown")) { addTriggerAbility(keyword, card, null); } else if (keyword.startsWith("Vanishing")) { - final String[] k = keyword.split(":"); - // etbcounter only for intrinsic - card.addIntrinsicKeyword("etbCounter:TIME:" + k[1] + ":no Condition:no desc"); addTriggerAbility(keyword, card, null); + addReplacementEffect(keyword, card, null); } else if (keyword.equals("Delve")) { card.getSpellAbilities().getFirst().setDelve(true); @@ -2478,7 +2462,6 @@ public class CardFactoryUtil { private static ReplacementEffect makeEtbCounter(final String kw, final Card card, final boolean intrinsic) { String parse = kw; - card.removeIntrinsicKeyword(parse); String[] splitkw = parse.split(":"); @@ -2510,7 +2493,7 @@ public class CardFactoryUtil { } String repeffstr = "Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield " - + "| Description$ " + desc + (!extraparams.equals("") ? " | " + extraparams : ""); + + "| Secondary$ True | Description$ " + desc + (!extraparams.equals("") ? " | " + extraparams : ""); ReplacementEffect re = ReplacementHandler.parseReplacement(repeffstr, card, intrinsic); re.setLayer(ReplacementLayer.Other); @@ -2755,6 +2738,23 @@ public class CardFactoryUtil { card.setSVar("DB" + name + "Token", token); card.setSVar("DB" + name + "Token2", token + " | ConditionPresent$ Card.StrictlySelf | ConditionCompare$ EQ0"); + if (!intrinsic) { + kws.addTrigger(cardTrigger); + } + } else if (keyword.startsWith("Fading")) { + String upkeepTrig = "Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield " + + " | Execute$ TrigUpkeepFading | Secondary$ True | TriggerDescription$ At the beginning of " + + "your upkeep, remove a fade counter from CARDNAME. If you can't, sacrifice CARDNAME."; + + card.setSVar("TrigUpkeepFading", "AB$ RemoveCounter | Cost$ 0 | Defined$ Self | CounterType$ FADE" + + " | CounterNum$ 1 | RememberRemoved$ True | SubAbility$ DBUpkeepFadingSac"); + card.setSVar("DBUpkeepFadingSac","DB$ Sacrifice | SacValid$ Self | ConditionCheckSVar$ FadingCheckSVar" + + " | ConditionSVarCompare$ EQ0 | References$ FadingCheckSVar | SubAbility$ FadingCleanup"); + card.setSVar("FadingCleanup","DB$ Cleanup | ClearRemembered$ True"); + card.setSVar("FadingCheckSVar","Count$RememberedSize"); + final Trigger trigger = TriggerHandler.parseTrigger(upkeepTrig, card, intrinsic); + final Trigger cardTrigger = card.addTrigger(trigger); + if (!intrinsic) { kws.addTrigger(cardTrigger); } @@ -3330,10 +3330,10 @@ public class CardFactoryUtil { final String etbCounter = "etbCounter:P1P1:" + numCounters + ":Bloodthirst$ True:" + desc; - if (intrinsic) { - card.addIntrinsicKeyword(etbCounter); - } else { - kws.addReplacement(makeEtbCounter(etbCounter, card, intrinsic)); + final ReplacementEffect re = makeEtbCounter(etbCounter, card, intrinsic); + + if (!intrinsic) { + kws.addReplacement(re); } } else if (keyword.startsWith("Devour")) { @@ -3367,6 +3367,21 @@ public class CardFactoryUtil { if (!intrinsic) { kws.addReplacement(cardre); } + } else if (keyword.startsWith("Fading")) { + final String[] k = keyword.split(":"); + final String m = k[1]; + + StringBuilder sb = new StringBuilder("etbCounter:FADE:"); + sb.append(m).append(":no Condition:"); + sb.append("Fading "); + sb.append(m); + sb.append(" (").append(Keyword.getInstance(keyword).getReminderText()).append(")"); + + final ReplacementEffect re = makeEtbCounter(sb.toString(), card, intrinsic); + + if (!intrinsic) { + kws.addReplacement(re); + } } else if (keyword.startsWith("Graft")) { final String[] k = keyword.split(":"); final String m = k[1]; @@ -3377,10 +3392,10 @@ public class CardFactoryUtil { sb.append(m); sb.append(" (").append(Keyword.getInstance(keyword).getReminderText()).append(")"); - if (intrinsic) { - card.addIntrinsicKeyword(sb.toString()); - } else { - kws.addReplacement(makeEtbCounter(sb.toString(), card, intrinsic)); + final ReplacementEffect re = makeEtbCounter(sb.toString(), card, intrinsic); + + if (!intrinsic) { + kws.addReplacement(re); } } else if (keyword.startsWith("Madness")) { // Set Madness Replacement effects @@ -3413,10 +3428,10 @@ public class CardFactoryUtil { card.setSVar(m, "Count$Converge"); } - if (intrinsic) { - card.addIntrinsicKeyword(sb.toString()); - } else { - kws.addReplacement(makeEtbCounter(sb.toString(), card, intrinsic)); + final ReplacementEffect re = makeEtbCounter(sb.toString(), card, intrinsic); + + if (!intrinsic) { + kws.addReplacement(re); } } else if (keyword.equals("Unleash")) { String effect = "DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 | SpellDescription$ Unleash (" + Keyword.getInstance(keyword).getReminderText() + ")"; @@ -3440,6 +3455,21 @@ public class CardFactoryUtil { if (!intrinsic) { kws.addReplacement(cardre); } + } else if (keyword.startsWith("Vanishing")) { + final String[] k = keyword.split(":"); + final String m = k[1]; + + StringBuilder sb = new StringBuilder("etbCounter:TIME:"); + sb.append(m).append(":no Condition:"); + sb.append("Vanishing "); + sb.append(m); + sb.append(" (").append(Keyword.getInstance(keyword).getReminderText()).append(")"); + + final ReplacementEffect re = makeEtbCounter(sb.toString(), card, intrinsic); + + if (!intrinsic) { + kws.addReplacement(re); + } } }