diff --git a/.gitattributes b/.gitattributes index cdd28a1eaaf..07f53160a70 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2161,6 +2161,7 @@ res/cardsfolder/c/cumber_stone.txt svneol=native#text/plain res/cardsfolder/c/cunning.txt svneol=native#text/plain res/cardsfolder/c/cunning_advisor.txt svneol=native#text/plain res/cardsfolder/c/cunning_bandit_azamuki_treachery_incarnate.txt -text +res/cardsfolder/c/cunning_giant.txt -text res/cardsfolder/c/cunning_lethemancer.txt svneol=native#text/plain res/cardsfolder/c/cunning_sparkmage.txt svneol=native#text/plain res/cardsfolder/c/cunning_wish.txt -text diff --git a/res/cardsfolder/c/cunning_giant.txt b/res/cardsfolder/c/cunning_giant.txt new file mode 100644 index 00000000000..e3ebd4faa2f --- /dev/null +++ b/res/cardsfolder/c/cunning_giant.txt @@ -0,0 +1,14 @@ +Name:Cunning Giant +ManaCost:5 R +Types:Creature Giant +Text:no text +PT:4/4 +R:Event$ DamageDone | ValidTarget$ Player.attackedBySourceThisCombat | ValidSource$ Card.Self | IsCombat$ True | ReplaceWith$ ChooseVictim | Optional$ True | OptionalDecider$ You | Description$ If CARDNAME is unblocked, you may have it assign its combat damage to a creature defending player controls. +SVar:ChooseVictim:DB$ ChooseCard | ChoiceZone$ Battlefield | Choices$ Creature.DefenderCtrl | Amount$ 1 | ChoiceTitle$ Choose a card to deal the damage to | SubAbility$ CunningDmg +SVar:CunningDmg:DB$ DealDamage | Defined$ ChosenCard | DamageSource$ ReplacedSource | CombatDamage$ True | NumDmg$ CunningX +SVar:CunningX:ReplaceCount$DamageAmount +SVar:RemAIDeck:True +SVar:Picture:http://www.wizards.com/global/images/magic/general/cunning_giant.jpg +SetInfo:PO2|Rare|http://magiccards.info/scans/en/po2/93.jpg +Oracle:If Cunning Giant is unblocked, you may have it assign its combat damage to a creature defending player controls. +End \ No newline at end of file diff --git a/res/cardsfolder/d/duplicant.txt b/res/cardsfolder/d/duplicant.txt index f79bb3a2dc9..50b1e04f679 100644 --- a/res/cardsfolder/d/duplicant.txt +++ b/res/cardsfolder/d/duplicant.txt @@ -15,4 +15,5 @@ SVar:Z:Imprinted$Valid Creature SVar:Rarity:Uncommon SVar:Picture:http://www.wizards.com/global/images/magic/general/duplicant.jpg Oracle:Imprint - When Duplicant enters the battlefield, you may exile target nontoken creature.\nAs long as the exiled card is a creature card, Duplicant has that card's power, toughness, and creature types. It's still a Shapeshifter. +SetInfo:MRD|Rare|http://magiccards.info/scans/en/mi/165.jpg End \ No newline at end of file diff --git a/src/main/java/forge/card/replacement/ReplacementHandler.java b/src/main/java/forge/card/replacement/ReplacementHandler.java index 599650b3957..279e0610ad9 100644 --- a/src/main/java/forge/card/replacement/ReplacementHandler.java +++ b/src/main/java/forge/card/replacement/ReplacementHandler.java @@ -215,7 +215,7 @@ public class ReplacementHandler { final StringBuilder buildQuestion = new StringBuilder("Apply replacement effect of "); buildQuestion.append(replacementEffect.getHostCard()); buildQuestion.append("?\r\n("); - buildQuestion.append(replacementEffect.toString()); + buildQuestion.append(replacementEffect.toString().replace("CARDNAME", replacementEffect.getHostCard().getName())); buildQuestion.append(")"); if (!GuiDialog.confirm(replacementEffect.getHostCard(), buildQuestion.toString())) { return ReplacementResult.NotReplaced; diff --git a/src/main/java/forge/game/player/Player.java b/src/main/java/forge/game/player/Player.java index 2df9856c72b..2aeee8ae334 100644 --- a/src/main/java/forge/game/player/Player.java +++ b/src/main/java/forge/game/player/Player.java @@ -62,6 +62,7 @@ import forge.game.event.LifeLossEvent; import forge.game.event.PoisonCounterEvent; import forge.game.event.ShuffleEvent; import forge.game.event.SpellResolvedEvent; +import forge.game.phase.Combat; import forge.game.phase.PhaseHandler; import forge.game.zone.PlayerZone; import forge.game.zone.PlayerZoneBattlefield; @@ -2540,6 +2541,10 @@ public abstract class Player extends GameEntity implements Comparable { if (!source.getDamageHistory().getThisTurnDamaged().contains(this)) { return false; } + } else if (property.equals("attackedBySourceThisCombat")) { + if (!this.equals(Singletons.getModel().getGame().getCombat().getDefenderPlayerByAttacker(source))) { + return false; + } } else if (property.startsWith("wasDealtDamageThisTurn")) { if (this.assignedDamage.isEmpty()) { return false;