- Added puzzle PC_122915 by Xitax (has some start-of-the-game quirks, documented in the description for now, may be addressed later).

This commit is contained in:
Agetian
2017-12-04 05:30:59 +00:00
parent 05a9da4eb8
commit 013cd0a9a8
3 changed files with 41 additions and 15 deletions

1
.gitattributes vendored
View File

@@ -19786,6 +19786,7 @@ forge-gui/res/puzzle/PC_112415.pzl -text
forge-gui/res/puzzle/PC_120815.pzl -text forge-gui/res/puzzle/PC_120815.pzl -text
forge-gui/res/puzzle/PC_121515.pzl -text forge-gui/res/puzzle/PC_121515.pzl -text
forge-gui/res/puzzle/PC_122215.pzl -text forge-gui/res/puzzle/PC_122215.pzl -text
forge-gui/res/puzzle/PC_122915.pzl -text
forge-gui/res/puzzle/PC_13.pzl -text forge-gui/res/puzzle/PC_13.pzl -text
forge-gui/res/puzzle/PC_18.pzl -text forge-gui/res/puzzle/PC_18.pzl -text
forge-gui/res/puzzle/PC_19.pzl -text forge-gui/res/puzzle/PC_19.pzl -text

View File

@@ -1,23 +1,9 @@
package forge.ai; package forge.ai;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.EnumMap;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.google.common.collect.Multimap; import com.google.common.collect.Multimap;
import forge.StaticData; import forge.StaticData;
import forge.card.CardStateName; import forge.card.CardStateName;
import forge.game.Game; import forge.game.Game;
@@ -27,7 +13,6 @@ import forge.game.ability.effects.DetachedCardEffect;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.card.CardCollection; import forge.game.card.CardCollection;
import forge.game.card.CardCollectionView; import forge.game.card.CardCollectionView;
import forge.game.card.CardFactory;
import forge.game.card.CounterType; import forge.game.card.CounterType;
import forge.game.card.token.TokenInfo; import forge.game.card.token.TokenInfo;
import forge.game.combat.Combat; import forge.game.combat.Combat;
@@ -46,6 +31,12 @@ import forge.util.TextUtil;
import forge.util.collect.FCollectionView; import forge.util.collect.FCollectionView;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.*;
import java.util.Map.Entry;
public abstract class GameState { public abstract class GameState {
private static final Map<ZoneType, String> ZONES = new HashMap<ZoneType, String>(); private static final Map<ZoneType, String> ZONES = new HashMap<ZoneType, String>();
static { static {
@@ -74,6 +65,7 @@ public abstract class GameState {
private final Map<Card, String> cardToChosenType = new HashMap<>(); private final Map<Card, String> cardToChosenType = new HashMap<>();
private final Map<Card, List<String>> cardToRememberedId = new HashMap<>(); private final Map<Card, List<String>> cardToRememberedId = new HashMap<>();
private final Map<Card, List<String>> cardToImprintedId = new HashMap<>(); private final Map<Card, List<String>> cardToImprintedId = new HashMap<>();
private final Map<Card, String> cardToNamedCard = new HashMap<>();
private final Map<Card, String> cardToExiledWithId = new HashMap<>(); private final Map<Card, String> cardToExiledWithId = new HashMap<>();
private final Map<Card, Card> cardAttackMap = new HashMap<>(); private final Map<Card, Card> cardAttackMap = new HashMap<>();
@@ -281,6 +273,9 @@ public abstract class GameState {
if (!c.getChosenType().isEmpty()) { if (!c.getChosenType().isEmpty()) {
newText.append("|ChosenType:").append(c.getChosenType()); newText.append("|ChosenType:").append(c.getChosenType());
} }
if (!c.getNamedCard().isEmpty()) {
newText.append("|NamedCard:").append(c.getNamedCard());
}
List<String> rememberedCardIds = Lists.newArrayList(); List<String> rememberedCardIds = Lists.newArrayList();
for (Object obj : c.getRemembered()) { for (Object obj : c.getRemembered()) {
@@ -828,6 +823,12 @@ public abstract class GameState {
Card c = entry.getKey(); Card c = entry.getKey();
c.setChosenType(entry.getValue()); c.setChosenType(entry.getValue());
} }
// Named card
for (Entry<Card, String> entry : cardToNamedCard.entrySet()) {
Card c = entry.getKey();
c.setNamedCard(entry.getValue());
}
} }
private void handleCardAttachments() { private void handleCardAttachments() {
@@ -1008,6 +1009,8 @@ public abstract class GameState {
cardToChosenClrs.put(c, Arrays.asList(info.substring(info.indexOf(':') + 1).split(","))); cardToChosenClrs.put(c, Arrays.asList(info.substring(info.indexOf(':') + 1).split(",")));
} else if (info.startsWith("ChosenType:")) { } else if (info.startsWith("ChosenType:")) {
cardToChosenType.put(c, info.substring(info.indexOf(':') + 1)); cardToChosenType.put(c, info.substring(info.indexOf(':') + 1));
} else if (info.startsWith("NamedCard:")) {
cardToNamedCard.put(c, info.substring(info.indexOf(':') + 1));
} else if (info.startsWith("ExecuteScript:")) { } else if (info.startsWith("ExecuteScript:")) {
cardToScript.put(c, info.substring(info.indexOf(':') + 1)); cardToScript.put(c, info.substring(info.indexOf(':') + 1));
} else if (info.startsWith("RememberedCards:")) { } else if (info.startsWith("RememberedCards:")) {

View File

@@ -0,0 +1,22 @@
[metadata]
Name:Perplexing Chimera (GatheringMagic.com) 122915 - Burn, Baby, Burn
URL:http://www.gatheringmagic.com/seanuy-122915-burn-baby-burn/
Goal:Win
Turns:1
Difficulty:Hard
Description: Win this turn. AI has these cards in hand - Lightning Bolt, Guerrilla Tactics, Skullcrack, Pyrotechnics.\n\nIMPORTANT - Once the puzzle starts, you will be prompted to apply the replacement effect of the card Clone. You need to choose "No" in order for this puzzle to work correctly. Also, a notification box will pop up to name a card. It does not matter what you choose, the card "Lightning Bolt" will be automatically chosen after the game begins [These quirks will be resolved at a later date].
[state]
ActivePlayer=human
ActivePhase=main1
HumanLife=2
AILife=10
humanhand=Valorous Stance; Parallax Wave
humangraveyard=
humanlibrary=
humanprecast=
humanbattlefield=Plains|Set:ZEN; Plains|Set:ZEN; Plains|Set:ZEN; Island|Set:ZEN; Island|Set:ZEN; Island|Set:ZEN; Aven Riftwatcher|Counters:TIME=1; Brago, King Eternal; Heavy Infantry|Id:422; Runed Halo|NamedCard:Lightning Bolt; Angelic Shield; Clone|ExecuteScript:DBCopy->420
aibattlefield=Swamp|Tapped|Set:ZEN; Swamp|Tapped|Set:ZEN; Swamp|Tapped|Set:ZEN; Mountain|Set:ZEN; Mountain|Tapped|Set:ZEN; Mountain|Tapped|Set:ZEN; Volcanic Dragon|Id:420; Typhoid Rats; Skulking Fugitive; Vulshok Refugee; Mindslicer|Id:424; Accorder's Shield|Attaching:424; Torment|Attaching:422;
aihand=Lightning Bolt; Guerrilla Tactics; Skullcrack; Pyrotechnics
aigraveyard=
ailibrary=
aiexile=