mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 20:28:00 +00:00
LCI – Player.descended support and cards
This commit is contained in:
@@ -98,6 +98,7 @@ public class GameCopier {
|
|||||||
newPlayer.setCounters(Maps.newHashMap(origPlayer.getCounters()));
|
newPlayer.setCounters(Maps.newHashMap(origPlayer.getCounters()));
|
||||||
newPlayer.setBlessing(origPlayer.hasBlessing());
|
newPlayer.setBlessing(origPlayer.hasBlessing());
|
||||||
newPlayer.setRevolt(origPlayer.hasRevolt());
|
newPlayer.setRevolt(origPlayer.hasRevolt());
|
||||||
|
newPlayer.setDescended(origPlayer.getDescended());
|
||||||
newPlayer.setLibrarySearched(origPlayer.getLibrarySearched());
|
newPlayer.setLibrarySearched(origPlayer.getLibrarySearched());
|
||||||
newPlayer.setSpellsCastLastTurn(origPlayer.getSpellsCastLastTurn());
|
newPlayer.setSpellsCastLastTurn(origPlayer.getSpellsCastLastTurn());
|
||||||
for (int j = 0; j < origPlayer.getSpellsCastThisTurn(); j++) {
|
for (int j = 0; j < origPlayer.getSpellsCastThisTurn(); j++) {
|
||||||
|
|||||||
@@ -2254,6 +2254,10 @@ public class AbilityUtils {
|
|||||||
return doXMath(player.getSurveilThisTurn(), expr, c, ctb);
|
return doXMath(player.getSurveilThisTurn(), expr, c, ctb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (sq[0].equals("YouDescendedThisTurn")) {
|
||||||
|
return doXMath(player.getDescended(), expr, c, ctb);
|
||||||
|
}
|
||||||
|
|
||||||
if (sq[0].equals("YouCastThisGame")) {
|
if (sq[0].equals("YouCastThisGame")) {
|
||||||
return doXMath(player.getSpellsCastThisGame(), expr, c, ctb);
|
return doXMath(player.getSpellsCastThisGame(), expr, c, ctb);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -182,6 +182,7 @@ public class Player extends GameEntity implements Comparable<Player> {
|
|||||||
private final Map<String, Integer> notedNum = Maps.newHashMap();
|
private final Map<String, Integer> notedNum = Maps.newHashMap();
|
||||||
|
|
||||||
private boolean revolt = false;
|
private boolean revolt = false;
|
||||||
|
private int descended = 0;
|
||||||
|
|
||||||
private List<Card> sacrificedThisTurn = new ArrayList<>();
|
private List<Card> sacrificedThisTurn = new ArrayList<>();
|
||||||
|
|
||||||
@@ -2132,6 +2133,16 @@ public class Player extends GameEntity implements Comparable<Player> {
|
|||||||
revolt = val;
|
revolt = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final int getDescended() {
|
||||||
|
return descended;
|
||||||
|
}
|
||||||
|
public final void descend() {
|
||||||
|
descended++;
|
||||||
|
}
|
||||||
|
public final void setDescended(final int n) {
|
||||||
|
descended = n;
|
||||||
|
}
|
||||||
|
|
||||||
public final boolean hasDelirium() {
|
public final boolean hasDelirium() {
|
||||||
return CardFactoryUtil.getCardTypesFromList(getCardsIn(ZoneType.Graveyard)) >= 4;
|
return CardFactoryUtil.getCardTypesFromList(getCardsIn(ZoneType.Graveyard)) >= 4;
|
||||||
}
|
}
|
||||||
@@ -2526,6 +2537,7 @@ public class Player extends GameEntity implements Comparable<Player> {
|
|||||||
resetSacrificedThisTurn();
|
resetSacrificedThisTurn();
|
||||||
resetVenturedThisTurn();
|
resetVenturedThisTurn();
|
||||||
setRevolt(false);
|
setRevolt(false);
|
||||||
|
setDescended(0);
|
||||||
setSpellsCastLastTurn(getSpellsCastThisTurn());
|
setSpellsCastLastTurn(getSpellsCastThisTurn());
|
||||||
resetSpellsCastThisTurn();
|
resetSpellsCastThisTurn();
|
||||||
setLifeLostLastTurn(getLifeLostThisTurn());
|
setLifeLostLastTurn(getLifeLostThisTurn());
|
||||||
|
|||||||
@@ -79,6 +79,10 @@ public class PlayerProperty {
|
|||||||
if (!player.equals(source.getOwner())) {
|
if (!player.equals(source.getOwner())) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
} else if (property.equals("descended")) {
|
||||||
|
if (!(player.getDescended() > 0)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
} else if (property.equals("isMonarch")) {
|
} else if (property.equals("isMonarch")) {
|
||||||
if (!player.isMonarch()) {
|
if (!player.isMonarch()) {
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -121,6 +121,10 @@ public class Zone implements java.io.Serializable, Iterable<Card> {
|
|||||||
c.setTapped(false);
|
c.setTapped(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (zoneType == (ZoneType.Graveyard) && c.isPermanent() && !c.isToken()) {
|
||||||
|
c.getOwner().descend();
|
||||||
|
}
|
||||||
|
|
||||||
c.setZone(this);
|
c.setZone(this);
|
||||||
|
|
||||||
if ((zoneType == ZoneType.Battlefield || !c.isToken()) || (zoneType == ZoneType.Stack && c.getCopiedPermanent() != null)) {
|
if ((zoneType == ZoneType.Battlefield || !c.isToken()) || (zoneType == ZoneType.Stack && c.getCopiedPermanent() != null)) {
|
||||||
|
|||||||
9
forge-gui/res/cardsfolder/upcoming/broodrage_mycoid.txt
Normal file
9
forge-gui/res/cardsfolder/upcoming/broodrage_mycoid.txt
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
Name:Broodrage Mycoid
|
||||||
|
ManaCost:3 B
|
||||||
|
Types:Creature Fungus
|
||||||
|
PT:4/3
|
||||||
|
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You.descended | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ At the beginning of your end step, if you descended this turn, create a 1/1 black Fungus creature token with "This creature can't block." (You descended if a permanent card was put into your graveyard from anywhere.)
|
||||||
|
SVar:TrigToken:DB$ Token | TokenScript$ b_1_1_fungus_noblock
|
||||||
|
DeckHas:Ability$Token & Type$Fungus
|
||||||
|
DeckHints:Ability$Sacrifice
|
||||||
|
Oracle:At the beginning of your end step, if you descended this turn, create a 1/1 black Fungus creature token with "This creature can't block." (You descended if a permanent card was put into your graveyard from anywhere.)
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
Name:Enterprising Scallywag
|
||||||
|
ManaCost:1 R
|
||||||
|
Types:Creature Goblin Pirate
|
||||||
|
PT:2/2
|
||||||
|
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You.descended | TriggerZones$ Battlefield | Execute$ TrigTreasure | TriggerDescription$ At the beginning of your end step, if you descended this turn, create a Treasure token. (You descended if a permanent card was put into your graveyard from anywhere.)
|
||||||
|
SVar:TrigTreasure:DB$ Token | TokenScript$ c_a_treasure_sac
|
||||||
|
DeckHas:Ability$Token|Sacrifice & Type$Treasure|Artifact
|
||||||
|
DeckHints:Ability$Sacrifice
|
||||||
|
Oracle:At the beginning of your end step, if you descended this turn, create a Treasure token. (You descended if a permanent card was put into your graveyard from anywhere.)
|
||||||
12
forge-gui/res/cardsfolder/upcoming/stalactite_stalker.txt
Normal file
12
forge-gui/res/cardsfolder/upcoming/stalactite_stalker.txt
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
Name:Stalactite Stalker
|
||||||
|
ManaCost:B
|
||||||
|
Types:Creature Goblin Rogue
|
||||||
|
PT:1/1
|
||||||
|
K:Menace
|
||||||
|
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You.descended | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ At the beginning of your end step, if you descended this turn, put a +1/+1 counter on CARDNAME.
|
||||||
|
SVar:TrigPutCounter:DB$ PutCounter | CounterType$ P1P1
|
||||||
|
A:AB$ Pump | Cost$ 2 B Sac<1/CARDNAME> | ValidTgts$ Creature | IsCurse$ True | NumAtt$ -X | NumDef$ -X | StackDescription$ REP Target creature_{c:Targeted} | SpellDescription$ Target creature gets -X/-X until end of turn, where X is CARDNAME's power.
|
||||||
|
SVar:X:Sacrificed$CardPower
|
||||||
|
DeckHas:Ability$Counters|Sacrifice
|
||||||
|
DeckHints:Ability$Sacrifice
|
||||||
|
Oracle:Menace\nAt the beginning of your end step, if you descended this turn, put a +1/+1 counter on Stalactite Stalker.\n{2}{B}, Sacrifice Stalactite Stalker: Target creature gets -X/-X until end of turn, where X is Stalactite Stalker's power.
|
||||||
13
forge-gui/res/cardsfolder/upcoming/the_mycotyrant.txt
Normal file
13
forge-gui/res/cardsfolder/upcoming/the_mycotyrant.txt
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
Name:The Mycotyrant
|
||||||
|
ManaCost:1 B G
|
||||||
|
Types:Legendary Creature Elder Fungus
|
||||||
|
PT:*/*
|
||||||
|
K:Trample
|
||||||
|
S:Mode$ Continuous | EffectZone$ All | CharacteristicDefining$ True | SetPower$ Y | SetToughness$ Y | Description$ CARDNAME's power and toughness are each equal to the number of creatures you control that are Fungi and/or Saprolings.
|
||||||
|
SVar:Y:Count$Valid Creature.Fungus+YouCtrl,Creature.Saproling+YouCtrl
|
||||||
|
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigToken | TriggerDescription$ At the beginning of your end step, create X 1/1 black Fungus creature tokens with "This creature can't block," where X is the number of times you descended this turn. (You descend each time a permanent card is put into your graveyard from anywhere.)
|
||||||
|
SVar:TrigToken:DB$ Token | TokenAmount$ X | TokenScript$ b_1_1_fungus_noblock
|
||||||
|
SVar:X:Count$YouDescendedThisTurn
|
||||||
|
DeckHas:Ability$Token & Type$Fungus
|
||||||
|
DeckHints:Type$Fungus|Saproling & Ability$Sacrifice
|
||||||
|
Oracle:Trample\nThe Mycotyrant's power and toughness are each equal to the number of creatures you control that are Fungi and/or Saprolings.\nAt the beginning of your end step, create X 1/1 black Fungus creature tokens with "This creature can't block," where X is the number of times you descended this turn. (You descend each time a permanent card is put into your graveyard from anywhere.)
|
||||||
7
forge-gui/res/tokenscripts/b_1_1_fungus_noblock.txt
Normal file
7
forge-gui/res/tokenscripts/b_1_1_fungus_noblock.txt
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
Name:Fungus Token
|
||||||
|
ManaCost:no cost
|
||||||
|
Types:Creature Fungus
|
||||||
|
Colors:black
|
||||||
|
PT:1/1
|
||||||
|
S:Mode$ CantBlockBy | ValidBlocker$ Creature.Self | Description$ This creature can't block.
|
||||||
|
Oracle:This creature can't block.
|
||||||
Reference in New Issue
Block a user