more mechanical transformations

This commit is contained in:
Ryan1729
2019-09-14 00:03:12 -06:00
parent a9c020d2ac
commit b532d1a0ca
7 changed files with 59 additions and 52 deletions

View File

@@ -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");

View File

@@ -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);
} }
} }

View File

@@ -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);
} }

View File

@@ -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++;

View File

@@ -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();
} }

View File

@@ -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);

View File

@@ -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()) {