mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 19:28: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/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/game/AchievementTracker.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/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/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/player/AchievementTracker.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/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/ChallengeAchievements.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/Domain.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)
|
||||
* @see forge.card.spellability.SpellAbility#resolve()
|
||||
*/
|
||||
|
||||
@Override
|
||||
public void resolve() {
|
||||
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;
|
||||
|
||||
import forge.deck.Deck;
|
||||
import forge.game.Game;
|
||||
import forge.game.player.Player;
|
||||
import forge.properties.ForgeConstants;
|
||||
|
||||
public class ChallengeAchievements extends AchievementCollection {
|
||||
@@ -20,5 +23,44 @@ public class ChallengeAchievements extends AchievementCollection {
|
||||
add(new NoSpells());
|
||||
add(new NoLands());
|
||||
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 forge.achievement.ChallengeAchievements.DeckChallengeAchievement;
|
||||
import forge.deck.Deck;
|
||||
import forge.item.PaperCard;
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ package forge.achievement;
|
||||
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import forge.achievement.ChallengeAchievements.DeckChallengeAchievement;
|
||||
import forge.deck.Deck;
|
||||
import forge.item.PaperCard;
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ package forge.achievement;
|
||||
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import forge.achievement.ChallengeAchievements.DeckChallengeAchievement;
|
||||
import forge.card.CardType;
|
||||
import forge.deck.Deck;
|
||||
import forge.item.PaperCard;
|
||||
|
||||
@@ -121,9 +121,7 @@ public class HumanPlaySpellAbility {
|
||||
|
||||
if (isFree || payment.isFullyPaid()) {
|
||||
//track when planeswalker ultimates are activated
|
||||
if (ability.getRestrictions().isPwAbility() && ability.hasParam("Ultimate") && ability.getActivatingPlayer().getController() instanceof PlayerControllerHuman) {
|
||||
ability.getActivatingPlayer().getAchievementTracker().activatedUltimates.add(ability.getHostCard().getName());
|
||||
}
|
||||
ability.getActivatingPlayer().getAchievementTracker().onSpellAbilityPlayed(ability);
|
||||
|
||||
if (skipStack) {
|
||||
AbilityUtils.resolve(ability);
|
||||
|
||||
Reference in New Issue
Block a user