Skip to content

Commit 9297654

Browse files
authored
Merge pull request Card-Forge#9089 from KarlMHanson/restricted-rewards
Adventure mode filtering
2 parents 08dc8c4 + bbd0c11 commit 9297654

File tree

13 files changed

+33
-5
lines changed

13 files changed

+33
-5
lines changed

forge-gui-mobile/src/forge/adventure/character/EnemySprite.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import forge.adventure.data.EnemyData;
2121
import forge.adventure.data.RewardData;
2222
import forge.adventure.player.AdventurePlayer;
23+
import forge.adventure.util.Config;
2324
import forge.adventure.util.Current;
2425
import forge.adventure.util.MapDialog;
2526
import forge.adventure.util.Reward;
@@ -503,7 +504,8 @@ public Array<Reward> getRewards() {
503504
if(data.rewards != null) { //Collect standard rewards.
504505
Deck enemyDeck = Current.latestDeck();
505506
// By popular demand, remove basic lands from the reward pool.
506-
CardPool deckNoBasicLands = enemyDeck.getMain().getFilteredPool(PaperCardPredicates.fromRules(CardRulesPredicates.NOT_BASIC_LAND));
507+
CardPool deckNoRestrictedEditions = enemyDeck.getMain().getFilteredPool(PaperCardPredicates.onlyPrintedInEditions(Config.instance().getConfigData().restrictedEditions).negate());
508+
CardPool deckNoBasicLands = deckNoRestrictedEditions.getFilteredPool(PaperCardPredicates.fromRules(CardRulesPredicates.NOT_BASIC_LAND));
507509

508510
for (RewardData rdata : data.rewards) {
509511
rewards.addAll(rdata.generate(false, enemyDeck == null ? null : deckNoBasicLands.toFlatList(),true ));

forge-gui-mobile/src/forge/adventure/data/RewardData.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,10 @@ static private void initializeAllCards(){
103103
if(legals != null)
104104
allCards = IterableUtil.filter(allCards, new CardUtil.CardPredicate(legals, true));
105105

106+
if (Config.instance().getSettingData().excludeAlchemyVariants) {
107+
allCards = IterableUtil.filter(allCards, PaperCardPredicates.IS_REBALANCED.negate());
108+
}
109+
106110
// Filter out by editions and obtainability
107111
if (configData.allowedEditions != null && configData.allowedEditions.length > 0) {
108112
allCards = IterableUtil.filter(allCards, PaperCardPredicates.printedInAnyEditions(configData.allowedEditions));

forge-gui-mobile/src/forge/adventure/data/SettingData.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,6 @@ public class SettingData {
2323
public boolean disableNotForSale;
2424
public boolean showShopOverlay;
2525
public boolean useAllCardVariants;
26+
public boolean excludeAlchemyVariants;
2627
public boolean generateLDADecks;
2728
}

forge-gui-mobile/src/forge/adventure/scene/SettingsScene.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,13 @@ public void changed(ChangeEvent event, Actor actor) {
239239
Config.instance().saveSettings();
240240
}
241241
});
242+
addSettingField(Forge.getLocalizer().getMessage("lblExcludeAlchemyVariants"), Config.instance().getSettingData().excludeAlchemyVariants, new ChangeListener() {
243+
@Override
244+
public void changed(ChangeEvent event, Actor actor) {
245+
Config.instance().getSettingData().excludeAlchemyVariants = ((CheckBox) actor).isChecked();
246+
Config.instance().saveSettings();
247+
}
248+
});
242249
addSettingField(Forge.getLocalizer().getMessage("lblGenerateLDADecks"), Config.instance().getSettingData().generateLDADecks, new ChangeListener() {
243250
@Override
244251
public void changed(ChangeEvent event, Actor actor) {

forge-gui-mobile/src/forge/adventure/util/CardUtil.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import forge.game.GameFormat;
2020
import forge.item.BoosterPack;
2121
import forge.item.PaperCard;
22+
import forge.item.PaperCardPredicates;
2223
import forge.item.SealedTemplate;
2324
import forge.item.generation.UnOpenedProduct;
2425
import forge.model.FModel;
@@ -771,11 +772,16 @@ private static PaperCard getReplacement(String missingCard, String replacementCa
771772
public static PaperCard getCardByName(String cardName) {
772773
List<PaperCard> validCards;
773774
// Faster to ask the CardDB for a card name than it is to search the pool.
774-
if (Config.instance().getSettingData().useAllCardVariants)
775-
validCards = FModel.getMagicDb().getCommonCards().getAllCards(cardName);
776-
else
775+
if (Config.instance().getSettingData().useAllCardVariants) {
776+
Predicate<PaperCard> not_restricted = card -> (!Arrays.asList(Config.instance().getConfigData().restrictedEditions).contains(card.getEdition()));
777+
Predicate<PaperCard> combined_predicate = not_restricted;
778+
if (Config.instance().getSettingData().excludeAlchemyVariants) {
779+
combined_predicate = not_restricted.and(PaperCardPredicates.IS_REBALANCED.negate());
780+
}
781+
validCards = FModel.getMagicDb().getCommonCards().getAllCards(cardName, combined_predicate);
782+
} else {
777783
validCards = FModel.getMagicDb().getCommonCards().getUniqueCardsNoAlt(cardName);
778-
784+
}
779785
if (validCards.isEmpty()) {
780786
return getReplacement(cardName, "Wastes");
781787
}

forge-gui/res/languages/de-DE.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3093,6 +3093,7 @@ lblDisableWinLose=Deaktivieren Sie Winslose Overlay
30933093
lblDisableNotForSaleOverlay=Disable Not For Sale Overlay
30943094
lblShowShopOverlay=Shop -Artikelname anzeigen
30953095
lblUseAllCardVariants=Use Card Variants from All Sets (Restart Required)
3096+
lblExcludeAlchemyVariants=Exclude variants rebalanced for Arena's Alchemy and Historic formats
30963097
lblGenerateLDADecks=Generate Archetype Decks instead of Genetic AI Decks
30973098
lblExitToWoldMap=Zurück zur Weltkarte?
30983099
lblStartArena=Willst du in die Arena gehen?

forge-gui/res/languages/en-US.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3171,6 +3171,7 @@ lblDisableWinLose=Disable WinLose Overlay
31713171
lblDisableNotForSaleOverlay=Disable Not For Sale Overlay
31723172
lblShowShopOverlay=Display Shop Item names
31733173
lblUseAllCardVariants=Use Card Variants from All Sets (Restart Required)
3174+
lblExcludeAlchemyVariants=Exclude variants rebalanced for Arena's Alchemy and Historic formats
31743175
lblGenerateLDADecks=Generate Archetype Decks instead of Genetic AI Decks
31753176
lblExitToWoldMap=Exit to the World Map?
31763177
lblStartArena=Do you want to go into the Arena?

forge-gui/res/languages/es-ES.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3081,6 +3081,7 @@ lblDisableWinLose=Desactivar WinLose Overlay
30813081
lblDisableNotForSaleOverlay=Disable Not For Sale Overlay
30823082
lblShowShopOverlay=Nombre del artículo de la tienda de exhibición
30833083
lblUseAllCardVariants=Use Card Variants from All Sets (Restart Required)
3084+
lblExcludeAlchemyVariants=Exclude variants rebalanced for Arena's Alchemy and Historic formats
30843085
lblGenerateLDADecks=Generate Archetype Decks instead of Genetic AI Decks
30853086
lblExitToWoldMap=Salir al mapa del mundo?
30863087
lblStartArena=¿Quieres ir a la arena?

forge-gui/res/languages/fr-FR.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3075,6 +3075,7 @@ lblDisableWinLose=Désactiver la superposition Winlose
30753075
lblDisableNotForSaleOverlay=Disable Not For Sale Overlay
30763076
lblShowShopOverlay=Nom de l'article de la boutique d'affichage
30773077
lblUseAllCardVariants=Use Card Variants from All Sets (Restart Required)
3078+
lblExcludeAlchemyVariants=Exclude variants rebalanced for Arena's Alchemy and Historic formats
30783079
lblGenerateLDADecks=Generate Archetype Decks instead of Genetic AI Decks
30793080
lblExitToWoldMap=Sortir sur la carte du monde?
30803081
lblStartArena=Voulez-vous entrer dans l'arène?

forge-gui/res/languages/it-IT.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3073,6 +3073,7 @@ lblDisableWinLose=Disabilita overlay winlose
30733073
lblDisableNotForSaleOverlay=Disable Not For Sale Overlay
30743074
lblShowShopOverlay=Visualizza il nome dell'articolo del negozio
30753075
lblUseAllCardVariants=Use Card Variants from All Sets (Restart Required)
3076+
lblExcludeAlchemyVariants=Exclude variants rebalanced for Arena's Alchemy and Historic formats
30763077
lblGenerateLDADecks=Generate Archetype Decks instead of Genetic AI Decks
30773078
lblExitToWoldMap=Esci alla mappa del mondo?
30783079
lblStartArena=Vuoi andare nell'arena?

0 commit comments

Comments
 (0)