Implement Dungeon mechanism and related spoiled cards

This commit is contained in:
Lyu Zong-Hong
2021-06-26 18:29:14 +09:00
parent 9eabe65496
commit be40fce2c6
31 changed files with 482 additions and 28 deletions

View File

@@ -0,0 +1,9 @@
Name:Cloister Gargoyle
ManaCost:2 W
Types:Artifact Creature Gargoyle
PT:0/4
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ DBVenture | TriggerDescription$ When CARDNAME enters the battlefield, venture into the dungeon. (Enter the first room or advance to the next room.)
SVar:DBVenture:DB$ Venture | Defined$ You
S:Mode$ Continuous | Affected$ Card.Self | AddPower$ 3 | AddKeyword$ Flying | CheckSVar$ X | SVarCompare$ GE1 | Description$ As long as you've completed a dungeon, CARDNAME gets +3/+0 and has flying.
SVar:X:PlayerCountPropertyYou$DungeonsCompleted
Oracle:When Cloister Gargoyle enters the battlefield, venture into the dungeon. (Enter the first room or advance to the next room.)\nAs long as you've completed a dungeon, Cloister Gargoyle gets +3/+0 and has flying.

View File

@@ -0,0 +1,8 @@
Name:Dungeon Crawler
ManaCost:B
Types:Creature Zombie
PT:2/1
K:CARDNAME enters the battlefield tapped.
T:Mode$ DungeonCompleted | ValidPlayer$ You | TriggerZones$ Graveyard | OptionalDecider$ You | Execute$ DBReturn | TriggerDescription$ Whenever you complete a dungeon, you may return CARDNAME from your graveyard to your hand.
SVar:DBReturn:DB$ChangeZone | Origin$ Graveyard | Destination$ Hand | Defined$ Self
Oracle:Dungeon Crawler enters the battlefield tapped.\nWhenever you complete a dungeon, you may return Dungeon Crawler from your graveyard to your hand.

View File

@@ -0,0 +1,19 @@
Name:Dungeon of the Mad Mage
ManaCost:no cost
Types:Dungeon
K:Dungeon:DBPortal,DBDungeon,DBBazaar,DBCaverns,DBLost,DBRunestone,DBGraveyard,DBMines,DBLair
SVar:DBPortal:DB$ GainLife | Defined$ You | LifeAmount$ 1 | RoomName$ Yawning Portal | SpellDescription$ You gain 1 life. | NextRoom$ DBDungeon
SVar:DBDungeon:DB$ Scry | ScryNum$ 1 | RoomName$ Dungeon Level | SpellDescription$ Scry 1. | NextRoom$ DBBazaar,DBCaverns
SVar:DBBazaar:DB$ Token | TokenScript$ c_a_treasure_sac | TokenOwner$ You | RoomName$ Goblin Bazaar | SpellDescription$ Create a Treasure token. | NextRoom$ DBLost
SVar:DBCaverns:DB$ Pump | ValidTgts$ Creature | KW$ HIDDEN CARDNAME can't attack. | Duration$ UntilYourNextTurn | IsCurse$ True | RoomName$ Twisted Caverns | SpellDescription$ Target creature can't attack until your next turn. | NextRoom$ DBLost
SVar:DBLost:DB$ Scry | ScryNum$ 2 | RoomName$ Lost Level | SpellDescription$ Scry 2. | NextRoom$ DBRunestone,DBGraveyard
SVar:DBRunestone:DB$ Dig | Defined$ You | DigNum$ 2 | ChangeNum$ All | DestinationZone$ Exile | RememberChanged$ True | SubAbility$ DBEffect | RoomName$ Runestone Caverns | SpellDescription$ Exile the top two cards of your library. You may play them. | NextRoom$ DBMines
SVar:DBEffect:DB$ Effect | StaticAbilities$ STPlay | RememberObjects$ RememberedCard | Duration$ Permanent | ForgetOnMoved$ Exile | SubAbility$ DBCleanup
SVar:STPlay:Mode$ Continuous | EffectZone$ Command | AffectedZone$ Exile | Affected$ Card.IsRemembered | MayPlay$ True | Description$ You may play them.
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:DBGraveyard:DB$ Token | TokenScript$ b_1_1_skeleton | TokenOwner$ You | TokenAmount$ 2 | RoomName$ Muiral's Graveyard | SpellDescription$ Create two 1/1 black Skeleton creature tokens. | NextRoom$ DBMines
SVar:DBMines:DB$ Scry | ScryNum$ 3 | RoomName$ Deep Mines | SpellDescription$ Scry 3. | NextRoom$ DBLair
SVar:DBLair:DB$ Draw | Defined$ You | NumCards$ 3 | RememberDrawn$ True | SubAbility$ DBReveal | RoomName$ Mad Wizard's Lair | SpellDescription$ Draw three cards and reveal them. You may cast one of them without paying its mana cost.
SVar:DBReveal:DB$ Reveal | Defined$ You | RevealDefined$ Remembered | SubAbility$ DBPlay
SVar:DBPlay:DB$ Play | Defined$ Remembered.nonLand | WithoutManaCost$ True | Optional$ True | SubAbility$ DBCleanup
Oracle:(1) Yawning Portal — You gain 1 life. (→ 2)\n(2) Dungeon Level — Scry 1. (→ 3a or 3b)\n(3a) Goblin Bazaar — Create a Treasure token. (→ 4)\n(3b) Twisted Caverns — Target creature can't attack until your next turn. (→ 4)\n(4) Lost Level — Scry 2. (→ 5a or 5b)\n(5a) Runestone Caverns — Exile the top two cards of your library. You may play them. (→ 6)\n(5b) Muiral's Graveyard — Create two 1/1 black Skeleton creature tokens. (→ 6)\n(6) Deep Mines — Scry 3. (→ 7)\n(7) Mad Wizard's Lair — Draw three cards and reveal them. You may cast one of them without paying its mana cost.

View File

@@ -0,0 +1,15 @@
Name:Ellywick Tumblestrum
ManaCost:2 G G
Types:Legendary Planeswalker Ellywick
Loyalty:4
A:AB$ Venture | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | Defined$ You | SpellDescription$ Venture into the dungeon. (Enter the first room or advance to the next room.)
A:AB$ Dig | Cost$ SubCounter<2/LOYALTY> | Planeswalker$ True | DigNum$ 6 | ChangeNum$ 1 | Optional$ True | ChangeValid$ Creature | ForceRevealToController$ True | RememberChanged$ True | RestRandomOrder$ True | SubAbility$ DBGainLife | SpellDescription$ Look at the top six cards of your library. You may reveal a creature card from among them and put it into your hand. If it's legendary, you gain 3 life. Put the rest on the bottom of your library in a random order.
SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 3 | ConditionCheckSVar$ IsLegendary | ConditionSVarCompare$ GE1 | SubAbility$ DBCleanup
SVar:IsLegendary:Count$ValidHand Creature.Legendary+IsRemembered
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
A:AB$ Effect | Cost$ SubCounter<7/LOYALTY> | Planeswalker$ True | Ultimate$ True | Name$ Emblem - Ellywick Tumblestrum | Image$ emblem_ellywick_tumblestrum | StaticAbilities$ STOverrun | Duration$ Permanent | AILogic$ Always | SpellDescription$ You get an emblem with "Creatures you control have trample and haste and get +2/+2 for each differently named dungeon you've completed."
SVar:STOverrun:Mode$ Continuous | EffectZone$ Command | Affected$ Creature.YouCtrl | AffectedZone$ Battlefield | AddPower$ X | AddToughness$ X | AddKeyword$ Trample & Haste | Description$ Creatures you control have trample and haste and get +2/+2 for each differently named dungeon you've completed.
SVar:X:PlayerCountPropertyYou$DifferentlyNamedDungeonsCompleted/Twice
Oracle:[+1]: Venture into the dungeon. (Enter the first room or advance to the next room.)
[2]: Look at the top six cards of your library. You may reveal a creature card from among them and put it into your hand. If it's legendary, you gain 3 life. Put the rest on the bottom of your library in a random order.
[7]: You get an emblem with "Creatures you control have trample and haste and get +2/+2 for each differently named dungeon you've completed."

View File

@@ -0,0 +1,7 @@
Name:Gloom Stalker
ManaCost:2 W
Types:Creature Dwarf Ranger
PT:2/3
S:Mode$ Continuous | Affected$ Card.Self | AddKeyword$ Double Strike | CheckSVar$ X | SVarCompare$ GE1 | Description$ As long as you've completed a dungeon, CARDNAME has double strike.
SVar:X:PlayerCountPropertyYou$DungeonsCompleted
Oracle:As long as you've completed a dungeon, Gloom Stalker has double strike.

View File

@@ -0,0 +1,13 @@
Name:Lost Mine of Phandelver
ManaCost:no cost
Types:Dungeon
K:Dungeon:DBEntrance,DBGoblinLair,DBMineTunnels,DBStoreroom,DBDarkPool,DBFungiCavern,DBTempleDumathoin
SVar:DBEntrance:DB$ Scry | ScryNum$ 1 | RoomName$ Cave Entrance | SpellDescription$ Scry 1. | NextRoom$ DBGoblinLair,DBMineTunnels
SVar:DBGoblinLair:DB$ Token | TokenScript$ r_1_1_goblin | TokenOwner$ You | RoomName$ Goblin Lair | SpellDescription$ Create a 1/1 red Goblin creature token. | NextRoom$ DBStoreroom,DBDarkPool
SVar:DBMineTunnels:DB$ Token | TokenScript$ c_a_treasure_sac | TokenOwner$ You | RoomName$ Mine Tunnels | SpellDescription$ Create a Treasure token. | NextRoom$ DBDarkPool,DBFungiCavern
SVar:DBStoreroom:DB$ PutCounter | ValidTgts$ Creature | CounterType$ P1P1 | CounterType$ P1P1 | CounterNum$ 1 | RoomName$ Storeroom | SpellDescription$ Put a +1/+1 counter on target creature. | NextRoom$ DBTempleDumathoin
SVar:DBDarkPool:DB$ LoseLife | Defined$ Player.Opponent | LifeAmount$ 1 | SubAbility$ DBGainLife | RoomName$ Dark Pool | SpellDescription$ Each opponent loses 1 life and you gain 1 life. | NextRoom$ DBTempleDumathoin
SVar:DBGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 1
SVar:DBFungiCavern:DB$ Pump | ValidTgts$ Creature | NumAtt$ -4 | Duration$ UntilYourNextTurn | IsCurse$ True | RoomName$ Fungi Cavern | SpellDescription$ Target creature gets -4/-0 until your next turn. | NextRoom$ DBTempleDumathoin
SVar:DBTempleDumathoin:DB$ Draw | Defined$ You | NumCards$ 1 | RoomName$ Temple of Dumathoin | SpellDescription$ Draw a card.
Oracle:(1) Cave Entrance — Scry 1. (→ 2a or 2b)\n(2a) Goblin Lair — Create a 1/1 red Goblin creature token. (→ 3a or 3b)\n(2b) Mine Tunnels — Create a Treasure token. (→ 3b or 3c)\n(3a) Storeroom — Put a +1/+1 counter on target creature. (→ 4)\n(3b) Dark Pool — Each opponent loses 1 life and you gain 1 life. (→ 4)\n(3c) Fungi Cavern — Target creature gets -4/-0 until your next turn. (→ 4)\n(4) Temple of Dumathoin — Draw a card.

View File

@@ -0,0 +1,11 @@
Name:Nadaar, Selfless Paladin
ManaCost:2 W
Types:Legendary Creature Dragon Knight
PT:3/3
K:Vigilance
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ DBVenture | TriggerDescription$ Whenever CARDNAME enters the battlefield or attacks, venture into the dungeon. (Enter the first room or advance to the next room.)
T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ DBVenture | Secondary$ True | TriggerDescription$ Whenever CARDNAME enters the battlefield or attacks, venture into the dungeon. (Enter the first room or advance to the next room.)
SVar:DBVenture:DB$ Venture | Defined$ You
S:Mode$ Continuous | Affected$ Creature.YouCtrl+Other | AddPower$ 1 | AddToughness$ 1 | CheckSVar$ X | SVarCompare$ GE1 | Description$ Other creatures you control get +1/+1 as long as you've completed a dungeon.
SVar:X:PlayerCountPropertyYou$DungeonsCompleted
Oracle:Vigilance\nWhenever Nadaar, Selfless Paladin enters the battlefield or attacks, venture into the dungeon. (Enter the first room or advance to the next room.)\nOther creatures you control get +1/+1 as long as you've completed a dungeon.

View File

@@ -0,0 +1,7 @@
Name:Shortcut Seeker
ManaCost:3 U
Types:Creature Human Rogue
PT:2/5
T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ DBVenture | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, venture into the dungeon. (Enter the first room or advance to the next room.)
SVar:DBVenture:DB$ Venture | Defined$ You
Oracle:Whenever Shortcut Seeker deals combat damage to a player, venture into the dungeon. (Enter the first room or advance to the next room.)

View File

@@ -0,0 +1,15 @@
Name:Tomb of Annihilation
ManaCost:no cost
Types:Dungeon
K:Dungeon:DBEntry,DBVeilsOfFear,DBOubliette,DBSandfallCell,DBCradleDeathGod
SVar:DBEntry:DB$ LoseLife | Defined$ Player | LifeAmount$ 1 | RoomName$ Trapped Entry | SpellDescription$ Each player loses 1 life. | NextRoom$ DBVeilsOfFear,DBOubliette
SVar:DBVeilsOfFear:DB$ RepeatEach | RepeatSubAbility$ DBLoseLife1 | RepeatPlayers$ Player | RoomName$ Veils of Fear | SpellDescription$ Each player loses 2 life unless they discard a card. | NextRoom$ DBSandfallCell
SVar:DBLoseLife1:DB$ LoseLife | Defined$ Player.IsRemembered | LifeAmount$ 2 | UnlessCost$ Discard<1/Card> | UnlessPayer$ Remembered
SVar:DBOubliette:DB$ Discard | Defined$ You | NumCards$ 1 | Mode$ TgtChoose | SubAbility$ DBSacArtifact | RoomName$ Oubliette | SpellDescription$ Discard a card and sacrifice an artifact, a creature, and a land. | NextRoom$ DBCradleDeathGod
SVar:DBSacArtifact:DB$ Sacrifice | Defined$ You | SacValid$ Artifact | SubAbility$ DBSacCreature
SVar:DBSacCreature:DB$ Sacrifice | Defined$ You | SacValid$ Creature | SubAbility$ DBSacLand
SVar:DBSacLand:DB$ Sacrifice | Defined$ You | SacValid$ Land
SVar:DBSandfallCell:DB$ RepeatEach | RepeatSubAbility$ DBLoseLife2 | RepeatPlayers$ Player | RoomName$ Sandfall Cell | SpellDescription$ Each player loses 2 life unless they sacrifice an artifact, a creature, or a land. | NextRoom$ DBCradleDeathGod
SVar:DBLoseLife2:DB$ LoseLife | Defined$ Player.IsRemembered | LifeAmount$ 2 | UnlessCost$ Sac<1/Artifact;Creature;Land/an artifact, a creature, or a land> | UnlessPayer$ Remembered
SVar:DBCradleDeathGod:DB$ Token | TokenScript$ b_4_4_the_atropal_deathtouch | TokenOwner$ You | RoomName$ Cradle of the Death God | SpellDescription$ Create The Atropal, a legendary 4/4 black God Horror creature token with deathtouch.
Oracle:(1) Trapped Entry — Each player loses 1 life. (→ 2a or 2b)\n(2a) Veils of Fear — Each player loses 2 life unless they discard a card. (→ 3)\n(2b) Oubliette — Discard a card and sacrifice an artifact, a creature, and a land. (→ 4)\n(3) Sandfall Cell — Each player loses 2 life unless they sacrifice an artifact, a creature, or a land. (→ 4)\n(4) Cradle of the Death God — Create The Atropal, a legendary 4/4 black God Horror creature token with deathtouch.

View File

@@ -324,7 +324,8 @@ Dihada
Domri
Dovin
Duck
Dungeon-Master
Dungeon Master
Ellywick
Elspeth
Estrid
Freyalise

View File

@@ -0,0 +1,6 @@
Name:Skeleton
ManaCost:no cost
Types:Creature Skeleton
Colors:black
PT:1/1
Oracle:

View File

@@ -0,0 +1,7 @@
Name:The Atropal
ManaCost:no cost
Types:Legendary Creature God Horror
Colors:black
PT:4/4
K:Deathtouch
Oracle:Deathtouch

View File

@@ -126,7 +126,7 @@ public class CardDetailUtil {
public static String getCurrentColors(final CardStateView c) {
ColorSet curColors = c.getColors();
String strCurColors = "";
String strCurColors = "";
if (curColors.hasWhite()) { strCurColors += "{W}"; }
if (curColors.hasBlue()) { strCurColors += "{U}"; }
@@ -140,7 +140,7 @@ public class CardDetailUtil {
return strCurColors;
}
public static DetailColors getRarityColor(final CardRarity rarity) {
switch (rarity) {
case Uncommon:
@@ -251,7 +251,7 @@ public class CardDetailUtil {
origIdent = origCard != null ? getCurrentColors(origCard.isFaceDown() ? CardView.get(origCard).getState(false) : CardView.get(origCard).getCurrentState()) : "";
} catch(Exception ex) {
System.err.println("Unexpected behavior: card " + card.getName() + "[" + card.getId() + "] tripped an exception when trying to process current card colors.");
}
}
isChanged = !curColors.equals(origIdent);
}
@@ -477,6 +477,15 @@ public class CardDetailUtil {
area.append(")");
}
// dungeon room
if (card.getCurrentRoom() != null && !card.getCurrentRoom().isEmpty()) {
if (area.length() != 0) {
area.append("\n");
}
area.append("(In room: ");
area.append(card.getCurrentRoom()).append(")");
}
// a card has something attached to it
if (card.hasCardAttachments()) {
if (area.length() != 0) {