Merge branch 'master' of git.cardforge.org:core-developers/forge

This commit is contained in:
Agetian
2018-01-13 12:25:02 +03:00
5 changed files with 55 additions and 0 deletions

View File

@@ -18,6 +18,7 @@ import forge.game.card.Card;
import forge.game.card.CardCollection; import forge.game.card.CardCollection;
import forge.game.card.CardCollectionView; import forge.game.card.CardCollectionView;
import forge.game.card.CardLists; import forge.game.card.CardLists;
import forge.game.card.CardPredicates;
import forge.game.card.CardPredicates.Presets; import forge.game.card.CardPredicates.Presets;
import forge.game.card.CounterType; import forge.game.card.CounterType;
import forge.game.combat.Combat; import forge.game.combat.Combat;
@@ -230,6 +231,13 @@ public class ChooseCardAi extends SpellAbilityAi {
Collections.reverse(creats); Collections.reverse(creats);
choice = creats.get(0); choice = creats.get(0);
} }
} else if ("NegativePowerFirst".equals(logic)) {
Card lowest = Aggregates.itemWithMin(options, CardPredicates.Accessors.fnGetNetPower);
if (lowest.getNetPower() <= 0) {
choice = lowest;
} else {
choice = ComputerUtilCard.getBestCreatureAI(options);
}
} else if ("TangleWire".equals(logic)) { } else if ("TangleWire".equals(logic)) {
CardCollectionView betterList = CardLists.filter(options, new Predicate<Card>() { CardCollectionView betterList = CardLists.filter(options, new Predicate<Card>() {
@Override @Override

View File

@@ -9,8 +9,10 @@ import forge.game.card.CardCollection;
import forge.game.card.CardCollectionView; import forge.game.card.CardCollectionView;
import forge.game.card.CardFactoryUtil; import forge.game.card.CardFactoryUtil;
import forge.game.card.CardLists; import forge.game.card.CardLists;
import forge.game.card.CardPredicates;
import forge.game.card.CardPredicates.Presets; import forge.game.card.CardPredicates.Presets;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.player.PlayerActionConfirmMode;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
import forge.game.spellability.TargetRestrictions; import forge.game.spellability.TargetRestrictions;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
@@ -87,6 +89,32 @@ public class ChooseCardEffect extends SpellAbilityEffect {
} }
} }
} }
} else if (sa.hasParam("WithTotalPower")){
final int totP = AbilityUtils.calculateAmount(host, sa.getParam("WithTotalPower"), sa);
CardCollection creature = new CardCollection(p.getCreaturesInPlay());
CardCollection chosenPool = new CardCollection();
int chosenP = 0;
while (!creature.isEmpty()) {
if (Aggregates.min(creature, CardPredicates.Accessors.fnGetNetPower) + chosenP > totP) {
break;
}
Card c = p.getController().chooseSingleEntityForEffect(creature, sa,
"Select a card\r\n(Selected:" + chosenPool + ")\r\n" + "(Total Power: " + chosenP + ")", true);
if (c == null) {
if (p.getController().confirmAction(sa, PlayerActionConfirmMode.OptionalChoose, "Cancel Choose?")) {
break;
}
} else {
chosenP += c.getNetPower();
if (chosenP <= totP) {
chosenPool.add(c);
creature.remove(c);
} else {
break;
}
}
}
chosen.addAll(chosenPool);
} else if ((tgt == null) || p.canBeTargetedBy(sa)) { } else if ((tgt == null) || p.canBeTargetedBy(sa)) {
if (sa.hasParam("AtRandom") && !choices.isEmpty()) { if (sa.hasParam("AtRandom") && !choices.isEmpty()) {
Aggregates.random(choices, validAmount, chosen); Aggregates.random(choices, validAmount, chosen);

View File

@@ -12,6 +12,7 @@ public enum PlayerActionConfirmMode {
ChangeZoneFromAltSource, ChangeZoneFromAltSource,
ChangeZoneGeneral, ChangeZoneGeneral,
BidLife, BidLife,
OptionalChoose,
Tribute; Tribute;
// Ripple; // Ripple;

View File

@@ -0,0 +1,8 @@
Name:Awakened Amalgam
ManaCost:4
Types:Artifact Creature Golem
PT:*/*
S:Mode$ Continuous | EffectZone$ All | CharacteristicDefining$ True | SetPower$ X | SetToughness$ X | Description$ CARDNAME's power and toughness are each equal to the number of differently named lands you control.
SVar:X:Count$DifferentCardNames_Land.YouCtrl+inZoneBattlefield
SVar:Picture:http://www.wizards.com/global/images/magic/general/awakened_amalgam.jpg
Oracle:Awakened Amalgam's power and toughness are each equal to the number of differently named lands you control.

View File

@@ -0,0 +1,10 @@
Name:Slaughter the Strong
ManaCost:1 W W
Types:Sorcery
A:SP$ RepeatEach | Cost$ 1 W W | RepeatPlayers$ Player | RepeatSubAbility$ ChooseCrtr | SubAbility$ SacAllOthers | SpellDescription$ Each player chooses any number of creatures he or she controls with total power 4 or less, then sacrifices all other creatures he or she controls.
SVar:ChooseCrtr:DB$ ChooseCard | Defined$ Player.IsRemembered | Choices$ Creature.RememberedPlayerCtrl | WithTotalPower$ 4 | RememberChosen$ True | AILogic$ NegativePowerFirst
SVar:SacAllOthers:DB$ SacrificeAll | ValidCards$ Creature.IsNotRemembered | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:RemAIDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/slaughter_the_strong.jpg
Oracle:Each player chooses any number of creatures he or she controls with total power 4 or less, then sacrifices all other creatures he or she controls.