- System now correctly recognizes attribute bonus from attribute penalty and the source of the bonus/penalty is checked for cancelling bonus modifiers.

This commit is contained in:
marcins78@gmail.com
2012-01-16 15:16:20 +00:00
parent 97bf29e782
commit ae1d21a34f
21 changed files with 135 additions and 100 deletions

View File

@@ -1,7 +1,8 @@
package com.gempukku.lotro.cards.modifiers;
import com.gempukku.lotro.common.Filterable;
import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.filters.Filter;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.GameState;
import com.gempukku.lotro.logic.modifiers.AbstractModifier;
@@ -11,15 +12,18 @@ import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
public class CancelKeywordBonusModifier extends AbstractModifier implements KeywordAffectingModifier {
private Keyword _keyword;
private Filterable _sourceFilter;
public CancelKeywordBonusModifier(PhysicalCard source, Keyword keyword, Filter affectFilter) {
public CancelKeywordBonusModifier(PhysicalCard source, Keyword keyword, Filterable affectFilter, Filterable sourceFilter) {
super(source, "Cancel " + keyword.getHumanReadable() + " keyword", affectFilter, ModifierEffect.CANCEL_KEYWORD_BONUS_MODIFIER);
_keyword = keyword;
_sourceFilter = sourceFilter;
}
@Override
public boolean appliesKeywordModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard modifierSource, Keyword keyword) {
if (keyword == _keyword)
if (keyword == _keyword
&& (_sourceFilter == null || (modifierSource != null && Filters.and(_sourceFilter).accepts(gameState, modifiersQuerying, modifierSource))))
return false;
return true;
}

View File

@@ -1,24 +0,0 @@
package com.gempukku.lotro.cards.modifiers;
import com.gempukku.lotro.filters.Filter;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.GameState;
import com.gempukku.lotro.logic.modifiers.AbstractModifier;
import com.gempukku.lotro.logic.modifiers.Condition;
import com.gempukku.lotro.logic.modifiers.ModifierEffect;
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
public class CancelStrengthBonusModifier extends AbstractModifier {
public CancelStrengthBonusModifier(PhysicalCard source, Filter affectFilter) {
super(source, "Cancel strength bonus", affectFilter, ModifierEffect.STRENGTH_MODIFIER);
}
public CancelStrengthBonusModifier(PhysicalCard source, Condition condition, Filter affectFilter) {
super(source, "Cancel strength bonus", affectFilter, condition, ModifierEffect.STRENGTH_MODIFIER);
}
@Override
public boolean appliesStrengthModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard modifierSource) {
return false;
}
}

View File

@@ -0,0 +1,24 @@
package com.gempukku.lotro.cards.modifiers;
import com.gempukku.lotro.common.Filterable;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.GameState;
import com.gempukku.lotro.logic.modifiers.AbstractModifier;
import com.gempukku.lotro.logic.modifiers.Condition;
import com.gempukku.lotro.logic.modifiers.ModifierEffect;
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
public class CancelStrengthBonusSourceModifier extends AbstractModifier {
public CancelStrengthBonusSourceModifier(PhysicalCard source, Filterable affectFilter) {
super(source, "Cancel strength bonus", affectFilter, ModifierEffect.STRENGTH_BONUS_SOURCE_MODIFIER);
}
public CancelStrengthBonusSourceModifier(PhysicalCard source, Condition condition, Filterable affectFilter) {
super(source, "Cancel strength bonus", affectFilter, condition, ModifierEffect.STRENGTH_BONUS_SOURCE_MODIFIER);
}
@Override
public boolean appliesStrengthBonusModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard modifierSource, PhysicalCard modifierTaget) {
return false;
}
}

View File

@@ -0,0 +1,31 @@
package com.gempukku.lotro.cards.modifiers;
import com.gempukku.lotro.common.Filterable;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.GameState;
import com.gempukku.lotro.logic.modifiers.AbstractModifier;
import com.gempukku.lotro.logic.modifiers.Condition;
import com.gempukku.lotro.logic.modifiers.ModifierEffect;
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
public class CancelStrengthBonusTargetModifier extends AbstractModifier {
private Filterable _sourceFilter;
public CancelStrengthBonusTargetModifier(PhysicalCard source, Filterable affectFilter, Filterable sourceFilter) {
super(source, "Has some strength bonuses cancelled", affectFilter, ModifierEffect.STRENGTH_BONUS_TARGET_MODIFIER);
_sourceFilter = sourceFilter;
}
public CancelStrengthBonusTargetModifier(PhysicalCard source, Condition condition, Filterable affectFilter, Filterable sourceFilter) {
super(source, "Has some strength bonuses cancelled", affectFilter, condition, ModifierEffect.STRENGTH_BONUS_TARGET_MODIFIER);
_sourceFilter = sourceFilter;
}
@Override
public boolean appliesStrengthBonusModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard modifierSource, PhysicalCard modifierTaget) {
if (_sourceFilter == null || (modifierSource != null && Filters.and(_sourceFilter).accepts(gameState, modifiersQuerying, modifierSource)))
return false;
return true;
}
}

View File

@@ -3,7 +3,7 @@ package com.gempukku.lotro.cards.set1.isengard;
import com.gempukku.lotro.cards.AbstractOldEvent;
import com.gempukku.lotro.cards.actions.PlayEventAction;
import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseModifierEffect;
import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusModifier;
import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusSourceModifier;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
@@ -43,7 +43,7 @@ public class Card1_132 extends AbstractOldEvent {
protected void cardSelected(LotroGame game, PhysicalCard possession) {
action.appendEffect(
new AddUntilStartOfPhaseModifierEffect(
new CancelStrengthBonusModifier(self, Filters.sameCard(possession)), Phase.REGROUP));
new CancelStrengthBonusSourceModifier(self, Filters.sameCard(possession)), Phase.REGROUP));
}
}
);

View File

@@ -1,18 +1,13 @@
package com.gempukku.lotro.cards.set1.isengard;
import com.gempukku.lotro.cards.AbstractMinion;
import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusModifier;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusTargetModifier;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.common.Race;
import com.gempukku.lotro.filters.Filter;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.GameState;
import com.gempukku.lotro.game.state.Skirmish;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
/**
* Set: The Fellowship of the Ring
@@ -33,22 +28,6 @@ public class Card1_143 extends AbstractMinion {
@Override
public Modifier getAlwaysOnModifier(final PhysicalCard self) {
return new CancelStrengthBonusModifier(self, Filters.and(
// Weapon bonus (Hand or Ranged)
Filters.weapon,
// That is attached to Companion or Ally
Filters.attachedTo(Filters.or(CardType.COMPANION, CardType.ALLY)),
// In a skirmish with this minion
new Filter() {
@Override
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
Skirmish skirmish = gameState.getSkirmish();
if (skirmish != null
&& skirmish.getShadowCharacters().contains(self))
return true;
return false;
}
}
));
return new CancelStrengthBonusTargetModifier(self, Filters.inSkirmishAgainst(self), Filters.weapon);
}
}

View File

@@ -2,7 +2,7 @@ package com.gempukku.lotro.cards.set10.wraith;
import com.gempukku.lotro.cards.AbstractMinion;
import com.gempukku.lotro.cards.modifiers.CancelKeywordBonusModifier;
import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusModifier;
import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusTargetModifier;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Keyword;
@@ -35,9 +35,13 @@ public class Card10_057 extends AbstractMinion {
public List<? extends Modifier> getAlwaysOnModifiers(LotroGame game, PhysicalCard self) {
List<Modifier> modifiers = new LinkedList<Modifier>();
modifiers.add(
new CancelStrengthBonusModifier(self, Filters.and(CardType.POSSESSION, Filters.attachedTo(CardType.COMPANION, Filters.inSkirmishAgainst(self)))));
new CancelStrengthBonusTargetModifier(self,
Filters.and(CardType.COMPANION, Filters.inSkirmishAgainst(self)),
CardType.POSSESSION));
modifiers.add(
new CancelKeywordBonusModifier(self, Keyword.DAMAGE, Filters.and(CardType.POSSESSION, Filters.attachedTo(CardType.COMPANION, Filters.inSkirmishAgainst(self)))));
new CancelKeywordBonusModifier(self, Keyword.DAMAGE,
Filters.and(CardType.COMPANION, Filters.inSkirmishAgainst(self)),
CardType.POSSESSION));
return modifiers;
}
}

View File

@@ -3,7 +3,7 @@ package com.gempukku.lotro.cards.set11.men;
import com.gempukku.lotro.cards.AbstractAttachable;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.modifiers.CancelKeywordBonusModifier;
import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusModifier;
import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusTargetModifier;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filter;
import com.gempukku.lotro.filters.Filters;
@@ -43,9 +43,13 @@ public class Card11_087 extends AbstractAttachable {
public List<? extends Modifier> getAlwaysOnModifiers(LotroGame game, PhysicalCard self) {
List<Modifier> modifiers = new LinkedList<Modifier>();
modifiers.add(
new CancelStrengthBonusModifier(self, Filters.and(CardType.POSSESSION, Filters.attachedTo(Filters.hasAttached(self), Filters.inSkirmishAgainst(Culture.MEN, CardType.MINION)))));
new CancelStrengthBonusTargetModifier(self,
Filters.and(Filters.hasAttached(self), Filters.inSkirmishAgainst(Culture.MEN, CardType.MINION)),
CardType.POSSESSION));
modifiers.add(
new CancelKeywordBonusModifier(self, Keyword.DAMAGE, Filters.and(CardType.POSSESSION, Filters.attachedTo(Filters.hasAttached(self), Filters.inSkirmishAgainst(Culture.MEN, CardType.MINION)))));
new CancelKeywordBonusModifier(self, Keyword.DAMAGE,
Filters.and(Filters.hasAttached(self), Filters.inSkirmishAgainst(Culture.MEN, CardType.MINION)),
CardType.POSSESSION));
return modifiers;
}
}

View File

@@ -4,7 +4,7 @@ import com.gempukku.lotro.cards.AbstractPermanent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.SelfDiscardEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndTransferAttachableEffect;
import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusModifier;
import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusTargetModifier;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
@@ -34,8 +34,9 @@ public class Card12_070 extends AbstractPermanent {
@Override
public Modifier getAlwaysOnModifier(PhysicalCard self) {
return new CancelStrengthBonusModifier(self, new SpotCondition(6, CardType.COMPANION),
Filters.and(CardType.POSSESSION, Filters.attachedTo(CardType.COMPANION, Filters.inSkirmishAgainst(CardType.MINION, Culture.MEN))));
return new CancelStrengthBonusTargetModifier(self, new SpotCondition(6, CardType.COMPANION),
Filters.and(CardType.COMPANION, Filters.inSkirmishAgainst(Culture.MEN, CardType.MINION)),
CardType.POSSESSION);
}
@Override

View File

@@ -1,7 +1,7 @@
package com.gempukku.lotro.cards.set12.uruk_hai;
import com.gempukku.lotro.cards.AbstractMinion;
import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusModifier;
import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusTargetModifier;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.common.Race;
@@ -28,6 +28,8 @@ public class Card12_157 extends AbstractMinion {
@Override
public Modifier getAlwaysOnModifier(PhysicalCard self) {
return new CancelStrengthBonusModifier(self, Filters.and(Filters.weapon, Filters.attachedTo(Filters.inSkirmishAgainst(self))));
return new CancelStrengthBonusTargetModifier(self,
Filters.and(Filters.character, Filters.inSkirmishAgainst(self)),
Filters.weapon);
}
}

View File

@@ -1,7 +1,7 @@
package com.gempukku.lotro.cards.set13.gandalf;
import com.gempukku.lotro.cards.AbstractFollower;
import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusModifier;
import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusTargetModifier;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Side;
@@ -44,7 +44,8 @@ public class Card13_038 extends AbstractFollower {
@Override
protected List<? extends Modifier> getNonBasicStatsModifiers(PhysicalCard self) {
return Collections.singletonList(
new CancelStrengthBonusModifier(self, new SpotCondition(2, Culture.GANDALF, CardType.COMPANION),
Filters.and(CardType.POSSESSION, Filters.attachedTo(CardType.MINION, Filters.inSkirmishAgainst(Filters.hasAttached(self))))));
new CancelStrengthBonusTargetModifier(self, new SpotCondition(2, Culture.GANDALF, CardType.COMPANION),
Filters.and(CardType.MINION, Filters.inSkirmishAgainst(Filters.hasAttached(self))),
CardType.POSSESSION));
}
}

View File

@@ -2,7 +2,7 @@ package com.gempukku.lotro.cards.set2.gondor;
import com.gempukku.lotro.cards.AbstractAttachableFPPossession;
import com.gempukku.lotro.cards.modifiers.ArcheryTotalModifier;
import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusModifier;
import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusTargetModifier;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.PossessionClass;
@@ -10,10 +10,9 @@ import com.gempukku.lotro.common.Side;
import com.gempukku.lotro.filters.Filter;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.GameState;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
import com.gempukku.lotro.logic.modifiers.SpotCondition;
import java.util.LinkedList;
import java.util.List;
@@ -42,13 +41,10 @@ public class Card2_038 extends AbstractAttachableFPPossession {
List<Modifier> modifiers = new LinkedList<Modifier>();
modifiers.add(new ArcheryTotalModifier(self, Side.SHADOW, -1));
modifiers.add(
new CancelStrengthBonusModifier(self, Filters.and(Filters.attachedTo(Filters.and(CardType.MINION, Filters.inSkirmish)),
new Filter() {
@Override
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
return gameState.getSkirmish() != null && gameState.getSkirmish().getFellowshipCharacter() == self.getAttachedTo();
}
})));
new CancelStrengthBonusTargetModifier(self,
new SpotCondition(Filters.boromir, Filters.hasAttached(self)),
Filters.and(CardType.MINION, Filters.inSkirmishAgainst(Filters.boromir)),
Filters.weapon));
return modifiers;
}
}

View File

@@ -2,7 +2,7 @@ package com.gempukku.lotro.cards.set2.shire;
import com.gempukku.lotro.cards.AbstractAttachableFPPossession;
import com.gempukku.lotro.cards.modifiers.ArcheryTotalModifier;
import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusModifier;
import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusTargetModifier;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filter;
import com.gempukku.lotro.filters.Filters;
@@ -39,7 +39,9 @@ public class Card2_105 extends AbstractAttachableFPPossession {
modifiers.add(
new ArcheryTotalModifier(self, Side.SHADOW, -1));
modifiers.add(
new CancelStrengthBonusModifier(self, Filters.and(Filters.weapon, Filters.attachedTo(Filters.inSkirmishAgainst(Filters.hasAttached(self))))));
new CancelStrengthBonusTargetModifier(self,
Filters.and(CardType.MINION, Filters.inSkirmishAgainst(Filters.frodo)),
Filters.weapon));
modifiers.add(
new RemoveKeywordModifier(self, Filters.inSkirmishAgainst(Filters.hasAttached(self)), Keyword.DAMAGE));
return modifiers;

View File

@@ -29,9 +29,7 @@ public class Card3_072 extends AbstractPermanent {
public List<? extends Modifier> getAlwaysOnModifiers(LotroGame game, PhysicalCard self) {
return Collections.singletonList(
new CancelKeywordBonusModifier(self, Keyword.DAMAGE,
Filters.and(
Filters.weapon,
Filters.attachedTo(Filters.inSkirmishAgainst(Filters.and(Culture.ISENGARD, Race.ORC)))
)));
Filters.and(Filters.character, Filters.inSkirmishAgainst(Culture.ISENGARD, Race.ORC)),
Filters.weapon));
}
}

View File

@@ -6,7 +6,7 @@ import com.gempukku.lotro.cards.effects.AddTokenEffect;
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
import com.gempukku.lotro.cards.effects.RemoveTokenEffect;
import com.gempukku.lotro.cards.effects.RemoveTwilightEffect;
import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusModifier;
import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusTargetModifier;
import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
@@ -55,7 +55,9 @@ public class Card4_028 extends AbstractPermanent {
protected void cardSelected(LotroGame game, PhysicalCard dunlandMan) {
action.appendEffect(
new AddUntilEndOfPhaseModifierEffect(
new CancelStrengthBonusModifier(self, Filters.and(CardType.POSSESSION, Filters.attachedTo(Filters.inSkirmishAgainst(Filters.sameCard(dunlandMan))))), Phase.SKIRMISH));
new CancelStrengthBonusTargetModifier(self,
Filters.and(Filters.character, Filters.inSkirmishAgainst(dunlandMan)),
CardType.POSSESSION), Phase.SKIRMISH));
}
});
return Collections.singletonList(action);

View File

@@ -1,7 +1,7 @@
package com.gempukku.lotro.cards.set8.wraith;
import com.gempukku.lotro.cards.AbstractMinion;
import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusModifier;
import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusTargetModifier;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.common.Race;
@@ -33,7 +33,8 @@ public class Card8_084 extends AbstractMinion {
@Override
public List<? extends Modifier> getAlwaysOnModifiers(LotroGame game, PhysicalCard self) {
return Collections.singletonList(
new CancelStrengthBonusModifier(self,
Filters.and(Filters.weapon, Filters.attachedTo(Race.MAN, Filters.inSkirmishAgainst(self)))));
new CancelStrengthBonusTargetModifier(self,
Filters.and(Race.MAN, Filters.inSkirmishAgainst(self)),
Filters.weapon));
}
}

View File

@@ -92,7 +92,7 @@ public abstract class AbstractModifier implements Modifier {
}
@Override
public boolean appliesStrengthModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard modifierSource) {
public boolean appliesStrengthBonusModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard modifierSource, PhysicalCard modifierTaget) {
return true;
}

View File

@@ -36,7 +36,7 @@ public interface Modifier {
public int getStrengthModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard);
public boolean appliesStrengthModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard modifierSource);
public boolean appliesStrengthBonusModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard modifierSource, PhysicalCard modifierTaget);
public int getVitalityModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard);

View File

@@ -1,7 +1,10 @@
package com.gempukku.lotro.logic.modifiers;
public enum ModifierEffect {
SIGNET_MODIFIER, STRENGTH_MODIFIER, VITALITY_MODIFIER, RESISTANCE_MODIFIER, SITE_NUMBER_MODIFIER, TWILIGHT_COST_MODIFIER, OVERWHELM_MODIFIER,
SIGNET_MODIFIER, STRENGTH_MODIFIER,
STRENGTH_BONUS_SOURCE_MODIFIER,
STRENGTH_BONUS_TARGET_MODIFIER,
VITALITY_MODIFIER, RESISTANCE_MODIFIER, SITE_NUMBER_MODIFIER, TWILIGHT_COST_MODIFIER, OVERWHELM_MODIFIER,
WOUND_MODIFIER, BURDEN_MODIFIER, THREAT_MODIFIER,
PRESENCE_MODIFIER, ARCHERY_MODIFIER, MOVE_LIMIT_MODIFIER, ACTION_MODIFIER, ASSIGNMENT_MODIFIER, DISCARD_FROM_PLAY_MODIFIER, DISCARD_NOT_FROM_PLAY,
LOOK_OR_REVEAL_MODIFIER, SPOT_MODIFIER, TARGET_MODIFIER,

View File

@@ -306,8 +306,9 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
try {
int result = physicalCard.getBlueprint().getStrength();
for (Modifier modifier : getModifiersAffectingCard(gameState, ModifierEffect.STRENGTH_MODIFIER, physicalCard)) {
if (appliesStrengthModifier(gameState, modifier.getSource()))
result += modifier.getStrengthModifier(gameState, this, physicalCard);
final int strengthModifier = modifier.getStrengthModifier(gameState, this, physicalCard);
if (strengthModifier <= 0 || appliesStrengthBonusModifier(gameState, modifier.getSource(), physicalCard))
result += strengthModifier;
}
return Math.max(0, result);
} finally {
@@ -315,13 +316,17 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
}
}
private boolean appliesStrengthModifier(GameState gameState, PhysicalCard modifierSource) {
if (modifierSource == null)
return true;
for (Modifier modifier : getModifiersAffectingCard(gameState, ModifierEffect.STRENGTH_MODIFIER, modifierSource)) {
if (!modifier.appliesStrengthModifier(gameState, this, modifierSource))
return false;
}
private boolean appliesStrengthBonusModifier(GameState gameState, PhysicalCard modifierSource, PhysicalCard modifierTarget) {
if (modifierSource != null)
for (Modifier modifier : getModifiersAffectingCard(gameState, ModifierEffect.STRENGTH_BONUS_SOURCE_MODIFIER, modifierSource)) {
if (!modifier.appliesStrengthBonusModifier(gameState, this, modifierSource, modifierTarget))
return false;
}
if (modifierTarget != null)
for (Modifier modifier : getModifiersAffectingCard(gameState, ModifierEffect.STRENGTH_BONUS_TARGET_MODIFIER, modifierTarget)) {
if (!modifier.appliesStrengthBonusModifier(gameState, this, modifierSource, modifierTarget))
return false;
}
return true;
}

View File

@@ -3,7 +3,9 @@
- "Fearless" should now be giving a proper bonus to the minion.
- "Orthanc Warrior" has a propert name now.
- Added "Bloodlines" (set 13) set.
- "Master Proudfoot" now gives an option of choosing which cards to put into hand, because of Rule of 4.
- "Master Proudfoot" now gives an option of choosing which cards to put into hand, because of Rule of 4.
- System now correctly recognizes attribute bonus from attribute penalty and the source of the bonus/penalty is checked
for cancelling bonus modifiers.
<b>15 Jan. 2012</b>
- "Hobbit Farmer" and other allies copying site text should now be able to activate the site phase actions.