diff --git a/forge-gui/res/languages/de-DE.properties b/forge-gui/res/languages/de-DE.properties index d1c325cbc5d..1d0e7a0d0f2 100644 --- a/forge-gui/res/languages/de-DE.properties +++ b/forge-gui/res/languages/de-DE.properties @@ -1,4 +1,4 @@ -language.name=Deutsch (DE) +language.name=Deutsch (DE) #SplashScreen.java splash.loading.examining-cards=Lade Karten, durchsuche Verzeichnis splash.loading.cards-folders=Lade Karten aus Verzeichnissen @@ -2467,6 +2467,10 @@ lblLand=Land lblManaScrewed=Mana-Dürre lblWinGameOnlyPlaing=Gewinne ein Spiel mit nur lblNLands={0} Land/Ländern +#AgainstAllOdds.java +lblAgainstAllOdds=Against all Odds +lblAgainstIndividual=versus {0} individual players +lblAgainstTeam=versus {0} players in a team #MatchWinStreak.java lblMatchWinStreak=Gewinnsträhne Begegnung lblWinNMatchesInARow=Gewinne {0} Begegnungen nacheinander diff --git a/forge-gui/res/languages/en-US.properties b/forge-gui/res/languages/en-US.properties index fa25f41213f..6ec74863aec 100644 --- a/forge-gui/res/languages/en-US.properties +++ b/forge-gui/res/languages/en-US.properties @@ -2465,6 +2465,10 @@ lblLand=Land lblManaScrewed=Mana Screwed lblWinGameOnlyPlaing=Win a game despite playing only lblNLands={0} land(s) +#AgainstAllOdds.java +lblAgainstAllOdds=Against all Odds +lblAgainstIndividual=versus {0} individual players +lblAgainstTeam=versus {0} players in a team #MatchWinStreak.java lblMatchWinStreak=Match Win Streak lblWinNMatchesInARow=Win {0} matches in a row diff --git a/forge-gui/res/languages/es-ES.properties b/forge-gui/res/languages/es-ES.properties index 25d8d93e497..2f238f382cf 100644 --- a/forge-gui/res/languages/es-ES.properties +++ b/forge-gui/res/languages/es-ES.properties @@ -1,4 +1,4 @@ -language.name=Spanish (ES) +language.name=Spanish (ES) #SplashScreen.java splash.loading.examining-cards=Cargando cartas, examinando carpeta splash.loading.cards-folders=Cargando cartas de la carpeta @@ -2465,6 +2465,10 @@ lblLand=Tierra lblManaScrewed=Arruinado de maná lblWinGameOnlyPlaing=Gana una partida a pesar de jugar sólo lblNLands={0} tierra(s) +#AgainstAllOdds.java +lblAgainstAllOdds=Against all Odds +lblAgainstIndividual=versus {0} individual players +lblAgainstTeam=versus {0} players in a team #MatchWinStreak.java lblMatchWinStreak=Racha de partidas ganadas lblWinNMatchesInARow=Gana {0} partidas seguidas diff --git a/forge-gui/res/languages/it-IT.properties b/forge-gui/res/languages/it-IT.properties index 34d2a5c5067..e2b68ef464e 100644 --- a/forge-gui/res/languages/it-IT.properties +++ b/forge-gui/res/languages/it-IT.properties @@ -1,4 +1,4 @@ -language.name=Italiano (IT) +language.name=Italiano (IT) #SplashScreen.java splash.loading.examining-cards=Caricamento delle carte, esame della cartella splash.loading.cards-folders=Caricamento delle carte dalle cartelle @@ -2464,6 +2464,10 @@ lblLand=Terra lblManaScrewed=Fregato dal mana lblWinGameOnlyPlaing=Vinci una partita pur avendo giocato solo lblNLands={0} terra/e +#AgainstAllOdds.java +lblAgainstAllOdds=Against all Odds +lblAgainstIndividual=versus {0} individual players +lblAgainstTeam=versus {0} players in a team #MatchWinStreak.java lblMatchWinStreak=Serie di vittorie (Incontri) lblWinNMatchesInARow=Vinci {0} incontri di fila diff --git a/forge-gui/res/languages/ja-JP.properties b/forge-gui/res/languages/ja-JP.properties index 833d8aab381..de42b4871bb 100644 --- a/forge-gui/res/languages/ja-JP.properties +++ b/forge-gui/res/languages/ja-JP.properties @@ -1,4 +1,4 @@ -language.name=Japanese (JP) +language.name=Japanese (JP) #SplashScreen.java splash.loading.examining-cards=カードを読み込んで、フォルダを調べます splash.loading.cards-folders=フォルダーからのカードのロード @@ -2464,6 +2464,10 @@ lblLand=土地 lblManaScrewed=マナスクリュー lblWinGameOnlyPlaing=ゲームに勝つ時、 lblNLands={0}つの土地しかプレイしていない +#AgainstAllOdds.java +lblAgainstAllOdds=Against all Odds +lblAgainstIndividual=versus {0} individual players +lblAgainstTeam=versus {0} players in a team #MatchWinStreak.java lblMatchWinStreak=マッチ連勝 lblWinNMatchesInARow={0}連勝 diff --git a/forge-gui/res/languages/zh-CN.properties b/forge-gui/res/languages/zh-CN.properties index 0b9f0fbd625..be405ac2c51 100644 --- a/forge-gui/res/languages/zh-CN.properties +++ b/forge-gui/res/languages/zh-CN.properties @@ -1,4 +1,4 @@ -language.name=Chinese (CN) +language.name=Chinese (CN) #SplashScreen.java splash.loading.examining-cards=加载卡牌,检查文件夹 splash.loading.cards-folders=从文件夹加载卡牌 @@ -2466,6 +2466,10 @@ lblLand=地 lblManaScrewed=法术力枯竭 lblWinGameOnlyPlaing=赢得一局游戏胜利时只使用过 lblNLands={0}个地 +#AgainstAllOdds.java +lblAgainstAllOdds=Against all Odds +lblAgainstIndividual=versus {0} individual players +lblAgainstTeam=versus {0} players in a team #MatchWinStreak.java lblMatchWinStreak=比赛连胜 lblWinNMatchesInARow=连续赢得{0}场比赛 diff --git a/forge-gui/src/main/java/forge/localinstance/achievements/AgainstAllOdds.java b/forge-gui/src/main/java/forge/localinstance/achievements/AgainstAllOdds.java new file mode 100644 index 00000000000..d71ce064061 --- /dev/null +++ b/forge-gui/src/main/java/forge/localinstance/achievements/AgainstAllOdds.java @@ -0,0 +1,67 @@ +package forge.localinstance.achievements; + +import com.google.common.base.Predicates; +import com.google.common.collect.Iterables; + +import forge.game.Game; +import forge.game.player.Player; +import forge.game.player.PlayerCollection; +import forge.game.player.PlayerPredicates; +import forge.util.Localizer; + +public class AgainstAllOdds extends Achievement { + public AgainstAllOdds() { + super("Against all Odds", Localizer.getInstance().getMessage("lblAgainstAllOdds"), + Localizer.getInstance().getMessage("lblWinGame"), 0, + Localizer.getInstance().getMessage("lblAgainstIndividual", "3"), 1, + Localizer.getInstance().getMessage("lblAgainstIndividual", "7"), 2, + Localizer.getInstance().getMessage("lblAgainstTeam", "3"), 3, + Localizer.getInstance().getMessage("lblAgainstTeam", "7"), 4 + ); + } + + @Override + protected int evaluate(Player player, Game game) { + if (player.getOutcome().hasWon() && game.getRegisteredPlayers().size() - player.getRegisteredOpponents().size() == 1) { + int teamNum = 0; + for (Player opp : player.getRegisteredOpponents()) { + PlayerCollection otherOpps = player.getRegisteredOpponents(); + otherOpps.remove(opp); + if (Iterables.all(otherOpps, PlayerPredicates.sameTeam(opp))) { + teamNum++; + } else if (Iterables.all(otherOpps, Predicates.not(PlayerPredicates.sameTeam(opp)))) { + teamNum--; + } + } + if (teamNum == 7) { + return 4; + } + if (teamNum >= 3) { + return 3; + } + if (teamNum == -7) { + return 2; + } + if (teamNum <= -3) { + return 1; + } + } + return 0; + } + + @Override + protected String getNoun() { + return null; + } + + @Override + public String getSubTitle(boolean includeTimestamp) { + if (includeTimestamp) { + String formattedTimestamp = getFormattedTimestamp(); + if (formattedTimestamp != null) { + return "Earned " + formattedTimestamp; + } + } + return null; + } +} diff --git a/forge-gui/src/main/java/forge/localinstance/achievements/ChallengeAchievements.java b/forge-gui/src/main/java/forge/localinstance/achievements/ChallengeAchievements.java index bb9579dbfee..6a7b48469e2 100644 --- a/forge-gui/src/main/java/forge/localinstance/achievements/ChallengeAchievements.java +++ b/forge-gui/src/main/java/forge/localinstance/achievements/ChallengeAchievements.java @@ -4,6 +4,7 @@ import forge.deck.Deck; import forge.game.Game; import forge.game.GameType; import forge.game.player.Player; +import forge.gui.GuiBase; import forge.localinstance.properties.ForgeConstants; import forge.util.Localizer; @@ -25,6 +26,9 @@ public class ChallengeAchievements extends AchievementCollection { add(new NoSpells()); add(new NoLands()); add(new Domain()); + if (!GuiBase.getInterface().isLibgdxPort()) { + add(new AgainstAllOdds()); + } add("Chromatic", Localizer.getInstance().getMessage("lblChromatic"), Localizer.getInstance().getMessage("lblWinGameAfterCasting5CSpell"), Localizer.getInstance().getMessage("lblGreatColorComesPower")