Merge branch 'master' into newmaster

This commit is contained in:
Anthony Calosa
2022-09-01 05:16:59 +08:00
26 changed files with 189 additions and 2 deletions

View File

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

View File

@@ -1063,6 +1063,22 @@ public class CardFactoryUtil {
dethroneTrigger.setOverridingAbility(AbilityFactory.getAbility(abString, card));
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")) {
final String[] k = keyword.split(":");
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 hasDivideDamage() { return get(TrackableProperty.HasDivideDamage); }
public boolean hasDoubleStrike() { return get(TrackableProperty.HasDoubleStrike); }
public boolean hasDoubleTeam() { return get(TrackableProperty.HasDoubleTeam); }
public boolean hasFirstStrike() { return get(TrackableProperty.HasFirstStrike); }
public boolean hasFlying() { return get(TrackableProperty.HasFlying); }
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."),
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_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."),
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."),

View File

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

View File

@@ -5,6 +5,7 @@ import java.util.List;
import java.util.Map.Entry;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input;
import com.badlogic.gdx.math.Rectangle;
import com.badlogic.gdx.utils.Align;

View File

@@ -1,7 +1,7 @@
Name:Divine Purge
ManaCost:1 W W
Types:Sorcery
A:SP$ ChangeZoneAll | Origin$ Battlefield | Destination$ Exile | ChangeType$ Artifact.powerLE3,Creature.powerLE3 | RememberChanged$ True | SubAbility$ DBEffect | SpellDescription$ Exile all artifacts and creatures with mana value 3 or less. They perpetually gain "This spell costs {2} more to cast" and "This permanent enters the battlefield tapped." For as long as each of them remain exiled, its owner may play it.
A:SP$ ChangeZoneAll | Origin$ Battlefield | Destination$ Exile | ChangeType$ Artifact.cmcLE3,Creature.cmcLE3 | RememberChanged$ True | SubAbility$ DBEffect | SpellDescription$ Exile all artifacts and creatures with mana value 3 or less. They perpetually gain "This spell costs {2} more to cast" and "This permanent enters the battlefield tapped." For as long as each of them remain exiled, its owner may play it.
SVar:DBEffect:DB$ Effect | RememberObjects$ Remembered | StaticAbilities$ PerpetualAbility | Duration$ Permanent | Name$ Divine Purge's Perpetual Effect | SubAbility$ DBMayPlayEffect
SVar:PerpetualAbility:Mode$ Continuous | Affected$ Card.IsRemembered | AddStaticAbility$ RaiseCost & ETBTappedDesc | EffectZone$ Command | AddKeyword$ CARDNAME enters the battlefield tapped. | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | SubAbility$ DBMayPlayEffect | Description$ The exiled cards perpetually gain "This spell costs {2} more to cast" and "This permanent enters the battlefield tapped."
SVar:RaiseCost:Mode$ RaiseCost | ValidCard$ Card.Self | Type$ Spell | Amount$ 2 | EffectZone$ All | Description$ This spell costs {2} more to cast.

View File

@@ -2,7 +2,7 @@ Name:Patriar's Humiliation
ManaCost:W
Types:Instant
A:SP$ Effect | StaticAbilities$ PerpetualLoss | RememberObjects$ Targeted | ValidTgts$ Creature | TgtPrompt$ Select target creature | IsCurse$ True | Name$ Patriar's Humiliation's Perpetual Effect | Duration$ Permanent | SubAbility$ DBDealDamage | SpellDescription$ Target creature perpetually loses all abilities.
SVar:PerpetualLoss:Mode$ Continuous | Affected$ Card.IsRemembered | RemoveAllAbilities$ True | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ This creature loses all abilities.
SVar:PerpetualLoss:Mode$ Continuous | Affected$ Card.IsRemembered | RemoveAllAbilities$ True | EffectZone$ Command | AffectedZone$ Battlefield,Hand,Graveyard,Exile,Stack,Library,Command | Description$ This creature perpetually loses all abilities.
SVar:DBDealDamage:DB$ DealDamage | NumDmg$ X | Defined$ Targeted | StackDescription$ SpellDescription | SpellDescription$ CARDNAME deals damage to it equal to the number of creatures you control.
SVar:X:Count$Valid Creature.YouCtrl
Oracle:Target creature perpetually loses all abilities, then Patriar's Humiliation deals damage to it equal to the number of creatures you control.

View File

@@ -0,0 +1,12 @@
Name:Archangel of Wrath
ManaCost:2 W W
Types:Creature Angel
PT:3/4
K:Kicker:B:R
K:Flying
K:Lifelink
T:Mode$ ChangesZone | ValidCard$ Card.Self+kicked | Origin$ Any | Destination$ Battlefield | Execute$ TrigDamage | TriggerDescription$ When CARDNAME enters the battlefield, if it was kicked, it deals 2 damage to any target.
T:Mode$ ChangesZone | ValidCard$ Card.Self+kicked | Origin$ Any | Destination$ Battlefield | CheckSVar$ X | SVarCompare$ EQ2 | Execute$ TrigDamage | TriggerDescription$ When CARDNAME enters the battlefield, if it was kicked twice, it deals 2 damage to any target.
SVar:TrigDamage:DB$ DealDamage | ValidTgts$ Creature,Player,Planeswalker | TgtPrompt$ Select any target | NumDmg$ 2
SVar:X:Count$TimesKicked
Oracle:Kicker {B} and/or {R} (You may pay an additional {B} and/or {R} as you cast this spell.)\nFlying, lifelink\nWhen Archangel of Wrath enters the battlefield, if it was kicked, it deals 2 damage to any target.\nWhen Archangel of Wrath enters the battlefield, if it was kicked twice, it deals 2 damage to any target.

View File

@@ -0,0 +1,8 @@
Name:Aron, Benalia's Ruin
ManaCost:W W B
Types:Legendary Creature Phyrexian Human
PT:3/3
K:Menace
A:AB$ PutCounterAll | Cost$ W B T Sac<1/Creature.Other/another creature> | ValidCards$ Creature.YouCtrl | CounterType$ P1P1 | CounterNum$ 1 | SpellDescription$ Put a +1/+1 counter on each creature you control.
DeckHas:Ability$Counters|Sacrifice
Oracle:Menace\n{W}{B}, {T}, Sacrifice another creature: Put a +1/+1 counter on each creature you control.

View File

@@ -0,0 +1,11 @@
Name:Garna, Bloodfist of Keld
ManaCost:1 B R R
Types:Legendary Creature Human Berserker
PT:4/3
T:Mode$ ChangesZone | ValidCard$ Creature.Other+YouCtrl | Origin$ Battlefield | Destination$ Graveyard | Execute$ TrigBranch | TriggerZones$ Battlefield | TriggerDescription$ Whenever another creature you control dies, draw a card if it was attacking. Otherwise, CARDNAME deals 1 damage to each opponent.
SVar:TrigBranch:DB$ Branch | BranchConditionSVar$ X | BranchConditionSVarCompare$ GE1 | TrueSubAbility$ DBDraw | FalseSubAbility$ DBDamage
SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ 1
SVar:DBDamage:DB$ DealDamage | Defined$ Opponent | NumDmg$ 1
SVar:X:TriggeredCard$Valid Creature.attacking
DeckHas:Ability$Sacrifice
Oracle:Whenever another creature you control dies, draw a card if it was attacking. Otherwise, Garna, Bloodfist of Keld deals 1 damage to each opponent.

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,15 @@
Name:Golden Argosy
ManaCost:4
Types:Artifact Vehicle
PT:3/6
T:Mode$ BecomesCrewed | ValidVehicle$ Card.Self | Execute$ RememberCrew | Static$ True
SVar:RememberCrew:DB$ PumpAll | ValidCards$ Creature.TriggeredCrew | RememberAllPumped$ True
T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigFlicker | TriggerDescription$ Whenever CARDNAME attacks, exile each creature that crewed it this turn. Return them to the battlefield tapped under their owner's control at the beginning of the next end step.
SVar:TrigFlicker:DB$ ChangeZoneAll | ChangeType$ Creature.IsRemembered | Mandatory$ True | Origin$ Battlefield | Destination$ Exile | SubAbility$ DelTrig
SVar:DelTrig:DB$ DelayedTrigger | Mode$ Phase | Phase$ End of Turn | Execute$ TrigReturn | RememberObjects$ RememberedLKI | SubAbility$ DBCleanup | TriggerDescription$ Return them to the battlefield tapped under their owner's control at the beginning of the next end step.
SVar:TrigReturn:DB$ ChangeZone | Origin$ Exile | Destination$ Battlefield | Defined$ DelayTriggerRemembered | Tapped$ True
T:Mode$ Phase | Phase$ End of Turn | Static$ True | Execute$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
K:Crew:1
SVar:HasAttackEffect:TRUE
Oracle:Whenever Golden Argosy attacks, exile each creature that crewed it this turn. Return them to the battlefield tapped under their owner's control at the beginning of the next end step.\nCrew 1 (Tap any number of creatures you control with total power 1 or more: This Vehicle becomes an artifact creature until end of turn.)

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,11 @@
Name:Rona, Sheoldred's Faithful
ManaCost:1 U B B
Types:Legendary Creature Human Wizard
PT:3/4
T:Mode$ SpellCast | ValidCard$ Instant,Sorcery | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigDrain | TriggerDescription$ Whenever you cast an instant or sorcery spell, each opponent loses 1 life.
SVar:TrigDrain:DB$ LoseLife | Defined$ Opponent | LifeAmount$ 1
SVar:AltCost:Cost$ 1 U B B Discard<2/Card> | ActivationZone$ Graveyard | Description$ You may cast CARDNAME from your graveyard by discarding two cards in addition to paying its other costs.
DeckHas:Ability$Discard|Graveyard
DeckNeeds:Type$Instant|Sorcery
SVar:DiscardMe:1
Oracle:Whenever you cast an instant or sorcery spell, each opponent loses 1 life.\nYou may cast Rona, Sheoldred's Faithful from your graveyard by discarding two cards in addition to paying its other costs.

View File

@@ -0,0 +1,8 @@
Name:Rona's Vortex
ManaCost:U
Types:Instant
K:Kicker:2 B
A:SP$ ChangeZone | ValidTgts$ Creature.YouDontCtrl,Planeswalker.YouDontCtrl | TgtPrompt$ Select target creature or planeswalker | Origin$ Battlefield | Destination$ Hand | SubAbility$ DBChangeZone | ConditionCheckSVar$ X | ConditionSVarCompare$ EQ0 | SpellDescription$ Return target creature or planeswalker you don't control to its owner's hand. If this spell was kicked, put that permanent on the bottom of its owner's library instead.
SVar:DBChangeZone:DB$ ChangeZone | Defined$ Targeted | Origin$ Battlefield | Destination$ Library | LibraryPosition$ -1 | Condition$ Kicked
SVar:X:Count$TimesKicked
Oracle:Kicker {2}{B} (You may pay an additional {2}{B} as you cast this spell.)\nReturn target creature or planeswalker you don't control to its owner's hand. If this spell was kicked, put that permanent on the bottom of its owner's library instead.

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