mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 03:38:01 +00:00
Merge branch 'damageTrample' into 'master'
DealDamage: add ExcessDamage See merge request core-developers/forge!2784
This commit is contained in:
@@ -989,7 +989,7 @@ public class GameAction {
|
|||||||
for (final Card c : game.getCardsIn(ZoneType.Battlefield)) {
|
for (final Card c : game.getCardsIn(ZoneType.Battlefield)) {
|
||||||
if (c.isCreature()) {
|
if (c.isCreature()) {
|
||||||
// Rule 704.5f - Put into grave (no regeneration) for toughness <= 0
|
// Rule 704.5f - Put into grave (no regeneration) for toughness <= 0
|
||||||
if (c.getLethal() <= 0) {
|
if (c.getNetToughness() <= 0) {
|
||||||
if (noRegCreats == null) {
|
if (noRegCreats == null) {
|
||||||
noRegCreats = new CardCollection();
|
noRegCreats = new CardCollection();
|
||||||
}
|
}
|
||||||
@@ -1009,7 +1009,7 @@ public class GameAction {
|
|||||||
}
|
}
|
||||||
// Rule 704.5g - Destroy due to lethal damage
|
// Rule 704.5g - Destroy due to lethal damage
|
||||||
// Rule 704.5h - Destroy due to deathtouch
|
// Rule 704.5h - Destroy due to deathtouch
|
||||||
else if (c.getLethal() <= c.getDamage() || c.hasBeenDealtDeathtouchDamage()) {
|
else if (c.getDamage() > 0 && (c.getLethal() <= c.getDamage() || c.hasBeenDealtDeathtouchDamage())) {
|
||||||
if (desCreats == null) {
|
if (desCreats == null) {
|
||||||
desCreats = new CardCollection();
|
desCreats = new CardCollection();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
package forge.game.ability.effects;
|
package forge.game.ability.effects;
|
||||||
|
|
||||||
import com.google.common.collect.Iterables;
|
import com.google.common.collect.Iterables;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
|
||||||
import forge.game.Game;
|
import forge.game.Game;
|
||||||
|
import forge.game.GameEntity;
|
||||||
import forge.game.GameEntityCounterTable;
|
import forge.game.GameEntityCounterTable;
|
||||||
import forge.game.GameObject;
|
import forge.game.GameObject;
|
||||||
import forge.game.ability.AbilityUtils;
|
import forge.game.ability.AbilityUtils;
|
||||||
@@ -11,6 +13,7 @@ import forge.game.card.Card;
|
|||||||
import forge.game.card.CardCollection;
|
import forge.game.card.CardCollection;
|
||||||
import forge.game.card.CardDamageMap;
|
import forge.game.card.CardDamageMap;
|
||||||
import forge.game.card.CardUtil;
|
import forge.game.card.CardUtil;
|
||||||
|
import forge.game.keyword.Keyword;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.spellability.SpellAbility;
|
import forge.game.spellability.SpellAbility;
|
||||||
import forge.util.Lang;
|
import forge.util.Lang;
|
||||||
@@ -123,6 +126,7 @@ public class DamageDealEffect extends DamageBaseEffect {
|
|||||||
@Override
|
@Override
|
||||||
public void resolve(SpellAbility sa) {
|
public void resolve(SpellAbility sa) {
|
||||||
final Card hostCard = sa.getHostCard();
|
final Card hostCard = sa.getHostCard();
|
||||||
|
final Player activationPlayer = sa.getActivatingPlayer();
|
||||||
final Game game = hostCard.getGame();
|
final Game game = hostCard.getGame();
|
||||||
|
|
||||||
final String damage = sa.getParam("NumDmg");
|
final String damage = sa.getParam("NumDmg");
|
||||||
@@ -234,6 +238,9 @@ public class DamageDealEffect extends DamageBaseEffect {
|
|||||||
|
|
||||||
for (final Object o : tgts) {
|
for (final Object o : tgts) {
|
||||||
dmg = (sa.usesTargeting() && sa.hasParam("DividedAsYouChoose")) ? sa.getTargetRestrictions().getDividedValue(o) : dmg;
|
dmg = (sa.usesTargeting() && sa.hasParam("DividedAsYouChoose")) ? sa.getTargetRestrictions().getDividedValue(o) : dmg;
|
||||||
|
if (dmg <= 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (o instanceof Card) {
|
if (o instanceof Card) {
|
||||||
final Card c = (Card) o;
|
final Card c = (Card) o;
|
||||||
final Card gc = game.getCardState(c, null);
|
final Card gc = game.getCardState(c, null);
|
||||||
@@ -247,7 +254,27 @@ public class DamageDealEffect extends DamageBaseEffect {
|
|||||||
c.setHasBeenDealtDeathtouchDamage(false);
|
c.setHasBeenDealtDeathtouchDamage(false);
|
||||||
c.clearAssignedDamage();
|
c.clearAssignedDamage();
|
||||||
} else {
|
} else {
|
||||||
c.addDamage(dmg, sourceLKI, false, noPrevention, damageMap, preventMap, counterTable, sa);
|
if (sa.hasParam("ExcessDamage") && (!sa.hasParam("ExcessDamageCondition") ||
|
||||||
|
sourceLKI.isValid(sa.getParam("ExcessDamageCondition").split(","), activationPlayer, hostCard, sa))) {
|
||||||
|
// excess damage explicit says toughness, not lethal damage in the rules
|
||||||
|
int lethal = c.getNetToughness() - c.getDamage();
|
||||||
|
if (sourceLKI.hasKeyword(Keyword.DEATHTOUCH)) {
|
||||||
|
lethal = Math.min(lethal, 1);
|
||||||
|
}
|
||||||
|
int dmgToTarget = Math.min(lethal, dmg);
|
||||||
|
|
||||||
|
c.addDamage(dmgToTarget, sourceLKI, false, noPrevention, damageMap, preventMap, counterTable, sa);
|
||||||
|
|
||||||
|
List<GameEntity> list = Lists.newArrayList();
|
||||||
|
list.addAll(AbilityUtils.getDefinedCards(hostCard, sa.getParam("ExcessDamage"), sa));
|
||||||
|
list.addAll(AbilityUtils.getDefinedPlayers(hostCard, sa.getParam("ExcessDamage"), sa));
|
||||||
|
|
||||||
|
if (!list.isEmpty()) {
|
||||||
|
list.get(0).addDamage(dmg - dmgToTarget, sourceLKI, false, noPrevention, damageMap, preventMap, counterTable, sa);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
c.addDamage(dmg, sourceLKI, false, noPrevention, damageMap, preventMap, counterTable, sa);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (o instanceof Player) {
|
} else if (o instanceof Player) {
|
||||||
|
|||||||
@@ -4793,7 +4793,7 @@ public class Card extends GameEntity implements Comparable<Card> {
|
|||||||
|
|
||||||
// this is the amount of damage a creature needs to receive before it dies
|
// this is the amount of damage a creature needs to receive before it dies
|
||||||
public final int getLethal() {
|
public final int getLethal() {
|
||||||
if (getAmountOfKeyword("Lethal damage dealt to CARDNAME is determined by its power rather than its toughness.") % 2 !=0) {
|
if (hasKeyword("Lethal damage dealt to CARDNAME is determined by its power rather than its toughness.")) {
|
||||||
return getNetPower(); }
|
return getNetPower(); }
|
||||||
else {
|
else {
|
||||||
return getNetToughness(); }
|
return getNetToughness(); }
|
||||||
@@ -4801,11 +4801,7 @@ public class Card extends GameEntity implements Comparable<Card> {
|
|||||||
|
|
||||||
// this is the minimal damage a trampling creature has to assign to a blocker
|
// this is the minimal damage a trampling creature has to assign to a blocker
|
||||||
public final int getLethalDamage() {
|
public final int getLethalDamage() {
|
||||||
if (getAmountOfKeyword("Lethal damage dealt to CARDNAME is determined by its power rather than its toughness.") % 2 !=0) {
|
return getLethal() - getDamage() - getTotalAssignedDamage();
|
||||||
return getNetPower() - getDamage() - getTotalAssignedDamage();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return getNetToughness() - getDamage() - getTotalAssignedDamage();}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public final int getDamage() {
|
public final int getDamage() {
|
||||||
|
|||||||
@@ -254,6 +254,7 @@ public class CardView extends GameEntityView {
|
|||||||
}
|
}
|
||||||
void updateDamage(Card c) {
|
void updateDamage(Card c) {
|
||||||
set(TrackableProperty.Damage, c.getDamage());
|
set(TrackableProperty.Damage, c.getDamage());
|
||||||
|
set(TrackableProperty.LethalDamage, c.getLethalDamage());
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getAssignedDamage() {
|
public int getAssignedDamage() {
|
||||||
@@ -261,10 +262,11 @@ public class CardView extends GameEntityView {
|
|||||||
}
|
}
|
||||||
void updateAssignedDamage(Card c) {
|
void updateAssignedDamage(Card c) {
|
||||||
set(TrackableProperty.AssignedDamage, c.getTotalAssignedDamage());
|
set(TrackableProperty.AssignedDamage, c.getTotalAssignedDamage());
|
||||||
|
set(TrackableProperty.LethalDamage, c.getLethalDamage());
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getLethalDamage() {
|
public int getLethalDamage() {
|
||||||
return getCurrentState().getToughness() - getDamage() - getAssignedDamage();
|
return get(TrackableProperty.LethalDamage);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getShieldCount() {
|
public int getShieldCount() {
|
||||||
@@ -701,6 +703,7 @@ public class CardView extends GameEntityView {
|
|||||||
}
|
}
|
||||||
void updateState(Card c) {
|
void updateState(Card c) {
|
||||||
updateName(c);
|
updateName(c);
|
||||||
|
updateDamage(c);
|
||||||
|
|
||||||
boolean isSplitCard = c.isSplitCard();
|
boolean isSplitCard = c.isSplitCard();
|
||||||
set(TrackableProperty.Cloned, c.isCloned());
|
set(TrackableProperty.Cloned, c.isCloned());
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ public enum TrackableProperty {
|
|||||||
CommanderAltType(TrackableTypes.StringType),
|
CommanderAltType(TrackableTypes.StringType),
|
||||||
Damage(TrackableTypes.IntegerType),
|
Damage(TrackableTypes.IntegerType),
|
||||||
AssignedDamage(TrackableTypes.IntegerType),
|
AssignedDamage(TrackableTypes.IntegerType),
|
||||||
|
LethalDamage(TrackableTypes.IntegerType),
|
||||||
ShieldCount(TrackableTypes.IntegerType),
|
ShieldCount(TrackableTypes.IntegerType),
|
||||||
ChosenType(TrackableTypes.StringType),
|
ChosenType(TrackableTypes.StringType),
|
||||||
ChosenColors(TrackableTypes.StringListType),
|
ChosenColors(TrackableTypes.StringListType),
|
||||||
|
|||||||
@@ -932,7 +932,7 @@ public final class CMatchUI
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<CardView, Integer> assignDamage(final CardView attacker,
|
public Map<CardView, Integer> assignCombatDamage(final CardView attacker,
|
||||||
final List<CardView> blockers, final int damage,
|
final List<CardView> blockers, final int damage,
|
||||||
final GameEntityView defender, final boolean overrideOrder) {
|
final GameEntityView defender, final boolean overrideOrder) {
|
||||||
if (damage <= 0) {
|
if (damage <= 0) {
|
||||||
@@ -949,7 +949,7 @@ public final class CMatchUI
|
|||||||
FThreads.invokeInEdtAndWait(new Runnable() {
|
FThreads.invokeInEdtAndWait(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
final VAssignDamage v = new VAssignDamage(CMatchUI.this, attacker, blockers, damage, defender, overrideOrder);
|
final VAssignCombatDamage v = new VAssignCombatDamage(CMatchUI.this, attacker, blockers, damage, defender, overrideOrder);
|
||||||
result.set(v.getDamageMap());
|
result.set(v.getDamageMap());
|
||||||
}});
|
}});
|
||||||
return result.get();
|
return result.get();
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ import forge.util.Localizer;
|
|||||||
*
|
*
|
||||||
* <br><br><i>(V at beginning of class name denotes a view class.)</i>
|
* <br><br><i>(V at beginning of class name denotes a view class.)</i>
|
||||||
*/
|
*/
|
||||||
public class VAssignDamage {
|
public class VAssignCombatDamage {
|
||||||
final Localizer localizer = Localizer.getInstance();
|
final Localizer localizer = Localizer.getInstance();
|
||||||
private final CMatchUI matchUI;
|
private final CMatchUI matchUI;
|
||||||
|
|
||||||
@@ -119,7 +119,7 @@ public class VAssignDamage {
|
|||||||
CardView source = ((CardPanel) evt.getSource()).getCard();
|
CardView source = ((CardPanel) evt.getSource()).getCard();
|
||||||
if (!damage.containsKey(source)) source = null; // to get player instead of fake card
|
if (!damage.containsKey(source)) source = null; // to get player instead of fake card
|
||||||
|
|
||||||
final FSkin.Colors brdrColor = VAssignDamage.this.canAssignTo(source) ? FSkin.Colors.CLR_ACTIVE : FSkin.Colors.CLR_INACTIVE;
|
final FSkin.Colors brdrColor = VAssignCombatDamage.this.canAssignTo(source) ? FSkin.Colors.CLR_ACTIVE : FSkin.Colors.CLR_INACTIVE;
|
||||||
((CardPanel) evt.getSource()).setBorder(new FSkin.LineSkinBorder(FSkin.getColor(brdrColor), 2));
|
((CardPanel) evt.getSource()).setBorder(new FSkin.LineSkinBorder(FSkin.getColor(brdrColor), 2));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -141,7 +141,7 @@ public class VAssignDamage {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public VAssignDamage(final CMatchUI matchUI, final CardView attacker, final List<CardView> blockers, final int damage0, final GameEntityView defender0, boolean overrideOrder) {
|
public VAssignCombatDamage(final CMatchUI matchUI, final CardView attacker, final List<CardView> blockers, final int damage0, final GameEntityView defender0, boolean overrideOrder) {
|
||||||
this.matchUI = matchUI;
|
this.matchUI = matchUI;
|
||||||
String s = localizer.getMessage("lbLAssignDamageDealtBy");
|
String s = localizer.getMessage("lbLAssignDamageDealtBy");
|
||||||
dlg.setTitle(s.replace("%s",attacker.toString()));
|
dlg.setTitle(s.replace("%s",attacker.toString()));
|
||||||
@@ -277,7 +277,7 @@ public class VAssignDamage {
|
|||||||
// If trying to assign to the defender, follow the normal assignment rules
|
// If trying to assign to the defender, follow the normal assignment rules
|
||||||
// No need to check for "active" creature assignee when overiding combatant order
|
// No need to check for "active" creature assignee when overiding combatant order
|
||||||
if ((source == null || source == defender || !overrideCombatantOrder) && isAdding &&
|
if ((source == null || source == defender || !overrideCombatantOrder) && isAdding &&
|
||||||
!VAssignDamage.this.canAssignTo(source)) {
|
!VAssignCombatDamage.this.canAssignTo(source)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -441,7 +441,10 @@ public class VAssignDamage {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
lethalDamage = VAssignDamage.this.attackerHasDeathtouch ? 1 : Math.max(0, card.getLethalDamage());
|
lethalDamage = Math.max(0, card.getLethalDamage());
|
||||||
|
if (attackerHasDeathtouch) {
|
||||||
|
lethalDamage = Math.min(lethalDamage, 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return lethalDamage;
|
return lethalDamage;
|
||||||
}
|
}
|
||||||
@@ -45,7 +45,7 @@ import forge.player.PlayerZoneUpdate;
|
|||||||
import forge.player.PlayerZoneUpdates;
|
import forge.player.PlayerZoneUpdates;
|
||||||
import forge.properties.ForgePreferences;
|
import forge.properties.ForgePreferences;
|
||||||
import forge.properties.ForgePreferences.FPref;
|
import forge.properties.ForgePreferences.FPref;
|
||||||
import forge.screens.match.views.VAssignDamage;
|
import forge.screens.match.views.VAssignCombatDamage;
|
||||||
import forge.screens.match.views.VPhaseIndicator;
|
import forge.screens.match.views.VPhaseIndicator;
|
||||||
import forge.screens.match.views.VPhaseIndicator.PhaseLabel;
|
import forge.screens.match.views.VPhaseIndicator.PhaseLabel;
|
||||||
import forge.screens.match.views.VPlayerPanel;
|
import forge.screens.match.views.VPlayerPanel;
|
||||||
@@ -360,11 +360,11 @@ public class MatchController extends AbstractGuiGame {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<CardView, Integer> assignDamage(final CardView attacker, final List<CardView> blockers, final int damage, final GameEntityView defender, final boolean overrideOrder) {
|
public Map<CardView, Integer> assignCombatDamage(final CardView attacker, final List<CardView> blockers, final int damage, final GameEntityView defender, final boolean overrideOrder) {
|
||||||
return new WaitCallback<Map<CardView, Integer>>() {
|
return new WaitCallback<Map<CardView, Integer>>() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
final VAssignDamage v = new VAssignDamage(attacker, blockers, damage, defender, overrideOrder, this);
|
final VAssignCombatDamage v = new VAssignCombatDamage(attacker, blockers, damage, defender, overrideOrder, this);
|
||||||
v.show();
|
v.show();
|
||||||
}
|
}
|
||||||
}.invokeAndWait();
|
}.invokeAndWait();
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ import java.util.Map;
|
|||||||
|
|
||||||
import com.badlogic.gdx.utils.Align;
|
import com.badlogic.gdx.utils.Align;
|
||||||
|
|
||||||
public class VAssignDamage extends FDialog {
|
public class VAssignCombatDamage extends FDialog {
|
||||||
private static final float CARD_GAP_X = Utils.scale(10);
|
private static final float CARD_GAP_X = Utils.scale(10);
|
||||||
private static final float ADD_BTN_HEIGHT = Utils.AVG_FINGER_HEIGHT * 0.75f;
|
private static final float ADD_BTN_HEIGHT = Utils.AVG_FINGER_HEIGHT * 0.75f;
|
||||||
|
|
||||||
@@ -95,7 +95,7 @@ public class VAssignDamage extends FDialog {
|
|||||||
* @param defender GameEntity that's bein attacked
|
* @param defender GameEntity that's bein attacked
|
||||||
* @param overrideOrder override combatant order
|
* @param overrideOrder override combatant order
|
||||||
*/
|
*/
|
||||||
public VAssignDamage(final CardView attacker, final List<CardView> blockers, final int damage0, final GameEntityView defender0, boolean overrideOrder, final WaitCallback<Map<CardView, Integer>> waitCallback) {
|
public VAssignCombatDamage(final CardView attacker, final List<CardView> blockers, final int damage0, final GameEntityView defender0, boolean overrideOrder, final WaitCallback<Map<CardView, Integer>> waitCallback) {
|
||||||
super(Localizer.getInstance().getMessage("lbLAssignDamageDealtBy").replace("%s",CardTranslation.getTranslatedName(attacker.getName())) , 3);
|
super(Localizer.getInstance().getMessage("lbLAssignDamageDealtBy").replace("%s",CardTranslation.getTranslatedName(attacker.getName())) , 3);
|
||||||
|
|
||||||
callback = waitCallback;
|
callback = waitCallback;
|
||||||
@@ -453,7 +453,10 @@ public class VAssignDamage extends FDialog {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
lethalDamage = attackerHasDeathtouch ? 1 : Math.max(0, source.getLethalDamage());
|
lethalDamage = Math.max(0, source.getLethalDamage());
|
||||||
|
if (attackerHasDeathtouch) {
|
||||||
|
lethalDamage = Math.min(lethalDamage, 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return lethalDamage;
|
return lethalDamage;
|
||||||
}
|
}
|
||||||
5
forge-gui/res/cardsfolder/f/flame_spill.txt
Normal file
5
forge-gui/res/cardsfolder/f/flame_spill.txt
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
Name:Flame Spill
|
||||||
|
ManaCost:2 R
|
||||||
|
Types:Instant
|
||||||
|
A:SP$ DealDamage | Cost$ 2 R | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ 4 | ExcessDamage$ TargetedController | SpellDescription$ CARDNAME deals 4 damage to target creature. Excess damage is dealt to that creature’s controller instead.
|
||||||
|
Oracle:Flame Spill deals 4 damage to target creature. Excess damage is dealt to that creature’s controller instead.
|
||||||
7
forge-gui/res/cardsfolder/r/ram_through.txt
Normal file
7
forge-gui/res/cardsfolder/r/ram_through.txt
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
Name:Ram Through
|
||||||
|
ManaCost:1 G
|
||||||
|
Types:Instant
|
||||||
|
A:SP$ Pump | Cost$ 1 G | ValidTgts$ Creature.YouCtrl | AILogic$ PowerDmg | TgtPrompt$ Select target creature you control | SubAbility$ SoulsDamage | StackDescription$ SpellDescription | SpellDescription$ Target creature you control deals damage equal to its power to target creature you don’t control. If the creature you control has trample, excess damage is dealt to that creature’s controller instead.
|
||||||
|
SVar:SoulsDamage:DB$ DealDamage | ValidTgts$ Creature.YouDontCtrl | AILogic$ PowerDmg | TgtPrompt$ Select target creature you don't control | NumDmg$ X | References$ X | ConditionDefined$ Targeted | ConditionPresent$ Creature | ConditionCompare$ EQ1 | DamageSource$ ParentTarget | ExcessDamage$ TargetedController | ExcessDamageCondition$ Card.withTrample | StackDescription$ None
|
||||||
|
SVar:X:ParentTargeted$CardPower
|
||||||
|
Oracle:Target creature you control deals damage equal to its power to target creature you don’t control. If the creature you control has trample, excess damage is dealt to that creature’s controller instead.
|
||||||
@@ -62,7 +62,7 @@ public interface IGuiGame {
|
|||||||
void updateLives(Iterable<PlayerView> livesUpdate);
|
void updateLives(Iterable<PlayerView> livesUpdate);
|
||||||
void setPanelSelection(CardView hostCard);
|
void setPanelSelection(CardView hostCard);
|
||||||
SpellAbilityView getAbilityToPlay(CardView hostCard, List<SpellAbilityView> abilities, ITriggerEvent triggerEvent);
|
SpellAbilityView getAbilityToPlay(CardView hostCard, List<SpellAbilityView> abilities, ITriggerEvent triggerEvent);
|
||||||
Map<CardView, Integer> assignDamage(CardView attacker, List<CardView> blockers, int damage, GameEntityView defender, boolean overrideOrder);
|
Map<CardView, Integer> assignCombatDamage(CardView attacker, List<CardView> blockers, int damage, GameEntityView defender, boolean overrideOrder);
|
||||||
|
|
||||||
void message(String message);
|
void message(String message);
|
||||||
void message(String message, String title);
|
void message(String message, String title);
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ public enum ProtocolMethod {
|
|||||||
updateLives (Mode.SERVER, Void.TYPE, Iterable/*PlayerView*/.class),
|
updateLives (Mode.SERVER, Void.TYPE, Iterable/*PlayerView*/.class),
|
||||||
setPanelSelection (Mode.SERVER, Void.TYPE, CardView.class),
|
setPanelSelection (Mode.SERVER, Void.TYPE, CardView.class),
|
||||||
getAbilityToPlay (Mode.SERVER, SpellAbilityView.class, CardView.class, List/*SpellAbilityView*/.class, ITriggerEvent.class),
|
getAbilityToPlay (Mode.SERVER, SpellAbilityView.class, CardView.class, List/*SpellAbilityView*/.class, ITriggerEvent.class),
|
||||||
assignDamage (Mode.SERVER, Map.class, CardView.class, List/*CardView*/.class, Integer.TYPE, GameEntityView.class, Boolean.TYPE),
|
assignCombatDamage (Mode.SERVER, Map.class, CardView.class, List/*CardView*/.class, Integer.TYPE, GameEntityView.class, Boolean.TYPE),
|
||||||
message (Mode.SERVER, Void.TYPE, String.class, String.class),
|
message (Mode.SERVER, Void.TYPE, String.class, String.class),
|
||||||
showErrorDialog (Mode.SERVER, Void.TYPE, String.class, String.class),
|
showErrorDialog (Mode.SERVER, Void.TYPE, String.class, String.class),
|
||||||
showConfirmDialog (Mode.SERVER, Boolean.TYPE, String.class, String.class, String.class, String.class, Boolean.TYPE),
|
showConfirmDialog (Mode.SERVER, Boolean.TYPE, String.class, String.class, String.class, String.class, Boolean.TYPE),
|
||||||
|
|||||||
@@ -195,8 +195,8 @@ public class NetGuiGame extends AbstractGuiGame {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<CardView, Integer> assignDamage(final CardView attacker, final List<CardView> blockers, final int damage, final GameEntityView defender, final boolean overrideOrder) {
|
public Map<CardView, Integer> assignCombatDamage(final CardView attacker, final List<CardView> blockers, final int damage, final GameEntityView defender, final boolean overrideOrder) {
|
||||||
return sendAndWait(ProtocolMethod.assignDamage, attacker, blockers, damage, defender, overrideOrder);
|
return sendAndWait(ProtocolMethod.assignCombatDamage, attacker, blockers, damage, defender, overrideOrder);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -291,7 +291,7 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont
|
|||||||
if ((attacker.hasKeyword(Keyword.TRAMPLE) && defender != null) || (blockers.size() > 1)) {
|
if ((attacker.hasKeyword(Keyword.TRAMPLE) && defender != null) || (blockers.size() > 1)) {
|
||||||
final CardView vAttacker = CardView.get(attacker);
|
final CardView vAttacker = CardView.get(attacker);
|
||||||
final GameEntityView vDefender = GameEntityView.get(defender);
|
final GameEntityView vDefender = GameEntityView.get(defender);
|
||||||
final Map<CardView, Integer> result = getGui().assignDamage(vAttacker, vBlockers, damageDealt,
|
final Map<CardView, Integer> result = getGui().assignCombatDamage(vAttacker, vBlockers, damageDealt,
|
||||||
vDefender, overrideOrder);
|
vDefender, overrideOrder);
|
||||||
for (final Entry<CardView, Integer> e : result.entrySet()) {
|
for (final Entry<CardView, Integer> e : result.entrySet()) {
|
||||||
map.put(game.getCard(e.getKey()), e.getValue());
|
map.put(game.getCard(e.getKey()), e.getValue());
|
||||||
|
|||||||
Reference in New Issue
Block a user