Merge pull request #1392 from Simisays/DoubleTeamBis

HBG Double Team Ability + 13 cards
This commit is contained in:
Anthony Calosa
2022-09-01 05:01:20 +08:00
committed by GitHub
17 changed files with 121 additions and 0 deletions

View File

@@ -1389,6 +1389,10 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
return hasKeyword(Keyword.DOUBLE_STRIKE); return hasKeyword(Keyword.DOUBLE_STRIKE);
} }
public final boolean hasDoubleTeam() {
return hasKeyword(Keyword.DOUBLE_TEAM);
}
public final boolean hasSecondStrike() { public final boolean hasSecondStrike() {
return hasDoubleStrike() || !hasFirstStrike(); return hasDoubleStrike() || !hasFirstStrike();
} }

View File

@@ -1063,6 +1063,22 @@ public class CardFactoryUtil {
dethroneTrigger.setOverridingAbility(AbilityFactory.getAbility(abString, card)); dethroneTrigger.setOverridingAbility(AbilityFactory.getAbility(abString, card));
inst.addTrigger(dethroneTrigger); inst.addTrigger(dethroneTrigger);
} else if (keyword.equals("Double Team")) {
final String doubleteamScript = "Mode$ Attacks | ValidCard$ Card.Self+nonToken | TriggerZones$ Battlefield | TriggerDescription$ (" + inst.getReminderText() + ")";
final String makeString = "DB$ MakeCard | DefinedName$ Self | Zone$ Hand | RememberMade$ True";
final String forgetString = "DB$ Effect | Duration$ Permanent | RememberObjects$ Remembered | ImprintCards$ TriggeredAttacker | StaticAbilities$ RemoveDoubleTeamMade";
final String madeforgetmadeString = "Mode$ Continuous | EffectZone$ Command | Affected$ Card.IsRemembered,Card.IsImprinted | RemoveKeyword$ Double Team | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ Both cards perpetually lose double team.";
final String CleanupString = "DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True";
final Trigger trigger = TriggerHandler.parseTrigger(doubleteamScript, card, intrinsic);
final SpellAbility youMake = AbilityFactory.getAbility(makeString, card);
final AbilitySub forget = (AbilitySub) AbilityFactory.getAbility(forgetString, card);
final AbilitySub Cleanup = (AbilitySub) AbilityFactory.getAbility(CleanupString, card);
forget.setSVar("RemoveDoubleTeamMade",madeforgetmadeString);
youMake.setSubAbility(forget);
forget.setSubAbility(Cleanup);
trigger.setOverridingAbility(youMake);
inst.addTrigger(trigger);
} else if (keyword.startsWith("Echo")) { } else if (keyword.startsWith("Echo")) {
final String[] k = keyword.split(":"); final String[] k = keyword.split(":");
final String cost = k[1]; final String cost = k[1];

View File

@@ -1364,6 +1364,7 @@ public class CardView extends GameEntityView {
public boolean hasDefender() { return get(TrackableProperty.HasDefender); } public boolean hasDefender() { return get(TrackableProperty.HasDefender); }
public boolean hasDivideDamage() { return get(TrackableProperty.HasDivideDamage); } public boolean hasDivideDamage() { return get(TrackableProperty.HasDivideDamage); }
public boolean hasDoubleStrike() { return get(TrackableProperty.HasDoubleStrike); } public boolean hasDoubleStrike() { return get(TrackableProperty.HasDoubleStrike); }
public boolean hasDoubleTeam() { return get(TrackableProperty.HasDoubleTeam); }
public boolean hasFirstStrike() { return get(TrackableProperty.HasFirstStrike); } public boolean hasFirstStrike() { return get(TrackableProperty.HasFirstStrike); }
public boolean hasFlying() { return get(TrackableProperty.HasFlying); } public boolean hasFlying() { return get(TrackableProperty.HasFlying); }
public boolean hasFear() { return get(TrackableProperty.HasFear); } public boolean hasFear() { return get(TrackableProperty.HasFear); }

View File

@@ -60,6 +60,7 @@ public enum Keyword {
DEVOID("Devoid", SimpleKeyword.class, true, "This card has no color."), DEVOID("Devoid", SimpleKeyword.class, true, "This card has no color."),
DISTURB("Disturb", KeywordWithCost.class, false, "You may cast this card from your graveyard transformed for its disturb cost."), DISTURB("Disturb", KeywordWithCost.class, false, "You may cast this card from your graveyard transformed for its disturb cost."),
DOUBLE_STRIKE("Double Strike", SimpleKeyword.class, true, "This creature deals both first-strike and regular combat damage."), DOUBLE_STRIKE("Double Strike", SimpleKeyword.class, true, "This creature deals both first-strike and regular combat damage."),
DOUBLE_TEAM("Double Team", SimpleKeyword.class, true, "When this creature attacks, if it's not a token, conjure a duplicate of it into your hand. Then both cards perpetually lose double team."),
DREDGE("Dredge", KeywordWithAmount.class, false, "If you would draw a card, instead you may put exactly {%d:card} from the top of your library into your graveyard. If you do, return this card from your graveyard to your hand. Otherwise, draw a card."), DREDGE("Dredge", KeywordWithAmount.class, false, "If you would draw a card, instead you may put exactly {%d:card} from the top of your library into your graveyard. If you do, return this card from your graveyard to your hand. Otherwise, draw a card."),
ECHO("Echo", KeywordWithCost.class, false, "At the beginning of your upkeep, if this permanent came under your control since the beginning of your last upkeep, sacrifice it unless you pay %s."), ECHO("Echo", KeywordWithCost.class, false, "At the beginning of your upkeep, if this permanent came under your control since the beginning of your last upkeep, sacrifice it unless you pay %s."),
EMBALM("Embalm", KeywordWithCost.class, false, "%s, Exile this card from your graveyard: Create a token that's a copy of this card, except it's white, it has no mana cost, and it's a Zombie in addition to its other types. Embalm only as a sorcery."), EMBALM("Embalm", KeywordWithCost.class, false, "%s, Exile this card from your graveyard: Create a token that's a copy of this card, except it's white, it has no mana cost, and it's a Zombie in addition to its other types. Embalm only as a sorcery."),

View File

@@ -138,6 +138,7 @@ public enum TrackableProperty {
HasDefender(TrackableTypes.BooleanType), HasDefender(TrackableTypes.BooleanType),
HasDivideDamage(TrackableTypes.BooleanType), HasDivideDamage(TrackableTypes.BooleanType),
HasDoubleStrike(TrackableTypes.BooleanType), HasDoubleStrike(TrackableTypes.BooleanType),
HasDoubleTeam(TrackableTypes.BooleanType),
HasFirstStrike(TrackableTypes.BooleanType), HasFirstStrike(TrackableTypes.BooleanType),
HasFlying(TrackableTypes.BooleanType), HasFlying(TrackableTypes.BooleanType),
HasFear(TrackableTypes.BooleanType), HasFear(TrackableTypes.BooleanType),

View File

@@ -0,0 +1,7 @@
Name:Genasi Rabble-Rouser
ManaCost:1 R
Types:Creature Elemental Shaman
K:Double Team
A:AB$ PumpAll | Cost$ 1 R | ValidCards$ Creature.YouCtrl+namedGenasi Rabble-Rouser | NumAtt$ +1 | SpellDescription$ Creatures you control named Genasi Rabble-Rouser get +1/+0 until end of turn.
DeckHints:Name$Genasi Rabble-Rouser
Oracle:Double team\n{1}{R}: Creatures you control named Genasi Rabble-Rouser gets +1/+0 until end of turn.

View File

@@ -0,0 +1,7 @@
Name:Giant Fire Beetles
ManaCost:2 R
Types:Creature Insect
PT:2/2
K:Double Team
K:Menace
Oracle:Menace\nDouble team

View File

@@ -0,0 +1,10 @@
Name:Gnoll Hunting Party
ManaCost:5 R
Types:Creature Gnoll
PT:5/5
S:Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ X | EffectZone$ All | Description$ This spell costs {1} less to cast for each creature you attacked with this turn.
S:Mode$ Continuous | Affected$ Card.Self | AddKeyword$ First Strike | Condition$ PlayerTurn | Description$ As long as it's your turn, CARDNAME has first strike.
SVar:X:Count$AttackersDeclared
K:Double Team
SVar:PlayMain2:TRUE
Oracle:This spell costs {1} less to cast for each creature you attacked with this turn.\nDouble team\nAs long as it's your turn, Gnoll Hunting Party has first strike.

View File

@@ -0,0 +1,8 @@
Name:Lizardfolk Librarians
ManaCost:3 U
Types:Creature Lizard
PT:2/1
K:Double Team
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigScry | TriggerDescription$ When CARDNAME enters the battlefield, scry 2.
SVar:TrigScry:DB$ Scry | ScryNum$ 2
Oracle:Double team\When Lizardfolk Librarians enters the battlefield, scry 2.

View File

@@ -0,0 +1,8 @@
Name:Moradin's Disciples
ManaCost:3 W
Types:Creature Dwarf Cleric
PT:2/3
K:Double Team
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ DBTap | TriggerDescription$ Whenever CARDNAME attacks, tap target creature defending player controls.
SVar:DBTap:DB$ Tap | ValidTgts$ Creature | TargetsWithDefinedController$ TriggeredDefendingPlayer | TargetMax$ 1 | TgtPrompt$ Select target creature defending player controls
Oracle:Double team\nWhenever Moradin's Disciples attacks, tap target creature defending player controls.

View File

@@ -0,0 +1,7 @@
Name:Ranger Squadron
ManaCost:4 W W
Types:Creature Cat Ranger
PT:3/4
K:Flying
K:Double Team
Oracle:Flying\nDouble Team

View File

@@ -0,0 +1,9 @@
Name:Seatower Imprisonment
ManaCost:2 W W
Types:Enchantment Aura
K:Enchant creature or planeswalker you don't control
A:SP$ Attach | ValidTgts$ Creature.YouDontCtrl,Planeswalker.YouDontCtrl | AILogic$ Curse
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigConjure | TriggerDescription$ When CARDNAME enters the battlefield, conjure a card named Soldiers of the Watch onto the battlefield.
SVar:TrigConjure:DB$ MakeCard | Name$ Soldiers of the Watch | Zone$ Battlefield
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddHiddenKeyword$ CARDNAME can't attack or block. & CARDNAME's activated abilities can't be activated. | Description$ Enchanted permanent can't attack or block and its activated abilities can't be activated.
Oracle:Enchant creature or planeswalker you don't control\nWhen Seatower Imprisonment enters the battlefield, conjure a card named Soldiers of the Watch onto the battlefield.\nEnchanted permanent can't attack or block and its activated abilities can't be activated.

View File

@@ -0,0 +1,6 @@
Name:Soldiers of the Watch
ManaCost:1 W
Types:Creature Human Soldier
PT:2/1
K:Double Team
Oracle:Double Team

View File

@@ -0,0 +1,11 @@
Name:Sworn to the Legion
ManaCost:4 W W
Types:Enchantment
T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ DBEffect | TriggerDescription$ When CARDNAME enters the battlefield, nontoken creatures you control perpetually gain double team.
SVar:DBEffect:DB$ Effect | RememberObjects$ Valid Creature.YouCtrl+nonToken | StaticAbilities$ PerpetualDoubleTeam | Name$ Sworn to the Legion's Perpetual Effect | Duration$ Permanent
SVar:PerpetualDoubleTeam:Mode$ Continuous | Affected$ Card.IsRemembered | AddKeyword$ Double Team | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ Nontoken creatures you control perpetually gain double team.
T:Mode$ SpellCast | ValidCard$ Creature | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ DBEffectCast | TriggerDescription$ Whenever you cast a creature spell, it perpetually gains double team.
SVar:DBEffectCast:DB$ Effect | RememberObjects$ TriggeredCard | StaticAbilities$ PerpetualDoubleTeamCast | Name$ Sworn to the Legion's Perpetual Effect | Duration$ Permanent
SVar:PerpetualDoubleTeamCast:Mode$ Continuous | Affected$ Card.IsRemembered | AddKeyword$ Double Team | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ This creature perpetually gains double team.
SVar:BuffedBy:Creature
Oracle:When Sworn to the Legion enters the battlefield, nontoken creatures you control perpetually gain double team.\nWhenever you cast a creature spell, it perpetually gains double team.

View File

@@ -0,0 +1,8 @@
Name:Tiefling Outcasts
ManaCost:R
Types:Creature Tiefling Peasant
PT:1/1
K:Double Team
S:Mode$ Continuous | Affected$ Demon.Other+YouCtrl,Devil.Other+YouCtrl,Imp.Other+YouCtrl,Tiefling.Other+YouCtrl | AddPower$ 1 | Description$ Other Demons, Devils, Imps, and Tieflings you control get +1/+0.
DeckHints:Type$Demon|Devil|Imp|Tiefling
Oracle:Double Team\nOther Demons, Devils, Imps, and Tieflings you control get +1/+0.

View File

@@ -0,0 +1,10 @@
Name:Ulder Ravengard, Marshal
ManaCost:1 R W
Types:Legendary Creature Human Noble Soldier
PT:3/3
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPumpEOT | TriggerDescription$ When CARDNAME enters the battlefield, another target nontoken creature you control gains double team until end of turn.
SVar:TrigPumpEOT:DB$ Pump | ValidTgts$ Creature.YouCtrl+nonToken+Other | TgtPrompt$ Select another target nontoken creature you control | KW$ Double Team
T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigConjure | TriggerDescription$ Whenever NICKNAME attacks, conjure a duplicate of another target nontoken attacking creature into your hand.
SVar:TrigConjure:DB$ MakeCard | ValidTgts$ Creature.attacking+Other+nonToken | TgtPrompt$ Select another target nontoken creature that is attacking | DefinedName$ Targeted | Zone$ Hand
SVar:HasAttackEffect:TRUE
Oracle:When Ulder Ravengard, Marshal enters the battlefield, another target nontoken creature you control gains double team until end of turn.\nWhenever Ulder Ravengard attacks, conjure a duplicate of another target nontoken attacking creature into your hand.

View File

@@ -0,0 +1,7 @@
Name:Warriors of Tiamat
ManaCost:4 R
Types:Creature Dragon Warrior
PT:4/2
K:Haste
K:Double Team
Oracle:Haste\nDouble Team