mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 11:48:02 +00:00
Add RagsToRiches achievement
This commit is contained in:
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -16907,6 +16907,7 @@ forge-gui/src/main/java/forge/achievement/Overkill.java -text
|
|||||||
forge-gui/src/main/java/forge/achievement/PlaneswalkerAchievements.java -text
|
forge-gui/src/main/java/forge/achievement/PlaneswalkerAchievements.java -text
|
||||||
forge-gui/src/main/java/forge/achievement/Poisoned.java -text
|
forge-gui/src/main/java/forge/achievement/Poisoned.java -text
|
||||||
forge-gui/src/main/java/forge/achievement/QuestAchievements.java -text
|
forge-gui/src/main/java/forge/achievement/QuestAchievements.java -text
|
||||||
|
forge-gui/src/main/java/forge/achievement/RagsToRiches.java -text
|
||||||
forge-gui/src/main/java/forge/achievement/SealedAchievements.java -text
|
forge-gui/src/main/java/forge/achievement/SealedAchievements.java -text
|
||||||
forge-gui/src/main/java/forge/achievement/TotalGameWins.java -text
|
forge-gui/src/main/java/forge/achievement/TotalGameWins.java -text
|
||||||
forge-gui/src/main/java/forge/achievement/TotalMatchWins.java -text
|
forge-gui/src/main/java/forge/achievement/TotalMatchWins.java -text
|
||||||
|
|||||||
@@ -5,4 +5,5 @@ import java.util.HashSet;
|
|||||||
//class for storing information during a game that is used at the end of the game to determine achievements
|
//class for storing information during a game that is used at the end of the game to determine achievements
|
||||||
public class AchievementTracker {
|
public class AchievementTracker {
|
||||||
public final HashSet<String> activatedUltimates = new HashSet<String>();
|
public final HashSet<String> activatedUltimates = new HashSet<String>();
|
||||||
|
public int mulliganTo = 7;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,7 +88,6 @@ public class Game implements IGameStateObject {
|
|||||||
private final ReplacementHandler replacementHandler = new ReplacementHandler(this);
|
private final ReplacementHandler replacementHandler = new ReplacementHandler(this);
|
||||||
private final EventBus events = new EventBus("game events");
|
private final EventBus events = new EventBus("game events");
|
||||||
private final GameLog gameLog = new GameLog();
|
private final GameLog gameLog = new GameLog();
|
||||||
private final AchievementTracker achievementTracker = new AchievementTracker();
|
|
||||||
|
|
||||||
private final Zone stackZone = new Zone(ZoneType.Stack, this);
|
private final Zone stackZone = new Zone(ZoneType.Stack, this);
|
||||||
|
|
||||||
@@ -333,15 +332,6 @@ public class Game implements IGameStateObject {
|
|||||||
return gameLog;
|
return gameLog;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the achievement tracker
|
|
||||||
*
|
|
||||||
* @return the achievement tracker
|
|
||||||
*/
|
|
||||||
public final AchievementTracker getAchievementTracker() {
|
|
||||||
return achievementTracker;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the stack zone.
|
* Gets the stack zone.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1641,8 +1641,9 @@ public class GameAction {
|
|||||||
Player p = whoCanMulligan.get(i);
|
Player p = whoCanMulligan.get(i);
|
||||||
List<Card> toMulligan = p.canMulligan() ? p.getController().getCardsToMulligan(isCommander, firstPlayer) : null;
|
List<Card> toMulligan = p.canMulligan() ? p.getController().getCardsToMulligan(isCommander, firstPlayer) : null;
|
||||||
|
|
||||||
if (game.isGameOver()) // conceded on mulligan prompt
|
if (game.isGameOver()) { // conceded on mulligan prompt
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (toMulligan != null && !toMulligan.isEmpty()) {
|
if (toMulligan != null && !toMulligan.isEmpty()) {
|
||||||
if (!isCommander) {
|
if (!isCommander) {
|
||||||
|
|||||||
@@ -190,6 +190,12 @@ public class Player extends GameEntity implements Comparable<Player>, IIdentifia
|
|||||||
|
|
||||||
private int numManaConversion = 0;
|
private int numManaConversion = 0;
|
||||||
|
|
||||||
|
private final AchievementTracker achievementTracker = new AchievementTracker();
|
||||||
|
|
||||||
|
public final AchievementTracker getAchievementTracker() {
|
||||||
|
return achievementTracker;
|
||||||
|
}
|
||||||
|
|
||||||
public final PlayerOutcome getOutcome() {
|
public final PlayerOutcome getOutcome() {
|
||||||
return stats.getOutcome();
|
return stats.getOutcome();
|
||||||
}
|
}
|
||||||
@@ -3351,6 +3357,7 @@ public class Player extends GameEntity implements Comparable<Player>, IIdentifia
|
|||||||
final int newHand = getCardsIn(ZoneType.Hand).size();
|
final int newHand = getCardsIn(ZoneType.Hand).size();
|
||||||
stats.notifyHasMulliganed();
|
stats.notifyHasMulliganed();
|
||||||
stats.notifyOpeningHandSize(newHand);
|
stats.notifyOpeningHandSize(newHand);
|
||||||
|
achievementTracker.mulliganTo = newHand;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -89,6 +89,7 @@ public abstract class AchievementCollection implements Iterable<Achievement> {
|
|||||||
add(new Overkill(-25, -50, -100, -200));
|
add(new Overkill(-25, -50, -100, -200));
|
||||||
add(new LifeToSpare(20, 40, 80, 160));
|
add(new LifeToSpare(20, 40, 80, 160));
|
||||||
add(new Hellbent());
|
add(new Hellbent());
|
||||||
|
add(new RagsToRiches());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract void addAchievements();
|
protected abstract void addAchievements();
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ public class PlaneswalkerAchievements extends AchievementCollection {
|
|||||||
//only call update achievements for any ultimates activated during the game
|
//only call update achievements for any ultimates activated during the game
|
||||||
if (player.getOutcome().hasWon()) {
|
if (player.getOutcome().hasWon()) {
|
||||||
boolean needSave = false;
|
boolean needSave = false;
|
||||||
for (String ultimate : player.getGame().getAchievementTracker().activatedUltimates) {
|
for (String ultimate : player.getAchievementTracker().activatedUltimates) {
|
||||||
Achievement achievement = achievements.get(ultimate);
|
Achievement achievement = achievements.get(ultimate);
|
||||||
if (achievement != null) {
|
if (achievement != null) {
|
||||||
achievement.update(gui, player);
|
achievement.update(gui, player);
|
||||||
|
|||||||
38
forge-gui/src/main/java/forge/achievement/RagsToRiches.java
Normal file
38
forge-gui/src/main/java/forge/achievement/RagsToRiches.java
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
package forge.achievement;
|
||||||
|
|
||||||
|
import forge.game.Game;
|
||||||
|
import forge.game.player.Player;
|
||||||
|
|
||||||
|
public class RagsToRiches extends Achievement {
|
||||||
|
private static final int NO_MULLIGAN = 7;
|
||||||
|
|
||||||
|
public RagsToRiches() {
|
||||||
|
super("RagsToRiches", "Rags to Riches", "Win a game after mulliganing to",
|
||||||
|
"4 cards", 4,
|
||||||
|
"3 cards", 3,
|
||||||
|
"2 cards", 2,
|
||||||
|
"1 card", 1);
|
||||||
|
best = NO_MULLIGAN; //initialize best to max value so any amount of mulliganing is smaller
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean needSave() {
|
||||||
|
return best < NO_MULLIGAN;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int evaluate(Player player, Game game) {
|
||||||
|
if (player.getOutcome().hasWon() && player.getAchievementTracker().mulliganTo < NO_MULLIGAN) {
|
||||||
|
return player.getAchievementTracker().mulliganTo;
|
||||||
|
}
|
||||||
|
return NO_MULLIGAN; //indicate that player didn't win
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSubTitle() {
|
||||||
|
if (best < NO_MULLIGAN) {
|
||||||
|
return "Best: " + best + " cards";
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -122,7 +122,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) {
|
if (ability.getRestrictions().isPwAbility() && ability.hasParam("Ultimate") && ability.getActivatingPlayer().getController() instanceof PlayerControllerHuman) {
|
||||||
game.getAchievementTracker().activatedUltimates.add(ability.getHostCard().getName());
|
ability.getActivatingPlayer().getAchievementTracker().activatedUltimates.add(ability.getHostCard().getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (skipStack) {
|
if (skipStack) {
|
||||||
|
|||||||
Reference in New Issue
Block a user