Added MoJhoSto variant

This commit is contained in:
austinio7116
2018-04-02 07:19:09 +01:00
committed by maustin
parent ff1e6b835c
commit a73667610b
12 changed files with 65 additions and 28 deletions

View File

@@ -42,6 +42,25 @@ public enum GameType {
.getCard("Momir Vig, Simic Visionary Avatar"), 1); .getCard("Momir Vig, Simic Visionary Avatar"), 1);
return deck; return deck;
} }
}),
MoJhoSto (DeckFormat.Constructed, false, false, false, "MoJhoSto", "Each player has a deck containing 60 basic lands and the Momir Vig, Jhoira of the Ghitu, and Stonehewer Giant avatars.", new Function<RegisteredPlayer, Deck>() {
@Override
public Deck apply(RegisteredPlayer player) {
Deck deck = new Deck();
CardPool mainDeck = deck.getMain();
mainDeck.add("Plains", 12);
mainDeck.add("Island", 12);
mainDeck.add("Swamp", 12);
mainDeck.add("Mountain", 12);
mainDeck.add("Forest", 12);
deck.getOrCreate(DeckSection.Avatar).add(StaticData.instance().getVariantCards()
.getCard("Momir Vig, Simic Visionary Avatar"), 1);
deck.getOrCreate(DeckSection.Avatar).add(StaticData.instance().getVariantCards()
.getCard("Jhoira of the Ghitu Avatar"), 1);
deck.getOrCreate(DeckSection.Avatar).add(StaticData.instance().getVariantCards()
.getCard("Stonehewer Giant Avatar"), 1);
return deck;
}
}); });
private final DeckFormat deckFormat; private final DeckFormat deckFormat;

View File

@@ -2591,8 +2591,10 @@ public class Player extends GameEntity implements Comparable<Player> {
PlayerZone com = getZone(ZoneType.Command); PlayerZone com = getZone(ZoneType.Command);
// Vanguard // Vanguard
if (registeredPlayer.getVanguardAvatar() != null) { if (registeredPlayer.getVanguardAvatars() != null) {
com.add(Card.fromPaperCard(registeredPlayer.getVanguardAvatar(), this)); for(PaperCard avatar:registeredPlayer.getVanguardAvatars()) {
com.add(Card.fromPaperCard(avatar, this));
}
} }
// Schemes // Schemes

View File

@@ -30,7 +30,7 @@ public class RegisteredPlayer {
private Iterable<PaperCard> planes = null; private Iterable<PaperCard> planes = null;
private Iterable<PaperCard> conspiracies = null; private Iterable<PaperCard> conspiracies = null;
private List<PaperCard> commanders = Lists.newArrayList(); private List<PaperCard> commanders = Lists.newArrayList();
private PaperCard vanguardAvatar = null; private List<PaperCard> vanguardAvatars = null;
private PaperCard planeswalker = 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; private boolean randomFoil = false;
@@ -104,7 +104,7 @@ public class RegisteredPlayer {
public static RegisteredPlayer forVariants(final int playerCount, public static RegisteredPlayer forVariants(final int playerCount,
final Set<GameType> appliedVariants, final Deck deck, //General vars final Set<GameType> appliedVariants, final Deck deck, //General vars
final Iterable<PaperCard> schemes, final boolean playerIsArchenemy, //Archenemy specific vars final Iterable<PaperCard> schemes, final boolean playerIsArchenemy, //Archenemy specific vars
final Iterable<PaperCard> planes, final PaperCard vanguardAvatar) { //Planechase and Vanguard final Iterable<PaperCard> planes, final CardPool vanguardAvatar) { //Planechase and Vanguard
RegisteredPlayer start = new RegisteredPlayer(deck); RegisteredPlayer start = new RegisteredPlayer(deck);
if (appliedVariants.contains(GameType.Archenemy) && playerIsArchenemy) { if (appliedVariants.contains(GameType.Archenemy) && playerIsArchenemy) {
@@ -131,8 +131,9 @@ public class RegisteredPlayer {
if (appliedVariants.contains(GameType.Planechase)) { if (appliedVariants.contains(GameType.Planechase)) {
start.planes = planes; start.planes = planes;
} }
if (appliedVariants.contains(GameType.Vanguard) || appliedVariants.contains(GameType.MomirBasic)) { if (appliedVariants.contains(GameType.Vanguard) || appliedVariants.contains(GameType.MomirBasic)
start.setVanguardAvatar(vanguardAvatar); || appliedVariants.contains(GameType.MoJhoSto)) {
start.setVanguardAvatars(vanguardAvatar.toFlatList());
} }
return start; return start;
} }
@@ -153,19 +154,21 @@ public class RegisteredPlayer {
commanders = currentDeck.getCommanders(); commanders = currentDeck.getCommanders();
} }
public PaperCard getVanguardAvatar() { public List<PaperCard> getVanguardAvatars() {
return vanguardAvatar; return vanguardAvatars;
} }
public void assignVanguardAvatar() { public void assignVanguardAvatar() {
CardPool section = currentDeck.get(DeckSection.Avatar); CardPool section = currentDeck.get(DeckSection.Avatar);
setVanguardAvatar(section == null ? null : section.get(0)); setVanguardAvatars(section == null ? null : section.toFlatList());
}
private void setVanguardAvatars(List<PaperCard> vanguardAvatars0) {
vanguardAvatars = vanguardAvatars0;
if (vanguardAvatars == null) { return; }
for(PaperCard avatar: vanguardAvatars){
setStartingLife(getStartingLife() + avatar.getRules().getLife());
setStartingHand(getStartingHand() + avatar.getRules().getHand());
} }
private void setVanguardAvatar(PaperCard vanguardAvatar0) {
vanguardAvatar = vanguardAvatar0;
if (vanguardAvatar == null) { return; }
setStartingLife(getStartingLife() + vanguardAvatar.getRules().getLife());
setStartingHand(getStartingHand() + vanguardAvatar.getRules().getHand());
} }
public PaperCard getPlaneswalker() { public PaperCard getPlaneswalker() {

View File

@@ -342,7 +342,8 @@ public class PlayerPanel extends FPanel {
final boolean isArchenemyApplied = mayEdit && lobby.hasVariant(GameType.Archenemy); final boolean isArchenemyApplied = mayEdit && lobby.hasVariant(GameType.Archenemy);
final boolean archenemyVisiblity = mayEdit && lobby.hasVariant(GameType.ArchenemyRumble) || (isArchenemyApplied && isArchenemy()); final boolean archenemyVisiblity = mayEdit && lobby.hasVariant(GameType.ArchenemyRumble) || (isArchenemyApplied && isArchenemy());
// Commander deck building replaces normal one, so hide it // Commander deck building replaces normal one, so hide it
final boolean isDeckBuildingAllowed = mayEdit && !isCommanderApplied && !lobby.hasVariant(GameType.MomirBasic); final boolean isDeckBuildingAllowed = mayEdit && !isCommanderApplied && !lobby.hasVariant(GameType.MomirBasic)
&& !lobby.hasVariant(GameType.MoJhoSto);
deckLabel.setVisible(isDeckBuildingAllowed); deckLabel.setVisible(isDeckBuildingAllowed);
deckBtn.setVisible(isDeckBuildingAllowed); deckBtn.setVisible(isDeckBuildingAllowed);

View File

@@ -89,6 +89,7 @@ public class VLobby implements ILobbyView {
private final FPanel variantsPanel = new FPanel(new MigLayout("insets 10, gapx 10")); private final FPanel variantsPanel = new FPanel(new MigLayout("insets 10, gapx 10"));
private final VariantCheckBox vntVanguard = new VariantCheckBox(GameType.Vanguard); private final VariantCheckBox vntVanguard = new VariantCheckBox(GameType.Vanguard);
private final VariantCheckBox vntMomirBasic = new VariantCheckBox(GameType.MomirBasic); private final VariantCheckBox vntMomirBasic = new VariantCheckBox(GameType.MomirBasic);
private final VariantCheckBox vntMoJhoSto = new VariantCheckBox(GameType.MoJhoSto);
private final VariantCheckBox vntCommander = new VariantCheckBox(GameType.Commander); private final VariantCheckBox vntCommander = new VariantCheckBox(GameType.Commander);
private final VariantCheckBox vntTinyLeaders = new VariantCheckBox(GameType.TinyLeaders); private final VariantCheckBox vntTinyLeaders = new VariantCheckBox(GameType.TinyLeaders);
private final VariantCheckBox vntBrawl = new VariantCheckBox(GameType.Brawl); private final VariantCheckBox vntBrawl = new VariantCheckBox(GameType.Brawl);
@@ -96,9 +97,9 @@ public class VLobby implements ILobbyView {
private final VariantCheckBox vntArchenemy = new VariantCheckBox(GameType.Archenemy); private final VariantCheckBox vntArchenemy = new VariantCheckBox(GameType.Archenemy);
private final VariantCheckBox vntArchenemyRumble = new VariantCheckBox(GameType.ArchenemyRumble); private final VariantCheckBox vntArchenemyRumble = new VariantCheckBox(GameType.ArchenemyRumble);
private final ImmutableList<VariantCheckBox> vntBoxesLocal = private final ImmutableList<VariantCheckBox> vntBoxesLocal =
ImmutableList.of(vntVanguard, vntMomirBasic, vntCommander, vntTinyLeaders, vntBrawl, vntPlanechase, vntArchenemy, vntArchenemyRumble); ImmutableList.of(vntVanguard, vntMomirBasic, vntMoJhoSto, vntCommander, vntTinyLeaders, vntBrawl, vntPlanechase, vntArchenemy, vntArchenemyRumble);
private final ImmutableList<VariantCheckBox> vntBoxesNetwork = private final ImmutableList<VariantCheckBox> vntBoxesNetwork =
ImmutableList.of(vntVanguard, vntMomirBasic, vntCommander, vntTinyLeaders, vntBrawl /*, vntPlanechase, vntArchenemy, vntArchenemyRumble */); ImmutableList.of(vntVanguard, vntMomirBasic, vntMoJhoSto, vntCommander, vntTinyLeaders, vntBrawl /*, vntPlanechase, vntArchenemy, vntArchenemyRumble */);
// Player frame elements // Player frame elements
private final JPanel playersFrame = new JPanel(new MigLayout("insets 0, gap 0 5, wrap, hidemode 3")); private final JPanel playersFrame = new JPanel(new MigLayout("insets 0, gap 0 5, wrap, hidemode 3"));
@@ -387,7 +388,7 @@ public class VLobby implements ILobbyView {
} }
void setReady(final int index, final boolean ready) { void setReady(final int index, final boolean ready) {
if (ready && decks[index] == null && !vntMomirBasic.isSelected()) { if (ready && decks[index] == null && !vntMomirBasic.isSelected() && !vntMoJhoSto.isSelected()) {
SOptionPane.showErrorDialog("Select a deck before readying!"); SOptionPane.showErrorDialog("Select a deck before readying!");
update(false); update(false);
return; return;

View File

@@ -120,6 +120,7 @@ public abstract class LobbyScreen extends LaunchScreen implements ILobbyView {
cbVariants.addItem("(None)"); cbVariants.addItem("(None)");
cbVariants.addItem(GameType.Vanguard); cbVariants.addItem(GameType.Vanguard);
cbVariants.addItem(GameType.MomirBasic); cbVariants.addItem(GameType.MomirBasic);
cbVariants.addItem(GameType.MoJhoSto);
cbVariants.addItem(GameType.Commander); cbVariants.addItem(GameType.Commander);
cbVariants.addItem(GameType.TinyLeaders); cbVariants.addItem(GameType.TinyLeaders);
cbVariants.addItem(GameType.Brawl); cbVariants.addItem(GameType.Brawl);
@@ -345,6 +346,7 @@ public abstract class LobbyScreen extends LaunchScreen implements ILobbyView {
lstVariants.setListItemRenderer(new VariantRenderer()); lstVariants.setListItemRenderer(new VariantRenderer());
lstVariants.addItem(new Variant(GameType.Vanguard)); lstVariants.addItem(new Variant(GameType.Vanguard));
lstVariants.addItem(new Variant(GameType.MomirBasic)); lstVariants.addItem(new Variant(GameType.MomirBasic));
lstVariants.addItem(new Variant(GameType.MoJhoSto));
lstVariants.addItem(new Variant(GameType.Commander)); lstVariants.addItem(new Variant(GameType.Commander));
lstVariants.addItem(new Variant(GameType.TinyLeaders)); lstVariants.addItem(new Variant(GameType.TinyLeaders));
lstVariants.addItem(new Variant(GameType.Brawl)); lstVariants.addItem(new Variant(GameType.Brawl));

View File

@@ -15,7 +15,7 @@ public class ArcaneMaster extends Achievement {
@Override @Override
protected int evaluate(Player player, Game game) { protected int evaluate(Player player, Game game) {
if (game.getRules().hasAppliedVariant(GameType.MomirBasic)) { if (game.getRules().hasAppliedVariant(GameType.MomirBasic) || game.getRules().hasAppliedVariant(GameType.MoJhoSto)) {
return defaultValue; // Momir Basic is exempt from this achievement (custom rules do not require any spellcasting by default) return defaultValue; // Momir Basic is exempt from this achievement (custom rules do not require any spellcasting by default)
} }
if (player.getOutcome().hasWon()) { if (player.getOutcome().hasWon()) {

View File

@@ -72,7 +72,7 @@ public class ChallengeAchievements extends AchievementCollection {
} }
public static boolean checkValidGameMode(final Game game) { public static boolean checkValidGameMode(final Game game) {
if (game.getRules().hasAppliedVariant(GameType.MomirBasic) if (game.getRules().hasAppliedVariant(GameType.MomirBasic) || game.getRules().hasAppliedVariant(GameType.MoJhoSto)
|| game.getRules().hasAppliedVariant(GameType.Puzzle)) { || game.getRules().hasAppliedVariant(GameType.Puzzle)) {
// these modes use a fixed pre-defined deck format, so challenge achievements don't apply in them // these modes use a fixed pre-defined deck format, so challenge achievements don't apply in them
return false; return false;

View File

@@ -13,6 +13,7 @@ public class ConstructedAchievements extends AchievementCollection {
protected void addAchievements() { protected void addAchievements() {
add(new VariantWins(GameType.Vanguard, 25, 50, 100)); add(new VariantWins(GameType.Vanguard, 25, 50, 100));
add(new VariantWins(GameType.MomirBasic, 25, 50, 100)); add(new VariantWins(GameType.MomirBasic, 25, 50, 100));
add(new VariantWins(GameType.MoJhoSto, 25, 50, 100));
add(new VariantWins(GameType.Commander, 25, 50, 100)); add(new VariantWins(GameType.Commander, 25, 50, 100));
add(new VariantWins(GameType.TinyLeaders, 25, 50, 100)); add(new VariantWins(GameType.TinyLeaders, 25, 50, 100));
add(new VariantWins(GameType.Brawl, 25, 50, 100)); add(new VariantWins(GameType.Brawl, 25, 50, 100));

View File

@@ -16,7 +16,7 @@ public class Domain extends ProgressiveAchievement {
@Override @Override
protected boolean eval(Player player, Game game) { protected boolean eval(Player player, Game game) {
if (game.getRules().hasAppliedVariant(GameType.MomirBasic)) { if (game.getRules().hasAppliedVariant(GameType.MomirBasic) || game.getRules().hasAppliedVariant(GameType.MoJhoSto)) {
// Not an achievement in Momir Basic (easy to get due to predefined deck contents) // Not an achievement in Momir Basic (easy to get due to predefined deck contents)
return false; return false;
} }

View File

@@ -17,7 +17,7 @@ public class ManaFlooded extends Achievement {
@Override @Override
protected int evaluate(Player player, Game game) { protected int evaluate(Player player, Game game) {
if (game.getRules().hasAppliedVariant(GameType.MomirBasic)) { if (game.getRules().hasAppliedVariant(GameType.MomirBasic) || game.getRules().hasAppliedVariant(GameType.MoJhoSto)) {
return 0; // in Momir Basic, getting a lot of lands out is not an achievement:w return 0; // in Momir Basic, getting a lot of lands out is not an achievement:w
} }
if (player.getOutcome().hasWon()) { if (player.getOutcome().hasWon()) {

View File

@@ -234,25 +234,37 @@ public abstract class GameLobby implements IHasGameType {
data.appliedVariants.remove(GameType.TinyLeaders); data.appliedVariants.remove(GameType.TinyLeaders);
data.appliedVariants.remove(GameType.Brawl); data.appliedVariants.remove(GameType.Brawl);
data.appliedVariants.remove(GameType.MomirBasic); data.appliedVariants.remove(GameType.MomirBasic);
data.appliedVariants.remove(GameType.MoJhoSto);
break; break;
case TinyLeaders: case TinyLeaders:
data.appliedVariants.remove(GameType.Commander); data.appliedVariants.remove(GameType.Commander);
data.appliedVariants.remove(GameType.Brawl); data.appliedVariants.remove(GameType.Brawl);
data.appliedVariants.remove(GameType.MomirBasic); data.appliedVariants.remove(GameType.MomirBasic);
data.appliedVariants.remove(GameType.MoJhoSto);
break; break;
case Brawl: case Brawl:
data.appliedVariants.remove(GameType.Commander); data.appliedVariants.remove(GameType.Commander);
data.appliedVariants.remove(GameType.TinyLeaders); data.appliedVariants.remove(GameType.TinyLeaders);
data.appliedVariants.remove(GameType.MomirBasic); data.appliedVariants.remove(GameType.MomirBasic);
data.appliedVariants.remove(GameType.MoJhoSto);
break; break;
case Vanguard: case Vanguard:
data.appliedVariants.remove(GameType.MomirBasic); data.appliedVariants.remove(GameType.MomirBasic);
data.appliedVariants.remove(GameType.MoJhoSto);
break; break;
case MomirBasic: case MomirBasic:
data.appliedVariants.remove(GameType.Commander); data.appliedVariants.remove(GameType.Commander);
data.appliedVariants.remove(GameType.TinyLeaders); data.appliedVariants.remove(GameType.TinyLeaders);
data.appliedVariants.remove(GameType.Brawl); data.appliedVariants.remove(GameType.Brawl);
data.appliedVariants.remove(GameType.Vanguard); data.appliedVariants.remove(GameType.Vanguard);
data.appliedVariants.remove(GameType.MoJhoSto);
break;
case MoJhoSto:
data.appliedVariants.remove(GameType.Commander);
data.appliedVariants.remove(GameType.TinyLeaders);
data.appliedVariants.remove(GameType.Brawl);
data.appliedVariants.remove(GameType.Vanguard);
data.appliedVariants.remove(GameType.MomirBasic);
break; break;
default: default:
break; break;
@@ -413,7 +425,6 @@ public abstract class GameLobby implements IHasGameType {
players.add(rp.setPlayer(lobbyPlayer)); players.add(rp.setPlayer(lobbyPlayer));
} }
else { else {
PaperCard vanguardAvatar = null;
if (isCommanderMatch) { if (isCommanderMatch) {
final GameType commanderGameType = isTinyLeadersMatch ? GameType.TinyLeaders : isBrawlMatch ? GameType.Brawl : GameType.Commander; final GameType commanderGameType = isTinyLeadersMatch ? GameType.TinyLeaders : isBrawlMatch ? GameType.Brawl : GameType.Commander;
if (checkLegality) { if (checkLegality) {
@@ -438,9 +449,6 @@ public abstract class GameLobby implements IHasGameType {
deck = deck == null ? rp.getDeck() : deck; deck = deck == null ? rp.getDeck() : deck;
final CardPool avatarPool = deck.get(DeckSection.Avatar); final CardPool avatarPool = deck.get(DeckSection.Avatar);
if (avatarPool != null && (hasVariant(GameType.Vanguard) || hasVariant(GameType.MomirBasic))) {
vanguardAvatar = avatarPool.get(0);
}
Iterable<PaperCard> schemes = null; Iterable<PaperCard> schemes = null;
Iterable<PaperCard> planes = null; Iterable<PaperCard> planes = null;
@@ -474,14 +482,14 @@ public abstract class GameLobby implements IHasGameType {
//Vanguard //Vanguard
if (variantTypes.contains(GameType.Vanguard)) { if (variantTypes.contains(GameType.Vanguard)) {
if (vanguardAvatar == null) { //ERROR! null if avatar deselected on list if (avatarPool == null || avatarPool.countAll() == 0) { //ERROR! null if avatar deselected on list
SOptionPane.showMessageDialog("No Vanguard avatar selected for " + name SOptionPane.showMessageDialog("No Vanguard avatar selected for " + name
+ ". Please choose one or disable the Vanguard variant"); + ". Please choose one or disable the Vanguard variant");
return null; return null;
} }
} }
rp = RegisteredPlayer.forVariants(activeSlots.size(), variantTypes, deck, schemes, isArchenemy, planes, vanguardAvatar); rp = RegisteredPlayer.forVariants(activeSlots.size(), variantTypes, deck, schemes, isArchenemy, planes, avatarPool);
rp.setTeamNumber(team); rp.setTeamNumber(team);
players.add(rp.setPlayer(lobbyPlayer)); players.add(rp.setPlayer(lobbyPlayer));
} }