- Added puzzles PS_BRO1 - PS_BRO3. (#2279)

- Added a way to add tokens by script from GameState.
- Fixed u_2_2_spirit_vigilance_drawcounter token name capitalization.
This commit is contained in:
Agetian
2023-01-20 11:35:11 +03:00
committed by GitHub
parent e2b7cd2f5f
commit 5a6f0cab0d
5 changed files with 76 additions and 17 deletions

View File

@@ -1,16 +1,11 @@
package forge.ai; package forge.ai;
import java.io.BufferedReader; import com.google.common.collect.ArrayListMultimap;
import java.io.InputStream; import com.google.common.collect.Lists;
import java.io.InputStreamReader; import com.google.common.collect.Maps;
import java.util.*; import com.google.common.collect.Multimap;
import java.util.Map.Entry;
import com.google.common.collect.*;
import java.util.stream.Stream;
import org.apache.commons.lang3.StringUtils;
import forge.StaticData; import forge.StaticData;
import forge.card.CardEdition;
import forge.card.CardStateName; import forge.card.CardStateName;
import forge.card.MagicColor; import forge.card.MagicColor;
import forge.card.mana.ManaAtom; import forge.card.mana.ManaAtom;
@@ -18,12 +13,7 @@ import forge.game.Game;
import forge.game.GameEntity; import forge.game.GameEntity;
import forge.game.ability.AbilityFactory; import forge.game.ability.AbilityFactory;
import forge.game.ability.effects.DetachedCardEffect; import forge.game.ability.effects.DetachedCardEffect;
import forge.game.card.Card; import forge.game.card.*;
import forge.game.card.CardCloneStates;
import forge.game.card.CardCollection;
import forge.game.card.CardCollectionView;
import forge.game.card.CardFactory;
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;
import forge.game.combat.CombatUtil; import forge.game.combat.CombatUtil;
@@ -38,8 +28,17 @@ import forge.game.zone.PlayerZone;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
import forge.item.IPaperCard; import forge.item.IPaperCard;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.item.PaperToken;
import forge.util.TextUtil; import forge.util.TextUtil;
import forge.util.collect.FCollectionView; import forge.util.collect.FCollectionView;
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;
import java.util.stream.Stream;
public abstract class GameState { public abstract class GameState {
private static final Map<ZoneType, String> ZONES = new HashMap<>(); private static final Map<ZoneType, String> ZONES = new HashMap<>();
@@ -1201,6 +1200,15 @@ public abstract class GameState {
// TODO Make sure Game State conversion works with new tokens // TODO Make sure Game State conversion works with new tokens
String tokenStr = cardinfo[0].substring(2); String tokenStr = cardinfo[0].substring(2);
c = new TokenInfo(tokenStr).makeOneToken(player); c = new TokenInfo(tokenStr).makeOneToken(player);
} else if (cardinfo[0].startsWith("T:")) {
String tokenStr = cardinfo[0].substring(2);
PaperToken token = StaticData.instance().getAllTokens().getToken(tokenStr,
setCode != null ? setCode : CardEdition.UNKNOWN.getName());
if (token == null) {
System.err.println("ERROR: Tried to create a non-existent token named " + cardinfo[0] + " when loading game state!");
continue;
}
c = Card.fromPaperCard(token, player, player.getGame());
} else { } else {
PaperCard pc = StaticData.instance().getCommonCards().getCard(cardinfo[0], setCode); PaperCard pc = StaticData.instance().getCommonCards().getCard(cardinfo[0], setCode);
if (pc == null) { if (pc == null) {

View File

@@ -0,0 +1,18 @@
[metadata]
Name:Possibility Storm - The Brothers' War #01
URL:https://www.patreon.com/mtgpuzzles
Goal:Win
Turns:1
Difficulty:Mythic
Description:Win this turn. Start in your upkeep while resolving The Temporal Anchor's Scry 2 trigger. Assume that, in your library, you have additional copies of each card under your control and in your hand. Both graveyards start empty. Remember that your solution must satisfy all possible blocking decisions.
[state]
turn=1
activeplayer=p1
activephase=CLEANUP
activephaseadvance=UPKEEP
p0life=20
p0hand=Defenestrate;Carrion Locust;Dreadhound
p0library=Haywire Mite;Bushwhack;Defenestrate;Forest;Swamp;Island;The Temporal Anchor;Rona, Sheoldred's Faithful;Hoarding Recluse;Fauna Shaman;Island;Swamp;Forest;Carrion Locust;Dreadhound
p0battlefield=The Temporal Anchor;Rona, Sheoldred's Faithful;Hoarding Recluse;Fauna Shaman;Island;Island;Swamp;Swamp;Forest;Forest
p1life=3
p1battlefield=The Stasis Coffin;Glittering Stockpile|Counters:STASH=3;Patchwork Crawler;Patchwork Crawler;Cradle Clearcutter

View File

@@ -0,0 +1,16 @@
[metadata]
Name:Possibility Storm - The Brothers' War #02
URL:https://i2.wp.com/www.possibilitystorm.com/wp-content/uploads/2022/12/213.-BRO2-scaled.jpg?ssl=1
Goal:Win
Turns:1
Difficulty:Rare
Description:Win this turn. Assume your opponent has no mana available. Remember that your solution must satisfy all possible blocking decisions.
[state]
turn=1
activeplayer=p0
activephase=MAIN1
p0life=20
p0hand=Giant Growth;Mishra's Command;Audacity;Sibling Rivalry
p0battlefield=Rootwire Amalgam;Cradle Clearcutter;Hurler Cyclops;Rockfall Vale;Rockfall Vale;Mountain;Mountain;Forest
p1life=26
p1battlefield=Ivy, Gleeful Spellthief|Counters:P1P1=1

View File

@@ -0,0 +1,17 @@
[metadata]
Name:Possibility Storm - The Brothers' War #03
URL:https://i2.wp.com/www.possibilitystorm.com/wp-content/uploads/2023/01/latest-scaled.jpg?ssl=1
Goal:Win
Turns:1
Difficulty:Uncommon
Description:Win this turn. Assume that any unknown cards you could draw are not relevant to the puzzle. Remember that your solution must satisfy all possible blocking decisions.
[state]
turn=1
activeplayer=p0
activephase=MAIN1
p0life=20
p0hand=Planar Incision;Fateful Handoff;Energy Refractor;Grafted Identity
p0library=Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt;Opt
p0battlefield=Phyrexian Fleshgorger;Teferi, Temporal Pilgrim|Counters:LOYALTY=5;Island;Island;Island;Swamp;Swamp;Swamp;T:u_2_2_spirit_vigilance_drawcounter|Counters:P1P1=1
p1life=10
p1battlefield=Devilish Valet

View File

@@ -1,4 +1,4 @@
Name:Spirit token Name:Spirit Token
ManaCost:no cost ManaCost:no cost
Types:Creature Spirit Types:Creature Spirit
Colors:blue Colors:blue