mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 20:28:00 +00:00
Implement Planeswalker variant
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user