mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 04:08:01 +00:00
more mechanical transformations
This commit is contained in:
@@ -9,6 +9,7 @@ import java.util.Map;
|
|||||||
public enum AbilityKey {
|
public enum AbilityKey {
|
||||||
AbilityMana("AbilityMana"),
|
AbilityMana("AbilityMana"),
|
||||||
Affected("Affected"),
|
Affected("Affected"),
|
||||||
|
AllVotes("AllVotes"),
|
||||||
Attacker("Attacker"),
|
Attacker("Attacker"),
|
||||||
Attackers("Attackers"),
|
Attackers("Attackers"),
|
||||||
AttackingPlayer("AttackingPlayer"),
|
AttackingPlayer("AttackingPlayer"),
|
||||||
@@ -20,17 +21,24 @@ public enum AbilityKey {
|
|||||||
Cause("Cause"),
|
Cause("Cause"),
|
||||||
Causer("Causer"),
|
Causer("Causer"),
|
||||||
Championed("Championed"),
|
Championed("Championed"),
|
||||||
|
CounterAmount("CounterAmount"),
|
||||||
CounteredSA("CounteredSA"),
|
CounteredSA("CounteredSA"),
|
||||||
|
CounterType("CounterType"),
|
||||||
|
CumulativeUpkeepPaid("CumulativeUpkeepPaid"),
|
||||||
DamageAmount("DamageAmount"),
|
DamageAmount("DamageAmount"),
|
||||||
DamageSource("DamageSource"),
|
DamageSource("DamageSource"),
|
||||||
DamageTarget("DamageTarget"),
|
DamageTarget("DamageTarget"),
|
||||||
Defender("Defender"),
|
Defender("Defender"),
|
||||||
DefendingPlayer("DefendingPlayer"),
|
DefendingPlayer("DefendingPlayer"),
|
||||||
Destination("Destination"),
|
Destination("Destination"),
|
||||||
|
Devoured("Devoured"),
|
||||||
|
EchoPaid("EchoPaid"),
|
||||||
|
Exploited("Exploited"),
|
||||||
Event("Event"),
|
Event("Event"),
|
||||||
Fighter("Fighter"),
|
Fighter("Fighter"),
|
||||||
Fizzle("Fizzle"),
|
Fizzle("Fizzle"),
|
||||||
IsCombatDamage("IsCombatDamage"),
|
IsCombatDamage("IsCombatDamage"),
|
||||||
|
PayingMana("PayingMana"),
|
||||||
Player("Player"),
|
Player("Player"),
|
||||||
IndividualCostPaymentInstance("IndividualCostPaymentInstance"),
|
IndividualCostPaymentInstance("IndividualCostPaymentInstance"),
|
||||||
MonstrosityAmount("MonstrosityAmount"),
|
MonstrosityAmount("MonstrosityAmount"),
|
||||||
@@ -41,10 +49,12 @@ public enum AbilityKey {
|
|||||||
Produced("Produced"),
|
Produced("Produced"),
|
||||||
Result("Result"),
|
Result("Result"),
|
||||||
Scheme("Scheme"),
|
Scheme("Scheme"),
|
||||||
|
Source("Source"),
|
||||||
SpellAbilityStackInstance("SpellAbilityStackInstance"),
|
SpellAbilityStackInstance("SpellAbilityStackInstance"),
|
||||||
StackSa("StackSa"),
|
StackSa("StackSa"),
|
||||||
StackSi("StackSi"),
|
StackSi("StackSi"),
|
||||||
Target("Target"),
|
Target("Target"),
|
||||||
|
Transformer("Transformer"),
|
||||||
Won("Won");
|
Won("Won");
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package forge.game.ability.effects;
|
package forge.game.ability.effects;
|
||||||
|
|
||||||
import forge.game.Game;
|
import forge.game.Game;
|
||||||
|
import forge.game.ability.AbilityKey;
|
||||||
import forge.game.ability.SpellAbilityEffect;
|
import forge.game.ability.SpellAbilityEffect;
|
||||||
import forge.game.card.Card;
|
import forge.game.card.Card;
|
||||||
import forge.game.event.GameEventCardRegenerated;
|
import forge.game.event.GameEventCardRegenerated;
|
||||||
@@ -44,10 +45,9 @@ public class RegenerationEffect extends SpellAbilityEffect {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Run triggers
|
// Run triggers
|
||||||
final Map<String, Object> runParams = Maps.newHashMap();
|
final Map<AbilityKey, Object> runParams = AbilityKey.mapFromCard(c);
|
||||||
runParams.put("Card", c);
|
runParams.put(AbilityKey.Cause, host);
|
||||||
runParams.put("Cause", host);
|
game.getTriggerHandler().runTrigger(TriggerType.Regenerated, runParams, false);
|
||||||
game.getTriggerHandler().runTriggerOld(TriggerType.Regenerated, runParams, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package forge.game.ability.effects;
|
package forge.game.ability.effects;
|
||||||
|
|
||||||
import forge.game.Game;
|
import forge.game.Game;
|
||||||
|
import forge.game.ability.AbilityKey;
|
||||||
import forge.game.ability.AbilityUtils;
|
import forge.game.ability.AbilityUtils;
|
||||||
import forge.game.ability.SpellAbilityEffect;
|
import forge.game.ability.SpellAbilityEffect;
|
||||||
import forge.game.card.Card;
|
import forge.game.card.Card;
|
||||||
@@ -74,9 +75,7 @@ public class RevealEffect extends SpellAbilityEffect {
|
|||||||
|
|
||||||
game.getAction().reveal(revealed, p);
|
game.getAction().reveal(revealed, p);
|
||||||
for (final Card c : revealed) {
|
for (final Card c : revealed) {
|
||||||
Map<String, Object> runParams = Maps.newHashMap();
|
game.getTriggerHandler().runTrigger(TriggerType.Revealed, AbilityKey.mapFromCard(c), false);
|
||||||
runParams.put("Card", c);
|
|
||||||
game.getTriggerHandler().runTriggerOld(TriggerType.Revealed, runParams, false);
|
|
||||||
if (sa.hasParam("RememberRevealed")) {
|
if (sa.hasParam("RememberRevealed")) {
|
||||||
host.addRemembered(c);
|
host.addRemembered(c);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import forge.card.mana.ManaCost;
|
|||||||
import forge.game.Game;
|
import forge.game.Game;
|
||||||
import forge.game.GameActionUtil;
|
import forge.game.GameActionUtil;
|
||||||
import forge.game.GameEntityCounterTable;
|
import forge.game.GameEntityCounterTable;
|
||||||
|
import forge.game.ability.AbilityKey;
|
||||||
import forge.game.ability.AbilityUtils;
|
import forge.game.ability.AbilityUtils;
|
||||||
import forge.game.ability.SpellAbilityEffect;
|
import forge.game.ability.SpellAbilityEffect;
|
||||||
import forge.game.card.*;
|
import forge.game.card.*;
|
||||||
@@ -36,10 +37,9 @@ public class SacrificeEffect extends SpellAbilityEffect {
|
|||||||
isPaid = activator.getController().payManaOptional(card, new Cost(sa.getParam("Echo"), true),
|
isPaid = activator.getController().payManaOptional(card, new Cost(sa.getParam("Echo"), true),
|
||||||
sa, "Pay Echo", ManaPaymentPurpose.Echo);
|
sa, "Pay Echo", ManaPaymentPurpose.Echo);
|
||||||
}
|
}
|
||||||
final Map<String, Object> runParams = Maps.newHashMap();
|
final Map<AbilityKey, Object> runParams = AbilityKey.mapFromCard(card);
|
||||||
runParams.put("EchoPaid", Boolean.valueOf(isPaid));
|
runParams.put(AbilityKey.EchoPaid, isPaid);
|
||||||
runParams.put("Card", card);
|
game.getTriggerHandler().runTrigger(TriggerType.PayEcho, runParams, false);
|
||||||
game.getTriggerHandler().runTriggerOld(TriggerType.PayEcho, runParams, false);
|
|
||||||
if (isPaid || !card.getController().equals(activator)) {
|
if (isPaid || !card.getController().equals(activator)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -65,11 +65,10 @@ public class SacrificeEffect extends SpellAbilityEffect {
|
|||||||
sb.append("Cumulative upkeep for ").append(card);
|
sb.append("Cumulative upkeep for ").append(card);
|
||||||
|
|
||||||
boolean isPaid = activator.getController().payManaOptional(card, payCost, sa, sb.toString(), ManaPaymentPurpose.CumulativeUpkeep);
|
boolean isPaid = activator.getController().payManaOptional(card, payCost, sa, sb.toString(), ManaPaymentPurpose.CumulativeUpkeep);
|
||||||
final Map<String, Object> runParams = Maps.newHashMap();
|
final Map<AbilityKey, Object> runParams = AbilityKey.mapFromCard(card);
|
||||||
runParams.put("CumulativeUpkeepPaid", Boolean.valueOf(isPaid));
|
runParams.put(AbilityKey.CumulativeUpkeepPaid, isPaid);
|
||||||
runParams.put("Card", card);
|
runParams.put(AbilityKey.PayingMana, StringUtils.join(sa.getPayingMana(), ""));
|
||||||
runParams.put("PayingMana", StringUtils.join(sa.getPayingMana(), ""));
|
game.getTriggerHandler().runTrigger(TriggerType.PayCumulativeUpkeep, runParams, false);
|
||||||
game.getTriggerHandler().runTriggerOld(TriggerType.PayCumulativeUpkeep, runParams, false);
|
|
||||||
if (isPaid || !card.getController().equals(activator)) {
|
if (isPaid || !card.getController().equals(activator)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -147,16 +146,15 @@ public class SacrificeEffect extends SpellAbilityEffect {
|
|||||||
// Run Devour Trigger
|
// Run Devour Trigger
|
||||||
if (devour) {
|
if (devour) {
|
||||||
card.addDevoured(lKICopy);
|
card.addDevoured(lKICopy);
|
||||||
final Map<String, Object> runParams = Maps.newHashMap();
|
final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
|
||||||
runParams.put("Devoured", sac);
|
runParams.put(AbilityKey.Devoured, sac);
|
||||||
game.getTriggerHandler().runTriggerOld(TriggerType.Devoured, runParams, false);
|
game.getTriggerHandler().runTrigger(TriggerType.Devoured, runParams, false);
|
||||||
}
|
}
|
||||||
if (exploit) {
|
if (exploit) {
|
||||||
card.addExploited(lKICopy);
|
card.addExploited(lKICopy);
|
||||||
final Map<String, Object> runParams = Maps.newHashMap();
|
final Map<AbilityKey, Object> runParams = AbilityKey.mapFromCard(card);
|
||||||
runParams.put("Exploited", lKICopy);
|
runParams.put(AbilityKey.Exploited, lKICopy);
|
||||||
runParams.put("Card", card);
|
game.getTriggerHandler().runTrigger(TriggerType.Exploited, runParams, false);
|
||||||
game.getTriggerHandler().runTriggerOld(TriggerType.Exploited, runParams, false);
|
|
||||||
}
|
}
|
||||||
if (wasDestroyed || wasSacrificed) {
|
if (wasDestroyed || wasSacrificed) {
|
||||||
countSacrificed++;
|
countSacrificed++;
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package forge.game.ability.effects;
|
|||||||
|
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import forge.game.Game;
|
import forge.game.Game;
|
||||||
|
import forge.game.ability.AbilityKey;
|
||||||
import forge.game.ability.AbilityUtils;
|
import forge.game.ability.AbilityUtils;
|
||||||
import forge.game.ability.SpellAbilityEffect;
|
import forge.game.ability.SpellAbilityEffect;
|
||||||
import forge.game.card.Card;
|
import forge.game.card.Card;
|
||||||
@@ -46,9 +47,9 @@ public class SetInMotionEffect extends SpellAbilityEffect {
|
|||||||
game.getTriggerHandler().clearSuppression(TriggerType.ChangesZone);
|
game.getTriggerHandler().clearSuppression(TriggerType.ChangesZone);
|
||||||
|
|
||||||
// Run triggers
|
// Run triggers
|
||||||
final Map<String, Object> runParams = Maps.newHashMap();
|
final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
|
||||||
runParams.put("Scheme", controller.getActiveScheme());
|
runParams.put(AbilityKey.Scheme, controller.getActiveScheme());
|
||||||
game.getTriggerHandler().runTriggerOld(TriggerType.SetInMotion, runParams, false);
|
game.getTriggerHandler().runTrigger(TriggerType.SetInMotion, runParams, false);
|
||||||
} else {
|
} else {
|
||||||
controller.setSchemeInMotion();
|
controller.setSchemeInMotion();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import java.util.Collections;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import forge.game.ability.AbilityKey;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
import com.google.common.collect.ArrayListMultimap;
|
import com.google.common.collect.ArrayListMultimap;
|
||||||
@@ -99,9 +100,9 @@ public class VoteEffect extends SpellAbilityEffect {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final Map<String, Object> runParams = Maps.newHashMap();
|
final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
|
||||||
runParams.put("AllVotes", votes);
|
runParams.put(AbilityKey.AllVotes, votes);
|
||||||
game.getTriggerHandler().runTriggerOld(TriggerType.Vote, runParams, false);
|
game.getTriggerHandler().runTrigger(TriggerType.Vote, runParams, false);
|
||||||
|
|
||||||
List<String> subAbs = Lists.newArrayList();
|
List<String> subAbs = Lists.newArrayList();
|
||||||
final List<Object> mostVotes = getMostVotes(votes);
|
final List<Object> mostVotes = getMostVotes(votes);
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ import forge.card.mana.ManaCost;
|
|||||||
import forge.card.mana.ManaCostParser;
|
import forge.card.mana.ManaCostParser;
|
||||||
import forge.game.*;
|
import forge.game.*;
|
||||||
import forge.game.ability.AbilityFactory;
|
import forge.game.ability.AbilityFactory;
|
||||||
|
import forge.game.ability.AbilityKey;
|
||||||
import forge.game.ability.AbilityUtils;
|
import forge.game.ability.AbilityUtils;
|
||||||
import forge.game.ability.ApiType;
|
import forge.game.ability.ApiType;
|
||||||
import forge.game.ability.effects.CharmEffect;
|
import forge.game.ability.effects.CharmEffect;
|
||||||
@@ -567,9 +568,9 @@ public class Card extends GameEntity implements Comparable<Card> {
|
|||||||
// Clear old dfc trigger from the trigger handler
|
// Clear old dfc trigger from the trigger handler
|
||||||
getGame().getTriggerHandler().clearInstrinsicActiveTriggers(this, null);
|
getGame().getTriggerHandler().clearInstrinsicActiveTriggers(this, null);
|
||||||
getGame().getTriggerHandler().registerActiveTrigger(this, false);
|
getGame().getTriggerHandler().registerActiveTrigger(this, false);
|
||||||
Map<String, Object> runParams = Maps.newHashMap();
|
final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
|
||||||
runParams.put("Transformer", this);
|
runParams.put(AbilityKey.Transformer, this);
|
||||||
getGame().getTriggerHandler().runTriggerOld(TriggerType.Transformed, runParams, false);
|
getGame().getTriggerHandler().runTrigger(TriggerType.Transformed, runParams, false);
|
||||||
incrementTransformedTimestamp();
|
incrementTransformedTimestamp();
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@@ -687,9 +688,7 @@ public class Card extends GameEntity implements Comparable<Card> {
|
|||||||
|
|
||||||
// Run triggers
|
// Run triggers
|
||||||
getGame().getTriggerHandler().registerActiveTrigger(this, false);
|
getGame().getTriggerHandler().registerActiveTrigger(this, false);
|
||||||
final Map<String, Object> runParams = Maps.newTreeMap();
|
getGame().getTriggerHandler().runTrigger(TriggerType.TurnFaceUp, AbilityKey.mapFromCard(this), false);
|
||||||
runParams.put("Card", this);
|
|
||||||
getGame().getTriggerHandler().runTriggerOld(TriggerType.TurnFaceUp, runParams, false);
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -1281,18 +1280,17 @@ public class Card extends GameEntity implements Comparable<Card> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Run triggers
|
// Run triggers
|
||||||
final Map<String, Object> runParams = Maps.newHashMap();
|
final Map<AbilityKey, Object> runParams = AbilityKey.mapFromCard(this);
|
||||||
runParams.put("Card", this);
|
runParams.put(AbilityKey.Source, source);
|
||||||
runParams.put("Source", source);
|
runParams.put(AbilityKey.CounterType, counterType);
|
||||||
runParams.put("CounterType", counterType);
|
|
||||||
for (int i = 0; i < addAmount; i++) {
|
for (int i = 0; i < addAmount; i++) {
|
||||||
runParams.put("CounterAmount", oldValue + i + 1);
|
runParams.put(AbilityKey.CounterAmount, oldValue + i + 1);
|
||||||
getGame().getTriggerHandler().runTriggerOld(
|
getGame().getTriggerHandler().runTrigger(
|
||||||
TriggerType.CounterAdded, Maps.newHashMap(runParams), false);
|
TriggerType.CounterAdded, Maps.newHashMap(runParams), false);
|
||||||
}
|
}
|
||||||
if (addAmount > 0) {
|
if (addAmount > 0) {
|
||||||
runParams.put("CounterAmount", addAmount);
|
runParams.put(AbilityKey.CounterAmount, addAmount);
|
||||||
getGame().getTriggerHandler().runTriggerOld(
|
getGame().getTriggerHandler().runTrigger(
|
||||||
TriggerType.CounterAddedOnce, Maps.newHashMap(runParams), false);
|
TriggerType.CounterAddedOnce, Maps.newHashMap(runParams), false);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -4900,17 +4898,17 @@ public class Card extends GameEntity implements Comparable<Card> {
|
|||||||
source.addDealtDamageToThisTurn(this, damageIn);
|
source.addDealtDamageToThisTurn(this, damageIn);
|
||||||
|
|
||||||
// Run triggers
|
// Run triggers
|
||||||
final Map<String, Object> runParams = Maps.newTreeMap();
|
final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
|
||||||
runParams.put("DamageSource", source);
|
runParams.put(AbilityKey.DamageSource, source);
|
||||||
runParams.put("DamageTarget", this);
|
runParams.put(AbilityKey.DamageTarget, this);
|
||||||
runParams.put("DamageAmount", damageIn);
|
runParams.put(AbilityKey.DamageAmount, damageIn);
|
||||||
runParams.put("IsCombatDamage", isCombat);
|
runParams.put(AbilityKey.IsCombatDamage, isCombat);
|
||||||
if (!isCombat) {
|
if (!isCombat) {
|
||||||
runParams.put("SpellAbilityStackInstance", game.stack.peek());
|
runParams.put(AbilityKey.SpellAbilityStackInstance, game.stack.peek());
|
||||||
}
|
}
|
||||||
// Defending player at the time the damage was dealt
|
// Defending player at the time the damage was dealt
|
||||||
runParams.put("DefendingPlayer", game.getCombat() != null ? game.getCombat().getDefendingPlayerRelatedTo(source) : null);
|
runParams.put(AbilityKey.DefendingPlayer, game.getCombat() != null ? game.getCombat().getDefendingPlayerRelatedTo(source) : null);
|
||||||
getGame().getTriggerHandler().runTriggerOld(TriggerType.DamageDone, runParams, false);
|
getGame().getTriggerHandler().runTrigger(TriggerType.DamageDone, runParams, false);
|
||||||
|
|
||||||
GameEventCardDamaged.DamageType damageType = DamageType.Normal;
|
GameEventCardDamaged.DamageType damageType = DamageType.Normal;
|
||||||
if (isPlaneswalker()) {
|
if (isPlaneswalker()) {
|
||||||
|
|||||||
Reference in New Issue
Block a user