mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 12:48:00 +00:00
Merge branch 'van_maa' into 'master'
Vanguard: Maelstrom Archangel Avatar See merge request core-developers/forge!6033
This commit is contained in:
@@ -1,13 +1,12 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.base.Predicates;
|
||||
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Lists;
|
||||
import forge.StaticData;
|
||||
import forge.card.CardFacePredicates;
|
||||
import forge.card.CardRules;
|
||||
@@ -147,14 +146,24 @@ public class ChooseCardNameEffect extends SpellAbilityEffect {
|
||||
Predicate<ICardFace> cpp = Predicates.alwaysTrue();
|
||||
if (sa.hasParam("ValidCards")) {
|
||||
//Calculating/replacing this must happen before running valid in CardFacePredicates
|
||||
if (valid.contains("ManaCost=Equipped")) {
|
||||
String s = host.getEquipping().getManaCost().getShortString();
|
||||
valid = valid.replace("=Equipped", s);
|
||||
if (valid.contains("ManaCost=")) {
|
||||
if (valid.contains("ManaCost=Equipped")) {
|
||||
String s = host.getEquipping().getManaCost().getShortString();
|
||||
valid = valid.replace("=Equipped", s);
|
||||
} else if (valid.contains("ManaCost=Imprinted")) {
|
||||
String s = host.getImprintedCards().getFirst().getManaCost().getShortString();
|
||||
valid = valid.replace("=Imprinted", s);
|
||||
}
|
||||
}
|
||||
cpp = CardFacePredicates.valid(valid);
|
||||
}
|
||||
|
||||
chosen = p.getController().chooseCardName(sa, cpp, valid, message);
|
||||
if (randomChoice) {
|
||||
final Iterable<ICardFace> cardsFromDb = StaticData.instance().getCommonCards().getAllFaces();
|
||||
final List<ICardFace> cards = Lists.newArrayList(Iterables.filter(cardsFromDb, cpp));
|
||||
chosen = Aggregates.random(cards).getName();
|
||||
} else {
|
||||
chosen = p.getController().chooseCardName(sa, cpp, valid, message);
|
||||
}
|
||||
}
|
||||
|
||||
host.setNamedCard(chosen);
|
||||
|
||||
@@ -37,6 +37,9 @@ public class MakeCardEffect extends SpellAbilityEffect {
|
||||
if (!name.equals("")) {
|
||||
while (amount > 0) {
|
||||
Card card = Card.fromPaperCard(StaticData.instance().getCommonCards().getUniqueByName(name), player);
|
||||
if (sa.hasParam("IsToken")) {
|
||||
card.setToken(true);
|
||||
}
|
||||
if (!sa.hasParam("NotToken")) {
|
||||
card.setTokenCard(true);
|
||||
}
|
||||
|
||||
@@ -161,6 +161,8 @@ public class PlayEffect extends SpellAbilityEffect {
|
||||
Card gameCard = game.getCardState(c, null);
|
||||
if (c.equalsWithTimestamp(gameCard)) {
|
||||
tgtCards.add(gameCard);
|
||||
} else if (sa.hasParam("ZoneRegardless")) {
|
||||
tgtCards.add(c);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -332,6 +332,11 @@ public class PumpEffect extends SpellAbilityEffect {
|
||||
}
|
||||
}
|
||||
}
|
||||
if (sa.hasParam("ClearNotedCardsFor")) {
|
||||
for (Player p : tgtPlayers) {
|
||||
p.clearNotesForName(sa.getParam("ClearNotedCardsFor"));
|
||||
}
|
||||
}
|
||||
|
||||
if (sa.hasParam("NoteNumber")) {
|
||||
int num = AbilityUtils.calculateAmount(sa.getHostCard(), sa.getParam("NoteNumber"), sa);
|
||||
|
||||
@@ -70,21 +70,30 @@ public class RevealEffect extends SpellAbilityEffect {
|
||||
if (valid.isEmpty())
|
||||
continue;
|
||||
|
||||
if (cnt > valid.size())
|
||||
cnt = valid.size();
|
||||
if (sa.hasParam("RevealAll")) { //for when cards to reveal are not in hand
|
||||
revealed.addAll(valid);
|
||||
} else {
|
||||
if (cnt > valid.size())
|
||||
cnt = valid.size();
|
||||
|
||||
int min = cnt;
|
||||
if (anyNumber) {
|
||||
cnt = valid.size();
|
||||
min = 0;
|
||||
} else if (optional) {
|
||||
min = 0;
|
||||
int min = cnt;
|
||||
if (anyNumber) {
|
||||
cnt = valid.size();
|
||||
min = 0;
|
||||
} else if (optional) {
|
||||
min = 0;
|
||||
}
|
||||
|
||||
revealed.addAll(p.getController().chooseCardsToRevealFromHand(min, cnt, valid));
|
||||
}
|
||||
|
||||
revealed.addAll(p.getController().chooseCardsToRevealFromHand(min, cnt, valid));
|
||||
}
|
||||
|
||||
game.getAction().reveal(revealed, p);
|
||||
if (sa.hasParam("RevealToAll")) {
|
||||
game.getAction().reveal(revealed, p, false,
|
||||
sa.getParamOrDefault("RevealTitle", ""));
|
||||
} else {
|
||||
game.getAction().reveal(revealed, p);
|
||||
}
|
||||
for (final Card c : revealed) {
|
||||
game.getTriggerHandler().runTrigger(TriggerType.Revealed, AbilityKey.mapFromCard(c), false);
|
||||
if (sa.hasParam("RememberRevealed")) {
|
||||
|
||||
@@ -1554,6 +1554,11 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
}
|
||||
return notes.get(notedFor);
|
||||
}
|
||||
public void clearNotesForName(String notedFor) {
|
||||
if (notes.containsKey(notedFor)) {
|
||||
notes.get(notedFor).clear();
|
||||
}
|
||||
}
|
||||
|
||||
public void noteNumberForName(String notedFor, int noted) {
|
||||
notedNum.put(notedFor, noted);
|
||||
|
||||
22
forge-gui/res/cardsfolder/m/maelstrom_archangel_avatar.txt
Normal file
22
forge-gui/res/cardsfolder/m/maelstrom_archangel_avatar.txt
Normal file
@@ -0,0 +1,22 @@
|
||||
Name:Maelstrom Archangel Avatar
|
||||
ManaCost:no cost
|
||||
Types:Vanguard
|
||||
HandLifeModifier:+0/+5
|
||||
T:Mode$ DamageDone | ValidSource$ Creature.YouCtrl | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigNote | Static$ True
|
||||
SVar:TrigNote:DB$ Pump | NoteCards$ TriggeredSource | NoteCardsFor$ MaelstromArchangelAvatar | SubAbility$ DBHit
|
||||
SVar:DBHit:DB$ StoreSVar | SVar$ Hits | Type$ CountSVar | Expression$ Hits/Plus.1
|
||||
T:Mode$ Phase | Phase$ Cleanup | Execute$ TrigReset | Static$ True
|
||||
SVar:TrigReset:DB$ Pump | ClearNotedCardsFor$ MaelstromArchangelAvatar | SubAbility$ DBReset
|
||||
SVar:DBReset:DB$ StoreSVar | SVar$ Hits | Type$ Number | Expression$ 0
|
||||
SVar:Hits:Number$0
|
||||
T:Mode$ Phase | Phase$ EndCombat | CheckSVar$ Hits | SVarCompare$ GE1 | ValidPlayer$ Player | TriggerZones$ Command | Execute$ TrigRepeatEach | TriggerDescription$ At end of combat, for each creature you controlled at the time it dealt combat damage to a player this turn, copy a random card with the same mana cost as that creature. You may pay {3}. If you do, choose one of those copies. If a copy of a permanent card is chosen, you may create a token that's a copy of that card. If a copy of an instant or sorcery card is chosen, you may cast the copy without paying its mana cost.
|
||||
SVar:TrigRepeatEach:DB$ RepeatEach | UseImprinted$ True | RepeatCards$ Card.NotedForMaelstromArchangelAvatar | Zone$ Battlefield,Graveyard,Exile,Library,Hand | RepeatSubAbility$ DBCopyRandom | SubAbility$ DBReveal
|
||||
SVar:DBCopyRandom:DB$ NameCard | Defined$ You | AtRandom$ True | ValidCards$ Card.ManaCost=Imprinted | SubAbility$ DBMake
|
||||
SVar:DBMake:DB$ MakeCard | Name$ ChosenName | Zone$ None | RememberMade$ True | SubAbility$ DBClearNamed
|
||||
SVar:DBClearNamed:DB$ Cleanup | ClearNamedCard$ True
|
||||
SVar:DBReveal:DB$ Reveal | Defined$ You | RevealAll$ True | RevealDefined$ Remembered | RevealToAll$ True | RevealTitle$ OVERRIDE Cards created by Maelstrom Archangel Avatar | SubAbility$ DBChoose
|
||||
SVar:DBChoose:DB$ ChooseCard | UnlessCost$ 3 | UnlessPayer$ You | UnlessSwitched$ True | Choices$ Card.IsRemembered | ChoiceZone$ None | SubAbility$ DBCopyPerm | SpellDescription$ You may pay {3}. If you do, choose one of those copies. If a copy of a permanent card is chosen, you may create a token that's a copy of that card. If a copy of an instant or sorcery card is chosen, you may cast the copy without paying its mana cost.
|
||||
SVar:DBCopyPerm:DB$ CopyPermanent | Optional$ True | Defined$ ChosenCard | ConditionDefined$ ChosenCard | ConditionPresent$ Permanent | ConditionCompare$ GE1 | SubAbility$ DBCastSp
|
||||
SVar:DBCastSp:DB$ Play | Defined$ ChosenCard | ZoneRegardless$ True | Optional$ True | WithoutManaCost$ True | ValidSA$ Spell | ConditionDefined$ ChosenCard | ConditionPresent$ Permanent | ConditionCompare$ EQ0 | SubAbility$ DBCleanup
|
||||
SVar:DBCleanup:DB$ Cleanup | ClearChosenCard$ True | ClearRemembered$ True
|
||||
Oracle:Hand +0, life +5\nAt end of combat, for each creature you controlled at the time it dealt combat damage to a player this turn, copy a random card with the same mana cost as that creature. You may pay {3}. If you do, choose one of those copies. If a copy of a permanent card is chosen, you may create a token that's a copy of that card. If a copy of an instant or sorcery card is chosen, you may cast the copy without paying its mana cost.
|
||||
@@ -903,6 +903,8 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont
|
||||
protected void reveal(final CardCollectionView cards, final ZoneType zone, final PlayerView owner, String message) {
|
||||
if (StringUtils.isBlank(message)) {
|
||||
message = localizer.getMessage("lblLookCardInPlayerZone", "{player's}", zone.getTranslatedName().toLowerCase());
|
||||
} else if (message.startsWith("OVERRIDE")) {
|
||||
message = message.substring(9);
|
||||
} else {
|
||||
message += " " + localizer.getMessage("lblPlayerZone", "{player's}", zone.getTranslatedName().toLowerCase());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user