mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 03:38:01 +00:00
Add Chromatic and Epic challenges
This commit is contained in:
3
.gitattributes
vendored
3
.gitattributes
vendored
@@ -264,7 +264,6 @@ forge-game/.settings/org.eclipse.m2e.core.prefs -text
|
|||||||
forge-game/pom.xml -text
|
forge-game/pom.xml -text
|
||||||
forge-game/src/main/java/forge/GameCommand.java svneol=native#text/plain
|
forge-game/src/main/java/forge/GameCommand.java svneol=native#text/plain
|
||||||
forge-game/src/main/java/forge/ImageKeys.java -text
|
forge-game/src/main/java/forge/ImageKeys.java -text
|
||||||
forge-game/src/main/java/forge/game/AchievementTracker.java -text
|
|
||||||
forge-game/src/main/java/forge/game/CardTraitBase.java -text
|
forge-game/src/main/java/forge/game/CardTraitBase.java -text
|
||||||
forge-game/src/main/java/forge/game/Direction.java -text
|
forge-game/src/main/java/forge/game/Direction.java -text
|
||||||
forge-game/src/main/java/forge/game/Game.java -text
|
forge-game/src/main/java/forge/game/Game.java -text
|
||||||
@@ -542,6 +541,7 @@ forge-game/src/main/java/forge/game/phase/PhaseType.java -text
|
|||||||
forge-game/src/main/java/forge/game/phase/Untap.java -text
|
forge-game/src/main/java/forge/game/phase/Untap.java -text
|
||||||
forge-game/src/main/java/forge/game/phase/Upkeep.java svneol=native#text/plain
|
forge-game/src/main/java/forge/game/phase/Upkeep.java svneol=native#text/plain
|
||||||
forge-game/src/main/java/forge/game/phase/package-info.java svneol=native#text/plain
|
forge-game/src/main/java/forge/game/phase/package-info.java svneol=native#text/plain
|
||||||
|
forge-game/src/main/java/forge/game/player/AchievementTracker.java -text
|
||||||
forge-game/src/main/java/forge/game/player/GameLossReason.java -text
|
forge-game/src/main/java/forge/game/player/GameLossReason.java -text
|
||||||
forge-game/src/main/java/forge/game/player/IGameEntitiesFactory.java -text
|
forge-game/src/main/java/forge/game/player/IGameEntitiesFactory.java -text
|
||||||
forge-game/src/main/java/forge/game/player/Player.java svneol=native#text/plain
|
forge-game/src/main/java/forge/game/player/Player.java svneol=native#text/plain
|
||||||
@@ -16897,7 +16897,6 @@ forge-gui/src/main/java/forge/achievement/ArcaneMaster.java -text
|
|||||||
forge-gui/src/main/java/forge/achievement/Blackjack.java -text
|
forge-gui/src/main/java/forge/achievement/Blackjack.java -text
|
||||||
forge-gui/src/main/java/forge/achievement/ChallengeAchievements.java -text
|
forge-gui/src/main/java/forge/achievement/ChallengeAchievements.java -text
|
||||||
forge-gui/src/main/java/forge/achievement/ConstructedAchievements.java -text
|
forge-gui/src/main/java/forge/achievement/ConstructedAchievements.java -text
|
||||||
forge-gui/src/main/java/forge/achievement/DeckChallengeAchievement.java -text
|
|
||||||
forge-gui/src/main/java/forge/achievement/DeckedOut.java -text
|
forge-gui/src/main/java/forge/achievement/DeckedOut.java -text
|
||||||
forge-gui/src/main/java/forge/achievement/Domain.java -text
|
forge-gui/src/main/java/forge/achievement/Domain.java -text
|
||||||
forge-gui/src/main/java/forge/achievement/DraftAchievements.java -text
|
forge-gui/src/main/java/forge/achievement/DraftAchievements.java -text
|
||||||
|
|||||||
@@ -1,12 +0,0 @@
|
|||||||
package forge.game;
|
|
||||||
|
|
||||||
import java.util.HashSet;
|
|
||||||
|
|
||||||
//class for storing information during a game that is used at the end of the game to determine achievements
|
|
||||||
public class AchievementTracker {
|
|
||||||
public final HashSet<String> activatedUltimates = new HashSet<String>();
|
|
||||||
public int mulliganTo = 7;
|
|
||||||
public int spellsCast = 0;
|
|
||||||
public int maxStormCount = 0;
|
|
||||||
public int landsPlayed = 0;
|
|
||||||
}
|
|
||||||
@@ -45,9 +45,9 @@ public class SpellApiBased extends Spell {
|
|||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see forge.card.spellability.SpellAbility#resolve()
|
* @see forge.card.spellability.SpellAbility#resolve()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void resolve() {
|
public void resolve() {
|
||||||
effect.resolve(this);
|
effect.resolve(this);
|
||||||
|
getActivatingPlayer().getAchievementTracker().onSpellResolve(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
package forge.game.player;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
|
||||||
|
import forge.card.MagicColor;
|
||||||
|
import forge.game.card.Card;
|
||||||
|
import forge.game.spellability.SpellAbility;
|
||||||
|
|
||||||
|
//class for storing information during a game that is used at the end of the game to determine achievements
|
||||||
|
public class AchievementTracker {
|
||||||
|
public final HashSet<String> activatedUltimates = new HashSet<String>();
|
||||||
|
public final HashSet<String> challengesCompleted = new HashSet<String>();
|
||||||
|
public int mulliganTo = 7;
|
||||||
|
public int spellsCast = 0;
|
||||||
|
public int maxStormCount = 0;
|
||||||
|
public int landsPlayed = 0;
|
||||||
|
|
||||||
|
public void onSpellAbilityPlayed(SpellAbility sa) {
|
||||||
|
final Card card = sa.getHostCard();
|
||||||
|
if (sa.getRestrictions().isPwAbility() && sa.hasParam("Ultimate")) {
|
||||||
|
activatedUltimates.add(card.getName());
|
||||||
|
}
|
||||||
|
if (card.determineColor().getColor() == MagicColor.ALL_COLORS) {
|
||||||
|
challengesCompleted.add("Chromatic");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onSpellResolve(SpellAbility spell) {
|
||||||
|
final Card card = spell.getHostCard();
|
||||||
|
if (card.hasKeyword("Epic")) {
|
||||||
|
challengesCompleted.add("Epic");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,8 @@
|
|||||||
package forge.achievement;
|
package forge.achievement;
|
||||||
|
|
||||||
|
import forge.deck.Deck;
|
||||||
|
import forge.game.Game;
|
||||||
|
import forge.game.player.Player;
|
||||||
import forge.properties.ForgeConstants;
|
import forge.properties.ForgeConstants;
|
||||||
|
|
||||||
public class ChallengeAchievements extends AchievementCollection {
|
public class ChallengeAchievements extends AchievementCollection {
|
||||||
@@ -20,5 +23,44 @@ public class ChallengeAchievements extends AchievementCollection {
|
|||||||
add(new NoSpells());
|
add(new NoSpells());
|
||||||
add(new NoLands());
|
add(new NoLands());
|
||||||
add(new Domain());
|
add(new Domain());
|
||||||
|
add("Chromatic", "Chromatic", "Win a game after casting a 5 color spell", "With great color requirements comes great power.");
|
||||||
|
add("Epic", "Epic", "Win a game after resolving a spell with the Epic keyword", "When it's the last spell you ever cast, you better make it count!");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void add(String key0, String displayName0, String description0, String flavorText0) {
|
||||||
|
add(new ChallengeAchievement(key0, displayName0, description0, flavorText0));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class ChallengeAchievement extends ProgressiveAchievement {
|
||||||
|
protected ChallengeAchievement(String key0, String displayName0, String description0, String flavorText0) {
|
||||||
|
super(key0, displayName0, description0, flavorText0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected final String getNoun() {
|
||||||
|
return "Win";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean eval(Player player, Game game) {
|
||||||
|
return player.getOutcome().hasWon() &&
|
||||||
|
player.getAchievementTracker().challengesCompleted.contains(getKey());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static abstract class DeckChallengeAchievement extends ChallengeAchievement {
|
||||||
|
protected DeckChallengeAchievement(String key0, String displayName0, String condition0, String flavorText0) {
|
||||||
|
super(key0, displayName0, "Win a game using a deck " + condition0, flavorText0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected final boolean eval(Player player, Game game) {
|
||||||
|
if (player.getOutcome().hasWon()) {
|
||||||
|
return eval(player.getRegisteredPlayer().getDeck());
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract boolean eval(Deck deck);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,26 +0,0 @@
|
|||||||
package forge.achievement;
|
|
||||||
|
|
||||||
import forge.deck.Deck;
|
|
||||||
import forge.game.Game;
|
|
||||||
import forge.game.player.Player;
|
|
||||||
|
|
||||||
public abstract class DeckChallengeAchievement extends ProgressiveAchievement {
|
|
||||||
protected DeckChallengeAchievement(String key0, String displayName0, String condition0, String flavorText0) {
|
|
||||||
super(key0, displayName0, "Win a game using a deck " + condition0, flavorText0);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected String getNoun() {
|
|
||||||
return "Win";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected final boolean eval(Player player, Game game) {
|
|
||||||
if (player.getOutcome().hasWon()) {
|
|
||||||
return eval(player.getRegisteredPlayer().getDeck());
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected abstract boolean eval(Deck deck);
|
|
||||||
}
|
|
||||||
@@ -2,6 +2,7 @@ package forge.achievement;
|
|||||||
|
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
|
import forge.achievement.ChallengeAchievements.DeckChallengeAchievement;
|
||||||
import forge.deck.Deck;
|
import forge.deck.Deck;
|
||||||
import forge.item.PaperCard;
|
import forge.item.PaperCard;
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package forge.achievement;
|
|||||||
|
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
|
import forge.achievement.ChallengeAchievements.DeckChallengeAchievement;
|
||||||
import forge.deck.Deck;
|
import forge.deck.Deck;
|
||||||
import forge.item.PaperCard;
|
import forge.item.PaperCard;
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package forge.achievement;
|
|||||||
|
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
|
import forge.achievement.ChallengeAchievements.DeckChallengeAchievement;
|
||||||
import forge.card.CardType;
|
import forge.card.CardType;
|
||||||
import forge.deck.Deck;
|
import forge.deck.Deck;
|
||||||
import forge.item.PaperCard;
|
import forge.item.PaperCard;
|
||||||
|
|||||||
@@ -121,9 +121,7 @@ public class HumanPlaySpellAbility {
|
|||||||
|
|
||||||
if (isFree || payment.isFullyPaid()) {
|
if (isFree || payment.isFullyPaid()) {
|
||||||
//track when planeswalker ultimates are activated
|
//track when planeswalker ultimates are activated
|
||||||
if (ability.getRestrictions().isPwAbility() && ability.hasParam("Ultimate") && ability.getActivatingPlayer().getController() instanceof PlayerControllerHuman) {
|
ability.getActivatingPlayer().getAchievementTracker().onSpellAbilityPlayed(ability);
|
||||||
ability.getActivatingPlayer().getAchievementTracker().activatedUltimates.add(ability.getHostCard().getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (skipStack) {
|
if (skipStack) {
|
||||||
AbilityUtils.resolve(ability);
|
AbilityUtils.resolve(ability);
|
||||||
|
|||||||
Reference in New Issue
Block a user