Implement Planeswalker variant

This commit is contained in:
drdev
2016-03-14 05:00:28 +00:00
parent 431ecd3067
commit 81f0bbc633
6 changed files with 56 additions and 16 deletions

View File

@@ -2720,8 +2720,14 @@ public class Player extends GameEntity implements Comparable<Player> {
} }
// Commander // Commander
Card cmd = null;
if (registeredPlayer.getCommander() != null) { if (registeredPlayer.getCommander() != null) {
Card cmd = Card.fromPaperCard(registeredPlayer.getCommander(), this); cmd = Card.fromPaperCard(registeredPlayer.getCommander(), this);
}
else if (registeredPlayer.getPlaneswalker() != null) { // Planeswalker
cmd = Card.fromPaperCard(registeredPlayer.getPlaneswalker(), this);
}
if (cmd != null) {
cmd.setCommander(true); cmd.setCommander(true);
com.add(cmd); com.add(cmd);
setCommander(cmd); setCommander(cmd);
@@ -2756,7 +2762,11 @@ public class Player extends GameEntity implements Comparable<Player> {
r = ReplacementHandler.parseReplacement("Event$ Moved | Destination$ Graveyard,Exile,Hand,Library | ValidCard$ Card.IsCommander+YouOwn | Secondary$ True | Optional$ True | OptionalDecider$ You | ReplaceWith$ CommanderMoveReplacement | Description$ If a commander would be exiled or put into hand, graveyard, or library from anywhere, that player may put it into the command zone instead.", eff, true); r = ReplacementHandler.parseReplacement("Event$ Moved | Destination$ Graveyard,Exile,Hand,Library | ValidCard$ Card.IsCommander+YouOwn | Secondary$ True | Optional$ True | OptionalDecider$ You | ReplaceWith$ CommanderMoveReplacement | Description$ If a commander would be exiled or put into hand, graveyard, or library from anywhere, that player may put it into the command zone instead.", eff, true);
} }
eff.addReplacementEffect(r); eff.addReplacementEffect(r);
eff.addStaticAbility("Mode$ Continuous | EffectZone$ Command | AddKeyword$ May be played | Affected$ Card.YouOwn+IsCommander | AffectedZone$ Command"); String mayBePlayedAbility = "Mode$ Continuous | EffectZone$ Command | AddKeyword$ May be played | Affected$ Card.YouOwn+IsCommander | AffectedZone$ Command";
if (game.getRules().hasAppliedVariant(GameType.Planeswalker)) { //support paying for Planeswalker with any color mana
mayBePlayedAbility += " | AddHiddenKeyword$ May spend mana as though it were mana of any color to cast CARDNAME";
}
eff.addStaticAbility(mayBePlayedAbility);
eff.addStaticAbility("Mode$ RaiseCost | EffectZone$ Command | References$ CommanderCostRaise | Amount$ CommanderCostRaise | Type$ Spell | ValidCard$ Card.YouOwn+IsCommander+wasCastFromCommand | EffectZone$ All | AffectedZone$ Command,Stack"); eff.addStaticAbility("Mode$ RaiseCost | EffectZone$ Command | References$ CommanderCostRaise | Amount$ CommanderCostRaise | Type$ Spell | ValidCard$ Card.YouOwn+IsCommander+wasCastFromCommand | EffectZone$ All | AffectedZone$ Command,Stack");
return eff; return eff;
} }

View File

@@ -29,7 +29,9 @@ public class RegisteredPlayer {
private Iterable<PaperCard> conspiracies = null; private Iterable<PaperCard> conspiracies = null;
private PaperCard commander = null; private PaperCard commander = null;
private PaperCard vanguardAvatar = null; private PaperCard vanguardAvatar = null;
private PaperCard planeswalker = null;
private int teamNumber = -1; // members of teams with negative id will play FFA. private int teamNumber = -1; // members of teams with negative id will play FFA.
private boolean randomFoil = false;
public RegisteredPlayer(Deck deck0) { public RegisteredPlayer(Deck deck0) {
originalDeck = deck0; originalDeck = deck0;
@@ -136,7 +138,15 @@ public class RegisteredPlayer {
return this; return this;
} }
public IPaperCard getVanguardAvatar() { public PaperCard getCommander() {
return commander;
}
public void assignCommander() {
CardPool section = currentDeck.get(DeckSection.Commander);
commander = section == null ? null : section.get(0);
}
public PaperCard getVanguardAvatar() {
return vanguardAvatar; return vanguardAvatar;
} }
public void assignVanguardAvatar() { public void assignVanguardAvatar() {
@@ -151,24 +161,24 @@ public class RegisteredPlayer {
setStartingHand(getStartingHand() + vanguardAvatar.getRules().getHand()); setStartingHand(getStartingHand() + vanguardAvatar.getRules().getHand());
} }
public IPaperCard getCommander() { public PaperCard getPlaneswalker() {
return commander; return planeswalker;
}
public void setPlaneswalker(PaperCard planeswalker0) {
planeswalker = planeswalker0;
if (planeswalker != null) {
currentDeck.getMain().remove(planeswalker); //ensure planeswalker removed from main deck
} }
public void assignCommander() {
CardPool section = currentDeck.get(DeckSection.Commander);
commander = section == null ? null : section.get(0);
} }
public void restoreDeck() { public void restoreDeck() {
currentDeck = (Deck) originalDeck.copyTo(originalDeck.getName()); currentDeck = (Deck) originalDeck.copyTo(originalDeck.getName());
} }
private boolean randomFoil = false;
public void setRandomFoil(boolean useRandomFoil) {
this.randomFoil = useRandomFoil;
}
public boolean useRandomFoil() { public boolean useRandomFoil() {
return randomFoil; return randomFoil;
} }
public void setRandomFoil(boolean useRandomFoil) {
randomFoil = useRandomFoil;
}
} }

View File

@@ -9,6 +9,7 @@ import forge.game.GameView;
import forge.interfaces.IButton; import forge.interfaces.IButton;
import forge.interfaces.IGuiGame; import forge.interfaces.IGuiGame;
import forge.interfaces.IWinLoseView; import forge.interfaces.IWinLoseView;
import forge.item.PaperCard;
public abstract class ConquestBattle { public abstract class ConquestBattle {
private final ConquestLocation location; private final ConquestLocation location;
@@ -71,6 +72,7 @@ public abstract class ConquestBattle {
public abstract String getEventName(); public abstract String getEventName();
public abstract String getOpponentName(); public abstract String getOpponentName();
public abstract PaperCard getPlaneswalker();
public abstract void setOpponentAvatar(LobbyPlayer aiPlayer, IGuiGame gui); public abstract void setOpponentAvatar(LobbyPlayer aiPlayer, IGuiGame gui);
public abstract Set<GameType> getVariants(); public abstract Set<GameType> getVariants();
public abstract int gamesPerMatch(); public abstract int gamesPerMatch();

View File

@@ -11,6 +11,7 @@ import forge.game.GameView;
import forge.interfaces.IButton; import forge.interfaces.IButton;
import forge.interfaces.IGuiGame; import forge.interfaces.IGuiGame;
import forge.interfaces.IWinLoseView; import forge.interfaces.IWinLoseView;
import forge.item.PaperCard;
import forge.model.FModel; import forge.model.FModel;
import forge.planarconquest.ConquestPreferences.CQPref; import forge.planarconquest.ConquestPreferences.CQPref;
import forge.properties.ForgeConstants; import forge.properties.ForgeConstants;
@@ -67,6 +68,11 @@ public class ConquestChaosBattle extends ConquestBattle {
return duel.getName(); return duel.getName();
} }
@Override
public PaperCard getPlaneswalker() {
return null;
}
@Override @Override
public void setOpponentAvatar(LobbyPlayer aiPlayer, IGuiGame gui) { public void setOpponentAvatar(LobbyPlayer aiPlayer, IGuiGame gui) {
gui.setPlayerAvatar(aiPlayer, duel); gui.setPlayerAvatar(aiPlayer, duel);

View File

@@ -84,8 +84,7 @@ public class ConquestController {
public void startBattle(ConquestBattle battle) { public void startBattle(ConquestBattle battle) {
if (activeBattle != null) { return; } if (activeBattle != null) { return; }
Set<GameType> variants = battle.getVariants(); final Set<GameType> variants = battle.getVariants();
final ConquestCommander commander = model.getSelectedCommander(); final ConquestCommander commander = model.getSelectedCommander();
final RegisteredPlayer humanStart = new RegisteredPlayer(commander.getDeck()); final RegisteredPlayer humanStart = new RegisteredPlayer(commander.getDeck());
final RegisteredPlayer aiStart = new RegisteredPlayer(battle.getOpponentDeck()); final RegisteredPlayer aiStart = new RegisteredPlayer(battle.getOpponentDeck());
@@ -103,6 +102,10 @@ public class ConquestController {
humanStart.assignVanguardAvatar(); humanStart.assignVanguardAvatar();
aiStart.assignVanguardAvatar(); aiStart.assignVanguardAvatar();
} }
if (variants.contains(GameType.Planeswalker)) { //account for Planeswalker format
humanStart.setPlaneswalker(model.getPlaneswalker());
aiStart.setPlaneswalker(battle.getPlaneswalker());
}
if (variants.contains(GameType.Planechase)) { //generate planar decks if planechase variant being applied if (variants.contains(GameType.Planechase)) { //generate planar decks if planechase variant being applied
List<PaperCard> planes = generatePlanarPool(); List<PaperCard> planes = generatePlanarPool();
humanStart.setPlanes(planes); humanStart.setPlanes(planes);
@@ -137,7 +140,7 @@ public class ConquestController {
FThreads.invokeInEdtNowOrLater(new Runnable(){ FThreads.invokeInEdtNowOrLater(new Runnable(){
@Override @Override
public void run() { public void run() {
hostedMatch.startMatch(rules, null, starter, humanStart, gui); hostedMatch.startMatch(rules, variants, starter, humanStart, gui);
} }
}); });
activeBattle = battle; activeBattle = battle;

View File

@@ -183,6 +183,15 @@ public class ConquestEvent {
return ConquestEvent.this.getOpponentName(); return ConquestEvent.this.getOpponentName();
} }
@Override
public PaperCard getPlaneswalker() {
PaperCard avatarCard = ConquestEvent.this.getAvatarCard();
if (avatarCard != null && avatarCard.getRules().getType().isPlaneswalker()) {
return avatarCard;
}
return null;
}
@Override @Override
public void setOpponentAvatar(LobbyPlayer aiPlayer, IGuiGame gui) { public void setOpponentAvatar(LobbyPlayer aiPlayer, IGuiGame gui) {
PaperCard avatarCard = ConquestEvent.this.getAvatarCard(); PaperCard avatarCard = ConquestEvent.this.getAvatarCard();