mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 20:28:00 +00:00
Merge branch 'master' into newmaster
This commit is contained in:
@@ -275,7 +275,12 @@ public class GameAction {
|
|||||||
lastKnownInfo = CardUtil.getLKICopy(c);
|
lastKnownInfo = CardUtil.getLKICopy(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
copied = CardFactory.copyCard(c, false);
|
// CR 707.12 casting of a card copy, don't copy it again
|
||||||
|
if (zoneTo.is(ZoneType.Stack) && c.isRealToken()) {
|
||||||
|
copied = c;
|
||||||
|
} else {
|
||||||
|
copied = CardFactory.copyCard(c, false);
|
||||||
|
}
|
||||||
|
|
||||||
if (zoneTo.is(ZoneType.Stack)) {
|
if (zoneTo.is(ZoneType.Stack)) {
|
||||||
// when moving to stack, copy changed card information
|
// when moving to stack, copy changed card information
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ public class AbandonEffect extends SpellAbilityEffect {
|
|||||||
if (sa.hasParam("RememberAbandoned")) {
|
if (sa.hasParam("RememberAbandoned")) {
|
||||||
source.addRemembered(source);
|
source.addRemembered(source);
|
||||||
}
|
}
|
||||||
|
|
||||||
game.getTriggerHandler().suppressMode(TriggerType.ChangesZone);
|
game.getTriggerHandler().suppressMode(TriggerType.ChangesZone);
|
||||||
controller.getZone(ZoneType.Command).remove(source);
|
controller.getZone(ZoneType.Command).remove(source);
|
||||||
game.getTriggerHandler().clearSuppression(TriggerType.ChangesZone);
|
game.getTriggerHandler().clearSuppression(TriggerType.ChangesZone);
|
||||||
|
|||||||
@@ -35,13 +35,13 @@ public class BalanceEffect extends SpellAbilityEffect {
|
|||||||
Game game = activator.getGame();
|
Game game = activator.getGame();
|
||||||
String valid = sa.getParamOrDefault("Valid", "Card");
|
String valid = sa.getParamOrDefault("Valid", "Card");
|
||||||
ZoneType zone = sa.hasParam("Zone") ? ZoneType.smartValueOf(sa.getParam("Zone")) : ZoneType.Battlefield;
|
ZoneType zone = sa.hasParam("Zone") ? ZoneType.smartValueOf(sa.getParam("Zone")) : ZoneType.Battlefield;
|
||||||
|
|
||||||
int min = Integer.MAX_VALUE;
|
int min = Integer.MAX_VALUE;
|
||||||
|
|
||||||
final FCollectionView<Player> players = game.getPlayersInTurnOrder();
|
final FCollectionView<Player> players = game.getPlayersInTurnOrder();
|
||||||
final List<CardCollection> validCards = new ArrayList<>(players.size());
|
final List<CardCollection> validCards = new ArrayList<>(players.size());
|
||||||
Map<Player, CardCollectionView> discardedMap = Maps.newHashMap();
|
Map<Player, CardCollectionView> discardedMap = Maps.newHashMap();
|
||||||
|
|
||||||
for (int i = 0; i < players.size(); i++) {
|
for (int i = 0; i < players.size(); i++) {
|
||||||
// Find the minimum of each Valid per player
|
// Find the minimum of each Valid per player
|
||||||
validCards.add(CardLists.getValidCards(players.get(i).getCardsIn(zone), valid, activator, source, sa));
|
validCards.add(CardLists.getValidCards(players.get(i).getCardsIn(zone), valid, activator, source, sa));
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ public class BidLifeEffect extends SpellAbilityEffect {
|
|||||||
} else {
|
} else {
|
||||||
startBidding = 0;
|
startBidding = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sa.hasParam("OtherBidder")) {
|
if (sa.hasParam("OtherBidder")) {
|
||||||
bidPlayers.add(activator);
|
bidPlayers.add(activator);
|
||||||
bidPlayers.addAll(AbilityUtils.getDefinedPlayers(host, sa.getParam("OtherBidder"), sa));
|
bidPlayers.addAll(AbilityUtils.getDefinedPlayers(host, sa.getParam("OtherBidder"), sa));
|
||||||
@@ -62,7 +62,7 @@ public class BidLifeEffect extends SpellAbilityEffect {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
host.setChosenNumber(bid);
|
host.setChosenNumber(bid);
|
||||||
host.addRemembered(winner);
|
host.addRemembered(winner);
|
||||||
final SpellAbility action = sa.getAdditionalAbility("BidSubAbility");
|
final SpellAbility action = sa.getAdditionalAbility("BidSubAbility");
|
||||||
|
|||||||
@@ -340,6 +340,10 @@ public class CountersPutEffect extends SpellAbilityEffect {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (CounterType ct : counterTypes) {
|
for (CounterType ct : counterTypes) {
|
||||||
|
if (sa.hasParam("AltChoiceForEach")) {
|
||||||
|
String typeChoices = sa.getParam("AltChoiceForEach") + "," + ct.toString();
|
||||||
|
ct = chooseTypeFromList(sa, typeChoices, obj, pc);
|
||||||
|
}
|
||||||
resolvePerType(sa, placer, ct, counterAmount, table, false);
|
resolvePerType(sa, placer, ct, counterAmount, table, false);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -659,7 +663,10 @@ public class CountersPutEffect extends SpellAbilityEffect {
|
|||||||
List<CounterType> choices = Lists.newArrayList();
|
List<CounterType> choices = Lists.newArrayList();
|
||||||
for (String s : list.split(",")) {
|
for (String s : list.split(",")) {
|
||||||
if (!s.equals("") && (!sa.hasParam("UniqueType") || obj.getCounters(CounterType.getType(s)) == 0)) {
|
if (!s.equals("") && (!sa.hasParam("UniqueType") || obj.getCounters(CounterType.getType(s)) == 0)) {
|
||||||
choices.add(CounterType.getType(s));
|
CounterType type = CounterType.getType(s);
|
||||||
|
if (!choices.contains(type)) {
|
||||||
|
choices.add(type);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (sa.hasParam("RandomType")) {
|
if (sa.hasParam("RandomType")) {
|
||||||
|
|||||||
10
forge-gui/res/cardsfolder/upcoming/bribe_taker.txt
Normal file
10
forge-gui/res/cardsfolder/upcoming/bribe_taker.txt
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
Name:Bribe Taker
|
||||||
|
ManaCost:5 G
|
||||||
|
Types:Creature Rhino Warrior
|
||||||
|
PT:6/6
|
||||||
|
K:Trample
|
||||||
|
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPutCounter | TriggerDescription$ When CARDNAME enters the battlefield, for each kind of counter on permanents you control, you may put your choice of a +1/+1 counter or a counter of that kind on CARDNAME.
|
||||||
|
SVar:TrigPutCounter:DB$ PutCounter | CounterTypes$ EachType_Permanent.YouCtrl | AltChoiceForEach$ P1P1
|
||||||
|
DeckNeeds:Ability$Counters
|
||||||
|
DeckHas:Ability$Counters
|
||||||
|
Oracle:Trample\nWhen Bribe Taker enters the battlefield, for each kind of counter on permanents you control, you may put your choice of a +1/+1 counter or a counter of that kind on Bribe Taker.
|
||||||
@@ -5,5 +5,4 @@ PT:4/6
|
|||||||
A:AB$ Pump | Cost$ 3 U | Defined$ Self | KW$ HIDDEN Unblockable | ReduceCost$ X | SpellDescription$ CARDNAME can't be blocked this turn.
|
A:AB$ Pump | Cost$ 3 U | Defined$ Self | KW$ HIDDEN Unblockable | ReduceCost$ X | SpellDescription$ CARDNAME can't be blocked this turn.
|
||||||
SVar:X:Count$Compare Y GE5.3.0
|
SVar:X:Count$Compare Y GE5.3.0
|
||||||
SVar:Y:Count$ValidGraveyard Card.YouOwn$DifferentCMC
|
SVar:Y:Count$ValidGraveyard Card.YouOwn$DifferentCMC
|
||||||
SVar:NonStackingEffect:True
|
|
||||||
Oracle:{3}{U}: Sewer Crocodile can't be blocked this turn. This ability costs {3} less to activate if there are five or more mana values among cards in your graveyard.
|
Oracle:{3}{U}: Sewer Crocodile can't be blocked this turn. This ability costs {3} less to activate if there are five or more mana values among cards in your graveyard.
|
||||||
|
|||||||
@@ -521,6 +521,7 @@ ScryfallCode=SLD
|
|||||||
587 R Spellskite @Thomas M. Baxa
|
587 R Spellskite @Thomas M. Baxa
|
||||||
588 R Sphere of Safety @Johannes Voss
|
588 R Sphere of Safety @Johannes Voss
|
||||||
589 R Arcane Signet @Dan Frazier
|
589 R Arcane Signet @Dan Frazier
|
||||||
|
590 R Lurking Crocodile @Crocodile Jackson
|
||||||
591 R Crash Through @Tyler Walpole
|
591 R Crash Through @Tyler Walpole
|
||||||
593 R Persistent Petitioners @Brandi Milne
|
593 R Persistent Petitioners @Brandi Milne
|
||||||
596 R Persistent Petitioners @Crom
|
596 R Persistent Petitioners @Crom
|
||||||
|
|||||||
Reference in New Issue
Block a user