diff --git a/Mage.Client/pom.xml b/Mage.Client/pom.xml index e0387aecee3..c28b20ae2b1 100644 --- a/Mage.Client/pom.xml +++ b/Mage.Client/pom.xml @@ -6,7 +6,7 @@ org.mage mage-root - 1.4.0 + 1.4.1 org.mage diff --git a/Mage.Client/release/readme.txt b/Mage.Client/release/readme.txt index eeba07fd9ed..cde5e139c8c 100644 --- a/Mage.Client/release/readme.txt +++ b/Mage.Client/release/readme.txt @@ -11,7 +11,7 @@ You can download this from: http://java.com/ Installing and running XMage You will need to download both the client and the server applications. These can be -obtained from HTTP://XMage.info. +obtained from HTTP://XMage.de. Extact the client and the server to separate folders. To play a game you can either connect to a server or start your own server. To diff --git a/Mage.Client/src/main/java/mage/client/MageFrame.java b/Mage.Client/src/main/java/mage/client/MageFrame.java index 8a9e3a95f50..641ba54ddb6 100644 --- a/Mage.Client/src/main/java/mage/client/MageFrame.java +++ b/Mage.Client/src/main/java/mage/client/MageFrame.java @@ -739,14 +739,7 @@ public class MageFrame extends javax.swing.JFrame implements MageClient { } public void setUserPrefsToConnection(Connection connection) { - int avatarId = PreferencesDialog.getSelectedAvatar(); - connection.setAvatarId(avatarId); - boolean showAbilityPickerForced = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_SHOW_ABILITY_PICKER_FORCED, "true").equals("true"); - connection.setShowAbilityPickerForced(showAbilityPickerForced); - connection.setAllowRequestShowHandCards(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_GAME_ALLOW_REQUEST_SHOW_HAND_CARDS, "true").equals("true")); - connection.setConfirmEmptyManaPool(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_GAME_CONFIRM_EMPTY_MANA_POOL, "true").equals("true")); - connection.setUserSkipPrioritySteps(PreferencesDialog.getUserSkipPrioritySteps()); - connection.setFlagName(MageFrame.getPreferences().get(KEY_CONNECT_FLAG, "world.png")); + connection.setUserData(PreferencesDialog.getUserData()); } /** diff --git a/Mage.Client/src/main/java/mage/client/chat/ChatPanel.form b/Mage.Client/src/main/java/mage/client/chat/ChatPanel.form index 7bc34fdbb7b..f423543b402 100644 --- a/Mage.Client/src/main/java/mage/client/chat/ChatPanel.form +++ b/Mage.Client/src/main/java/mage/client/chat/ChatPanel.form @@ -96,7 +96,7 @@ - + diff --git a/Mage.Client/src/main/java/mage/client/chat/ChatPanel.java b/Mage.Client/src/main/java/mage/client/chat/ChatPanel.java index 60a405a7928..12b95847501 100644 --- a/Mage.Client/src/main/java/mage/client/chat/ChatPanel.java +++ b/Mage.Client/src/main/java/mage/client/chat/ChatPanel.java @@ -37,31 +37,25 @@ import java.awt.Color; import java.awt.event.KeyEvent; import java.util.ArrayList; import java.util.Collection; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.UUID; import javax.swing.Icon; -import javax.swing.ImageIcon; import javax.swing.JTextField; import javax.swing.table.AbstractTableModel; import javax.swing.table.JTableHeader; import javax.swing.table.TableColumnModel; import mage.client.MageFrame; -import mage.client.dialog.PreferencesDialog; -import static mage.client.dialog.PreferencesDialog.KEY_TABLES_COLUMNS_ORDER; -import static mage.client.dialog.PreferencesDialog.KEY_TABLES_COLUMNS_WIDTH; import static mage.client.dialog.PreferencesDialog.KEY_USERS_COLUMNS_ORDER; import static mage.client.dialog.PreferencesDialog.KEY_USERS_COLUMNS_WIDTH; import mage.client.util.MageTableRowSorter; import mage.client.util.gui.TableUtil; +import mage.client.util.gui.countryBox.CountryCellRenderer; import mage.remote.MageRemoteException; import mage.remote.Session; import mage.view.ChatMessage.MessageColor; import mage.view.ChatMessage.MessageType; import mage.view.RoomUsersView; import mage.view.UsersView; -import org.apache.log4j.Logger; import org.mage.card.arcane.ManaSymbols; /** @@ -69,13 +63,11 @@ import org.mage.card.arcane.ManaSymbols; * @author BetaSteward_at_googlemail.com, nantuko */ public class ChatPanel extends javax.swing.JPanel { - - private static final Logger logger = Logger.getLogger(ChatPanel.class); - + private UUID chatId; private Session session; private final List players = new ArrayList<>(); - private final TableModel tableModel; + private final UserTableModel userTableModel; /** * Chat message color for opponents. */ @@ -153,14 +145,15 @@ public class ChatPanel extends javax.swing.JPanel { * @param addPlayersTab */ public ChatPanel(boolean addPlayersTab) { - tableModel = new TableModel(); + userTableModel = new UserTableModel(); initComponents(); setBackground(new Color(0, 0, 0, ALPHA)); jTablePlayers.setBackground(new Color(0, 0, 0, ALPHA)); jTablePlayers.setForeground(Color.white); - jTablePlayers.setRowSorter(new MageTableRowSorter(tableModel)); - + jTablePlayers.setRowSorter(new MageTableRowSorter(userTableModel)); + TableUtil.setColumnWidthAndOrder(jTablePlayers, defaultColumnsWidth, KEY_USERS_COLUMNS_WIDTH, KEY_USERS_COLUMNS_ORDER); + jTablePlayers.setDefaultRenderer(Icon.class, new CountryCellRenderer()); if (jScrollPaneTxt != null) { jScrollPaneTxt.setBackground(new Color(0, 0, 0, ALPHA)); @@ -331,13 +324,10 @@ public class ChatPanel extends javax.swing.JPanel { return this.jSplitPane1.getDividerLocation(); } - class TableModel extends AbstractTableModel { - - - + class UserTableModel extends AbstractTableModel { + private final String[] columnNames = new String[]{" ","Players", "Info", "Games", "Connection"}; private UsersView[] players = new UsersView[0]; - private Map flagIconCache = new HashMap<>(); public void loadData(Collection roomUserInfoList) throws MageRemoteException { RoomUsersView roomUserInfo = roomUserInfoList.iterator().next(); @@ -345,8 +335,8 @@ public class ChatPanel extends javax.swing.JPanel { JTableHeader th = jTablePlayers.getTableHeader(); TableColumnModel tcm = th.getColumnModel(); - tcm.getColumn(1).setHeaderValue("Players (" + this.players.length + ")"); - tcm.getColumn(3).setHeaderValue( + tcm.getColumn(jTablePlayers.convertColumnIndexToView(1)).setHeaderValue("Players (" + this.players.length + ")"); + tcm.getColumn(jTablePlayers.convertColumnIndexToView(3)).setHeaderValue( "Games " + roomUserInfo.getNumberActiveGames() + (roomUserInfo.getNumberActiveGames() != roomUserInfo.getNumberGameThreads() ? " (T:" + roomUserInfo.getNumberGameThreads():" (") + " limit: " + roomUserInfo.getNumberMaxGames() + ")"); @@ -368,7 +358,7 @@ public class ChatPanel extends javax.swing.JPanel { public Object getValueAt(int arg0, int arg1) { switch (arg1) { case 0: - return getCountryFlagIcon(players[arg0].getFlagName()); + return players[arg0].getFlagName(); case 1: return players[arg0].getUserName(); case 2: @@ -407,18 +397,7 @@ public class ChatPanel extends javax.swing.JPanel { return false; } - private ImageIcon getCountryFlagIcon(String countryCode) { - ImageIcon flagIcon = flagIconCache.get(countryCode); - if (flagIcon == null) { - flagIcon = new javax.swing.ImageIcon(getClass().getResource("/flags/" + countryCode +".png")); - if (flagIcon.getImage() == null) { - logger.warn("Country flag resource not found: " + countryCode); - } else { - flagIconCache.put(countryCode, flagIcon); - } - } - return flagIcon; - } + } @@ -460,7 +439,7 @@ public class ChatPanel extends javax.swing.JPanel { jScrollPanePlayers.setBorder(null); - jTablePlayers.setModel(this.tableModel); + jTablePlayers.setModel(this.userTableModel); jTablePlayers.setToolTipText("Connected players"); jTablePlayers.setAutoscrolls(false); jTablePlayers.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); @@ -528,7 +507,7 @@ public class ChatPanel extends javax.swing.JPanel { public void setRoomUserInfo(List> view) { try { - tableModel.loadData(view.get(0)); + userTableModel.loadData(view.get(0)); } catch (Exception ex) { this.players.clear(); } diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/collection/viewer/CollectionViewerPane.java b/Mage.Client/src/main/java/mage/client/deckeditor/collection/viewer/CollectionViewerPane.java index 69563a64746..fee877ac688 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/collection/viewer/CollectionViewerPane.java +++ b/Mage.Client/src/main/java/mage/client/deckeditor/collection/viewer/CollectionViewerPane.java @@ -44,7 +44,7 @@ public class CollectionViewerPane extends MagePane { public CollectionViewerPane() { boolean initialized = false; - this.setTitle("Collection Viewier"); + this.setTitle("Collection Viewer"); if (Plugins.getInstance().isThemePluginLoaded()) { Map uiComponents = new HashMap(); JComponent container = Plugins.getInstance().updateTablePanel(uiComponents); diff --git a/Mage.Client/src/main/java/mage/client/dialog/AboutDialog.form b/Mage.Client/src/main/java/mage/client/dialog/AboutDialog.form index 4d3f578895f..f9036d14f48 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/AboutDialog.form +++ b/Mage.Client/src/main/java/mage/client/dialog/AboutDialog.form @@ -52,9 +52,9 @@ - + - + @@ -82,17 +82,17 @@ - + - + - + diff --git a/Mage.Client/src/main/java/mage/client/dialog/AboutDialog.java b/Mage.Client/src/main/java/mage/client/dialog/AboutDialog.java index 613b928b90b..45a60b45087 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/AboutDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/AboutDialog.java @@ -88,11 +88,11 @@ public class AboutDialog extends MageDialog { lblVersion.setText("0.0.0"); - jLabel2.setText("Courtesy: BetaSteward@googlemail.com. Site: http://XMage.info/"); + jLabel2.setText("Courtesy: BetaSteward@googlemail.com. Site: http://XMage.de/"); - jLabel3.setText("Devs: BetaSteward, Noxx, Eugen.Rivniy, North, LevelX2, Jeff, Plopman, dustinconrad, emerald000. "); + jLabel3.setText("Devs: BetaSteward, Noxx, Eugen.Rivniy, North, LevelX2, Jeff, Plopman, dustinconrad, emerald000.,"); - jLabel4.setText("Thanks: maurer.it, Rafbill, Alvin, cbt33, Quercitron."); + jLabel4.setText("fireshoes, lunaskyrise, mnapoleon, jgod, LoneFox."); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); @@ -122,9 +122,9 @@ public class AboutDialog extends MageDialog { .addComponent(jLabel2) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel4) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 62, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 71, Short.MAX_VALUE) .addComponent(btnOk) .addContainerGap()) ); diff --git a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.form b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.form index 06253718466..cfc3e9c0364 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.form +++ b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.form @@ -82,10 +82,10 @@ - + - + @@ -201,23 +201,17 @@ - - - - - - - - - - - - - - - + + + + + + + + + @@ -235,6 +229,9 @@ + + + @@ -307,6 +304,17 @@ + + + + + + + + + + + diff --git a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java index a55dee9d986..c9d2f27d8fa 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java @@ -66,6 +66,7 @@ import mage.client.util.gui.BufferedImageBuilder; import mage.players.net.UserSkipPrioritySteps; import mage.remote.Connection; import mage.remote.Connection.ProxyType; +import mage.view.UserDataView; import org.apache.log4j.Logger; /** @@ -86,6 +87,7 @@ public class PreferencesDialog extends javax.swing.JDialog { public static final String KEY_GAME_ALLOW_REQUEST_SHOW_HAND_CARDS = "gameAllowRequestShowHandCards"; public static final String KEY_GAME_SHOW_STORM_COUNTER = "gameShowStormCounter"; public static final String KEY_GAME_CONFIRM_EMPTY_MANA_POOL = "gameConfirmEmptyManaPool"; + public static final String KEY_GAME_ASK_MOVE_TO_GRAVE_ORDER = "gameAskMoveToGraveORder"; public static final String KEY_GAME_LOG_AUTO_SAVE = "gameLogAutoSave"; @@ -346,6 +348,7 @@ public class PreferencesDialog extends javax.swing.JDialog { cbAllowRequestToShowHandCards = new javax.swing.JCheckBox(); cbShowStormCounter = new javax.swing.JCheckBox(); cbConfirmEmptyManaPool = new javax.swing.JCheckBox(); + cbAskMoveToGraveOrder = new javax.swing.JCheckBox(); main_gamelog = new javax.swing.JPanel(); cbGameLogAutoSave = new javax.swing.JCheckBox(); tabPhases = new javax.swing.JPanel(); @@ -570,6 +573,16 @@ public class PreferencesDialog extends javax.swing.JDialog { } }); + cbAskMoveToGraveOrder.setSelected(true); + cbAskMoveToGraveOrder.setText("Ask player for setting order cards go to graveyard"); + cbAskMoveToGraveOrder.setToolTipText("If activated and multiple cards go to the graveyard at the same time
\nthe player is asked to set the order of the cards."); + cbAskMoveToGraveOrder.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); + cbAskMoveToGraveOrder.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + cbAskMoveToGraveOrderActionPerformed(evt); + } + }); + javax.swing.GroupLayout main_gameLayout = new javax.swing.GroupLayout(main_game); main_game.setLayout(main_gameLayout); main_gameLayout.setHorizontalGroup( @@ -577,18 +590,15 @@ public class PreferencesDialog extends javax.swing.JDialog { .addGroup(main_gameLayout.createSequentialGroup() .addContainerGap() .addGroup(main_gameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(main_gameLayout.createSequentialGroup() - .addComponent(cbAllowRequestToShowHandCards, javax.swing.GroupLayout.PREFERRED_SIZE, 546, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addGroup(main_gameLayout.createSequentialGroup() - .addGroup(main_gameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(main_gameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) - .addComponent(showPlayerNamesPermanently, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(nonLandPermanentsInOnePile, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(showAbilityPickerForced, javax.swing.GroupLayout.Alignment.LEADING)) - .addComponent(cbShowStormCounter, javax.swing.GroupLayout.PREFERRED_SIZE, 546, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(cbConfirmEmptyManaPool, javax.swing.GroupLayout.PREFERRED_SIZE, 546, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGap(0, 0, Short.MAX_VALUE)))) + .addComponent(cbAllowRequestToShowHandCards, javax.swing.GroupLayout.PREFERRED_SIZE, 546, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(main_gameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) + .addComponent(showPlayerNamesPermanently, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(nonLandPermanentsInOnePile, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(showAbilityPickerForced, javax.swing.GroupLayout.Alignment.LEADING)) + .addComponent(cbShowStormCounter, javax.swing.GroupLayout.PREFERRED_SIZE, 546, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(cbConfirmEmptyManaPool, javax.swing.GroupLayout.PREFERRED_SIZE, 546, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(cbAskMoveToGraveOrder, javax.swing.GroupLayout.PREFERRED_SIZE, 546, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); main_gameLayout.setVerticalGroup( main_gameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) @@ -603,7 +613,10 @@ public class PreferencesDialog extends javax.swing.JDialog { .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(cbShowStormCounter) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(cbConfirmEmptyManaPool)) + .addComponent(cbConfirmEmptyManaPool) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(cbAskMoveToGraveOrder) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); nonLandPermanentsInOnePile.getAccessibleContext().setAccessibleName("nonLandPermanentsInOnePile"); @@ -651,10 +664,10 @@ public class PreferencesDialog extends javax.swing.JDialog { .addContainerGap() .addComponent(main_card, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(main_game, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(main_game, javax.swing.GroupLayout.PREFERRED_SIZE, 189, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(main_gamelog, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(40, Short.MAX_VALUE)) + .addContainerGap()) ); main_card.getAccessibleContext().setAccessibleName("Game panel"); @@ -1626,7 +1639,7 @@ public class PreferencesDialog extends javax.swing.JDialog { .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(exitButton, javax.swing.GroupLayout.PREFERRED_SIZE, 55, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap()) - .addComponent(tabsPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 595, Short.MAX_VALUE) + .addComponent(tabsPanel) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) @@ -1655,6 +1668,7 @@ public class PreferencesDialog extends javax.swing.JDialog { save(prefs, dialog.cbAllowRequestToShowHandCards, KEY_GAME_ALLOW_REQUEST_SHOW_HAND_CARDS, "true", "false", UPDATE_CACHE_POLICY); save(prefs, dialog.cbShowStormCounter, KEY_GAME_SHOW_STORM_COUNTER, "true", "false", UPDATE_CACHE_POLICY); save(prefs, dialog.cbConfirmEmptyManaPool, KEY_GAME_CONFIRM_EMPTY_MANA_POOL, "true", "false", UPDATE_CACHE_POLICY); + save(prefs, dialog.cbAskMoveToGraveOrder, KEY_GAME_ASK_MOVE_TO_GRAVE_ORDER, "true", "false", UPDATE_CACHE_POLICY); save(prefs, dialog.cbGameLogAutoSave, KEY_GAME_LOG_AUTO_SAVE, "true", "false", UPDATE_CACHE_POLICY); // Phases @@ -1717,13 +1731,7 @@ public class PreferencesDialog extends javax.swing.JDialog { } try { - MageFrame.getSession().updatePreferencesForServer( - getSelectedAvatar(), - dialog.showAbilityPickerForced.isSelected(), - dialog.cbAllowRequestToShowHandCards.isSelected(), - dialog.cbConfirmEmptyManaPool.isSelected(), - getUserSkipPrioritySteps(), - MageFrame.getPreferences().get(KEY_CONNECT_FLAG, "world.png")); + MageFrame.getSession().updatePreferencesForServer(getUserData()); prefs.flush(); } catch (BackingStoreException ex) { @@ -1978,6 +1986,10 @@ public class PreferencesDialog extends javax.swing.JDialog { // TODO add your handling code here: }//GEN-LAST:event_cbConfirmEmptyManaPoolActionPerformed + private void cbAskMoveToGraveOrderActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbAskMoveToGraveOrderActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_cbAskMoveToGraveOrderActionPerformed + private void showProxySettings() { if (cbProxyType.getSelectedItem() == Connection.ProxyType.SOCKS) { this.pnlProxy.setVisible(true); @@ -2055,6 +2067,7 @@ public class PreferencesDialog extends javax.swing.JDialog { load(prefs, dialog.cbAllowRequestToShowHandCards, KEY_GAME_ALLOW_REQUEST_SHOW_HAND_CARDS, "true"); load(prefs, dialog.cbShowStormCounter, KEY_GAME_SHOW_STORM_COUNTER, "true"); load(prefs, dialog.cbConfirmEmptyManaPool, KEY_GAME_CONFIRM_EMPTY_MANA_POOL, "true"); + load(prefs, dialog.cbAskMoveToGraveOrder, KEY_GAME_ASK_MOVE_TO_GRAVE_ORDER, "true"); load(prefs, dialog.cbGameLogAutoSave, KEY_GAME_LOG_AUTO_SAVE, "true"); @@ -2395,26 +2408,32 @@ public class PreferencesDialog extends javax.swing.JDialog { public void mousePressed(MouseEvent e) { if (selectedAvatarId != id) { setSelectedId(id); - MageFrame.getSession().updatePreferencesForServer( - id, - PreferencesDialog.getCachedValue(PreferencesDialog.KEY_SHOW_TOOLTIPS_ANY_ZONE, "true").equals("true"), - PreferencesDialog.getCachedValue(PreferencesDialog.KEY_GAME_ALLOW_REQUEST_SHOW_HAND_CARDS, "true").equals("true"), - PreferencesDialog.getCachedValue(PreferencesDialog.KEY_GAME_CONFIRM_EMPTY_MANA_POOL, "true").equals("true"), - getUserSkipPrioritySteps(), - MageFrame.getPreferences().get(KEY_CONNECT_FLAG, "world.png") - ); + MageFrame.getSession().updatePreferencesForServer(getUserData()); } } }); } } + public static UserDataView getUserData(){ + return new UserDataView( + getSelectedAvatar(), + PreferencesDialog.getCachedValue(PreferencesDialog.KEY_SHOW_TOOLTIPS_ANY_ZONE, "true").equals("true"), + PreferencesDialog.getCachedValue(PreferencesDialog.KEY_GAME_ALLOW_REQUEST_SHOW_HAND_CARDS, "true").equals("true"), + PreferencesDialog.getCachedValue(PreferencesDialog.KEY_GAME_CONFIRM_EMPTY_MANA_POOL, "true").equals("true"), + getUserSkipPrioritySteps(), + MageFrame.getPreferences().get(KEY_CONNECT_FLAG, "world"), + PreferencesDialog.getCachedValue(PreferencesDialog.KEY_GAME_ASK_MOVE_TO_GRAVE_ORDER, "true").equals("true") + ); + } + // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton btnBattlefieldBGMBrowse; private javax.swing.JButton btnBrowseBackgroundImage; private javax.swing.JButton btnBrowseBattlefieldImage; private javax.swing.JButton btnBrowseImageLocation; private javax.swing.JCheckBox cbAllowRequestToShowHandCards; + private javax.swing.JCheckBox cbAskMoveToGraveOrder; private javax.swing.JCheckBox cbCheckForNewImages; private javax.swing.JCheckBox cbConfirmEmptyManaPool; private javax.swing.JCheckBox cbEnableBattlefieldBGM; diff --git a/Mage.Client/src/main/java/mage/client/game/PlayAreaPanel.java b/Mage.Client/src/main/java/mage/client/game/PlayAreaPanel.java index 8f5a31791f7..f82dda7b13b 100644 --- a/Mage.Client/src/main/java/mage/client/game/PlayAreaPanel.java +++ b/Mage.Client/src/main/java/mage/client/game/PlayAreaPanel.java @@ -569,8 +569,12 @@ public class PlayAreaPanel extends javax.swing.JPanel { } public void setMenuStates(boolean manaPoolAutomatic, boolean manaPoolAutomaticRestricted) { - manaPoolMenuItem1.setSelected(manaPoolAutomatic); - manaPoolMenuItem2.setSelected(manaPoolAutomaticRestricted); + if (manaPoolMenuItem1 != null) { + manaPoolMenuItem1.setSelected(manaPoolAutomatic); + } + if (manaPoolMenuItem2 != null) { + manaPoolMenuItem2.setSelected(manaPoolAutomaticRestricted); + } } private mage.client.game.BattlefieldPanel battlefieldPanel; diff --git a/Mage.Client/src/main/java/mage/client/util/gui/countryBox/CountryCellRenderer.java b/Mage.Client/src/main/java/mage/client/util/gui/countryBox/CountryCellRenderer.java new file mode 100644 index 00000000000..2ee392fe9ea --- /dev/null +++ b/Mage.Client/src/main/java/mage/client/util/gui/countryBox/CountryCellRenderer.java @@ -0,0 +1,80 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ + +package mage.client.util.gui.countryBox; + +import java.awt.Component; +import java.util.HashMap; +import java.util.Map; +import javax.swing.ImageIcon; +import javax.swing.JLabel; +import javax.swing.JTable; +import javax.swing.table.DefaultTableCellRenderer; +import org.apache.log4j.Logger; + +/** + * + * @author LevelX2 + */ +public class CountryCellRenderer extends DefaultTableCellRenderer { + + private static final Logger logger = Logger.getLogger(CountryCellRenderer.class); + private final Map flagIconCache = new HashMap<>(); + + private final Map countryMap = new HashMap<>(); + + public CountryCellRenderer() { + for( int i = 0; i <= CountryComboBox.countryList.length - 1; i++) { + countryMap.put(CountryComboBox.countryList[i][1],CountryComboBox.countryList[i][0]); + } + } + + @Override + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { + JLabel label = (JLabel)super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); + if(table.convertColumnIndexToView(0) == column) { + label.setToolTipText(countryMap.get((String)value)); + label.setIcon(getCountryFlagIcon((String)value)); + label.setText(""); + } + return label; + } + + private ImageIcon getCountryFlagIcon(String countryCode) { + ImageIcon flagIcon = flagIconCache.get(countryCode); + if (flagIcon == null) { + flagIcon = new javax.swing.ImageIcon(getClass().getResource("/flags/" + countryCode + (countryCode.endsWith(".png") ? "" :".png"))); + if (flagIcon.getImage() == null) { + logger.warn("Country flag resource not found: " + countryCode); + } else { + flagIconCache.put(countryCode, flagIcon); + } + } + return flagIcon; + } +} diff --git a/Mage.Client/src/main/java/mage/client/util/sets/ConstructedFormats.java b/Mage.Client/src/main/java/mage/client/util/sets/ConstructedFormats.java index 5cd0fe2b2b0..81bc28210b6 100644 --- a/Mage.Client/src/main/java/mage/client/util/sets/ConstructedFormats.java +++ b/Mage.Client/src/main/java/mage/client/util/sets/ConstructedFormats.java @@ -29,7 +29,7 @@ public class ConstructedFormats { public static final String MODERN = "- Modern"; private static final Map> underlyingSetCodesPerFormat = new HashMap<>(); - private static final List formats = new ArrayList(); + private static final List formats = new ArrayList<>(); private ConstructedFormats() { } @@ -59,7 +59,7 @@ public class ConstructedFormats { else { cutoff = new GregorianCalendar(calendar.get(Calendar.YEAR) - 2, Calendar.SEPTEMBER, 1); } - final Map expansionInfo = new HashMap(); + final Map expansionInfo = new HashMap<>(); for (ExpansionInfo set : ExpansionRepository.instance.getAll()) { expansionInfo.put(set.getName(), set); formats.add(set.getName()); diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/images/ImageCache.java b/Mage.Client/src/main/java/org/mage/plugins/card/images/ImageCache.java index 08cb77829f1..33cbb1a7dbe 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/images/ImageCache.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/images/ImageCache.java @@ -27,11 +27,11 @@ import org.mage.plugins.card.utils.CardImageUtils; * This class stores ALL card images in a cache with soft values. this means * that the images may be garbage collected when they are not needed any more, but will * be kept as long as possible. - * + * * Key format: "####" - * + * * where param is: - * + * *
    *
  • #Normal: request for unrotated image
  • *
  • #Tapped: request for rotated image
  • @@ -56,7 +56,7 @@ public class ImageCache { @Override public BufferedImage apply(String key) { try { - + boolean usesVariousArt = false; if (key.endsWith("#usesVariousArt")) { usesVariousArt = true; @@ -111,7 +111,7 @@ public class ImageCache { } catch(Exception ex) { exists = false; } - } + } if (exists) { log.debug("loading thumbnail for " + key + ", path="+thumbnailPath); return loadImage(thumbnailFile); @@ -150,7 +150,7 @@ public class ImageCache { return null; } TFile file = getTFile(path); - return loadImage(file); + return loadImage(file); } public static BufferedImage getManifestImage() { @@ -159,7 +159,7 @@ public class ImageCache { String path = CardImageUtils.generateTokenImagePath(info); if (path == null) { return null; - } + } TFile file = getTFile(path); return loadImage(file); } @@ -219,7 +219,7 @@ public class ImageCache { private static BufferedImage getImage(String key) { try { BufferedImage image = imageCache.get(key); - return image; + return image; } catch (NullPointerException ex) { // unfortunately NullOutputException, thrown when apply() returns // null, is not public @@ -261,7 +261,7 @@ public class ImageCache { /** * Load image from file - * + * * @param file * file to load image from * @return {@link BufferedImage} @@ -298,6 +298,7 @@ public class ImageCache { } } catch (IOException e) { log.error(e,e); + imageFile.delete(); } return image; } @@ -382,7 +383,7 @@ public class ImageCache { return getFullSizeImage(original, scale); } - + public static TFile getTFile(String path) { try { TFile file = new TFile(path); @@ -390,6 +391,6 @@ public class ImageCache { } catch (NullPointerException ex) { log.warn("Imagefile does not exist: " + path); } - return null; + return null; } } diff --git a/Mage.Client/src/main/resources/image.url.properties b/Mage.Client/src/main/resources/image.url.properties index 7ba6f59ee2e..21a5556cc22 100644 --- a/Mage.Client/src/main/resources/image.url.properties +++ b/Mage.Client/src/main/resources/image.url.properties @@ -64,6 +64,6 @@ ddd=gvl unh=uh dde=pvc # Remove setname as soon as the images can be downloaded -ignore.urls=TOK,MMB,ORI +ignore.urls=TOK,MMB # sets ordered by release time (newest goes first) token.lookup.order=TPR,MPRP,DD3,DDO,ORI,MMB,PTC,DTK,FRF,KTK,M15,VMA,CNS,JOU,BNG,THS,DDL,M14,MMA,DGM,GTC,RTR,M13,AVR,DDI,DKA,ISD,M12,NPH,MBS,SOM,M11,ROE,DDE,WWK,ZEN,M10,GVL,ARB,DVD,CFX,JVC,ALA,EVE,SHM,EVG,MOR,LRW,10E,CLS,CHK,GRC \ No newline at end of file diff --git a/Mage.Common/pom.xml b/Mage.Common/pom.xml index 4fb50ddd530..e804b457548 100644 --- a/Mage.Common/pom.xml +++ b/Mage.Common/pom.xml @@ -7,7 +7,7 @@ org.mage mage-root - 1.4.0 + 1.4.1 mage-common diff --git a/Mage.Common/src/mage/remote/Connection.java b/Mage.Common/src/mage/remote/Connection.java index 21e51faf794..e8337feacde 100644 --- a/Mage.Common/src/mage/remote/Connection.java +++ b/Mage.Common/src/mage/remote/Connection.java @@ -35,6 +35,7 @@ import java.net.NetworkInterface; import java.net.SocketException; import java.util.Enumeration; import mage.players.net.UserSkipPrioritySteps; +import mage.view.UserDataView; /** * @@ -54,12 +55,14 @@ public class Connection { private int clientCardDatabaseVersion; private boolean forceDBComparison; - private int avatarId; - private boolean showAbilityPickerForced; - private boolean allowRequestShowHandCards; - private boolean confirmEmptyManaPool; - private String flagName; - private UserSkipPrioritySteps userSkipPrioritySteps; + private UserDataView userData; + +// private int avatarId; +// private boolean showAbilityPickerForced; +// private boolean allowRequestShowHandCards; +// private boolean confirmEmptyManaPool; +// private String flagName; +// private UserSkipPrioritySteps userSkipPrioritySteps; private static final String serialization = "?serializationtype=jboss"; private static final String transport = "bisocket"; @@ -221,45 +224,12 @@ public class Connection { return null; } - public int getAvatarId() { - return avatarId; - } - - public void setAvatarId(int avatarId) { - this.avatarId = avatarId; - } - - public boolean isShowAbilityPickerForced() { - return showAbilityPickerForced; - } - - public void setShowAbilityPickerForced(boolean showAbilityPickerForced) { - this.showAbilityPickerForced = showAbilityPickerForced; - } - - public boolean allowRequestShowHandCards() { - return allowRequestShowHandCards; - } - - public void setAllowRequestShowHandCards(boolean allowRequestShowHandCards) { - this.allowRequestShowHandCards = allowRequestShowHandCards; - } - - public boolean confirmEmptyManaPool() { - return confirmEmptyManaPool; - } - - public void setConfirmEmptyManaPool(boolean confirmEmptyManaPool) { - this.confirmEmptyManaPool = confirmEmptyManaPool; + public void setUserData(UserDataView userData) { + this.userData= userData; } - - public UserSkipPrioritySteps getUserSkipPrioritySteps() { - return userSkipPrioritySteps; - } - - public void setUserSkipPrioritySteps(UserSkipPrioritySteps userSkipPrioritySteps) { - this.userSkipPrioritySteps = userSkipPrioritySteps; + public UserDataView getUserData() { + return userData; } public boolean isForceDBComparison() { @@ -269,13 +239,4 @@ public class Connection { public void setForceDBComparison(boolean forceDBComparison) { this.forceDBComparison = forceDBComparison; } - - public String getFlagName() { - return flagName; - } - - public void setFlagName(String flagName) { - this.flagName = flagName; - } - } diff --git a/Mage.Common/src/mage/remote/SessionImpl.java b/Mage.Common/src/mage/remote/SessionImpl.java index 2bcc00dfb39..a5bf686b3bc 100644 --- a/Mage.Common/src/mage/remote/SessionImpl.java +++ b/Mage.Common/src/mage/remote/SessionImpl.java @@ -275,16 +275,10 @@ public class SessionImpl implements Session { this.sessionId = callbackClient.getSessionId(); boolean registerResult; if (connection.getPassword() == null) { - UserDataView userDataView = new UserDataView(connection.getAvatarId(), - connection.isShowAbilityPickerForced(), - connection.allowRequestShowHandCards(), - connection.confirmEmptyManaPool(), - connection.getUserSkipPrioritySteps(), - connection.getFlagName()); // for backward compatibility. don't remove twice call - first one does nothing but for version checking registerResult = server.registerClient(connection.getUsername(), sessionId, client.getVersion()); if (registerResult) { - server.setUserData(connection.getUsername(), sessionId, userDataView); + server.setUserData(connection.getUsername(), sessionId, connection.getUserData()); } } else { registerResult = server.registerAdmin(connection.getPassword(), sessionId, client.getVersion()); @@ -1397,11 +1391,10 @@ public class SessionImpl implements Session { } @Override - public boolean updatePreferencesForServer(int avatarId, boolean showAbilityPickerForced, boolean allowRequestShowHandCards, boolean confirmEmptyManaPool, UserSkipPrioritySteps userSkipPrioritySteps, String flagName) { + public boolean updatePreferencesForServer(UserDataView userData) { try { if (isConnected()) { - UserDataView userDataView = new UserDataView(avatarId, showAbilityPickerForced, allowRequestShowHandCards, confirmEmptyManaPool, userSkipPrioritySteps, flagName); - server.setUserData(connection.getUsername(), sessionId, userDataView); + server.setUserData(connection.getUsername(), sessionId, userData); } return true; } catch (MageException ex) { diff --git a/Mage.Common/src/mage/remote/interfaces/ClientData.java b/Mage.Common/src/mage/remote/interfaces/ClientData.java index 2a9fe56b384..7b4f248d934 100644 --- a/Mage.Common/src/mage/remote/interfaces/ClientData.java +++ b/Mage.Common/src/mage/remote/interfaces/ClientData.java @@ -27,7 +27,7 @@ */ package mage.remote.interfaces; -import mage.players.net.UserSkipPrioritySteps; +import mage.view.UserDataView; /** * @author noxx @@ -36,5 +36,5 @@ public interface ClientData { String getUserName(); - boolean updatePreferencesForServer(int avatarId, boolean showAbilityPickerForced, boolean allowRequestShowHandCards, boolean confirmEmptyManaPool, UserSkipPrioritySteps userSkipPrioritySteps, String flagName); + boolean updatePreferencesForServer(UserDataView userData); } diff --git a/Mage.Common/src/mage/utils/MageVersion.java b/Mage.Common/src/mage/utils/MageVersion.java index 7c4f67d2dfb..5a9acc7466c 100644 --- a/Mage.Common/src/mage/utils/MageVersion.java +++ b/Mage.Common/src/mage/utils/MageVersion.java @@ -41,7 +41,7 @@ public class MageVersion implements Serializable, Comparable { */ public final static int MAGE_VERSION_MAJOR = 1; public final static int MAGE_VERSION_MINOR = 4; - public final static int MAGE_VERSION_PATCH = 0; + public final static int MAGE_VERSION_PATCH = 1; public final static String MAGE_VERSION_MINOR_PATCH = "v2"; public final static String MAGE_VERSION_INFO = ""; diff --git a/Mage.Common/src/mage/view/PlayerView.java b/Mage.Common/src/mage/view/PlayerView.java index 3e9eb437d81..487e84afd26 100644 --- a/Mage.Common/src/mage/view/PlayerView.java +++ b/Mage.Common/src/mage/view/PlayerView.java @@ -115,7 +115,7 @@ public class PlayerView implements Serializable { if (player.getUserData() != null) { this.userDataView = new UserDataView(player.getUserData()); } else { - this.userDataView = new UserDataView(0, false, false, true, null,"world.png"); + this.userDataView = UserDataView.getDefaultUserDataView(); } for (CommandObject commandObject : game.getState().getCommand()) { diff --git a/Mage.Common/src/mage/view/UserDataView.java b/Mage.Common/src/mage/view/UserDataView.java index 9bf65b6f2e7..40171cbe315 100644 --- a/Mage.Common/src/mage/view/UserDataView.java +++ b/Mage.Common/src/mage/view/UserDataView.java @@ -18,15 +18,22 @@ public class UserDataView implements Serializable { protected boolean confirmEmptyManaPool; protected UserSkipPrioritySteps userSkipPrioritySteps; String flagName; + protected boolean askMoveToGraveOrder; + static UserDataView getDefaultUserDataView() { + return new UserDataView(0, false, false, true, null,"world.png", false); + } + public UserDataView(int avatarId, boolean showAbilityPickerForced, boolean allowRequestShowHandCards, - boolean confirmEmptyManaPool, UserSkipPrioritySteps userSkipPrioritySteps, String flagName) { + boolean confirmEmptyManaPool, UserSkipPrioritySteps userSkipPrioritySteps, String flagName, boolean askMoveToGraveOrder) { this.avatarId = avatarId; this.showAbilityPickerForced = showAbilityPickerForced; this.allowRequestShowHandCards = allowRequestShowHandCards; this.userSkipPrioritySteps = userSkipPrioritySteps; this.confirmEmptyManaPool = confirmEmptyManaPool; this.flagName = flagName; + this.askMoveToGraveOrder = askMoveToGraveOrder; + } public UserDataView(UserData userData) { @@ -37,6 +44,7 @@ public class UserDataView implements Serializable { this.userSkipPrioritySteps = userData.getUserSkipPrioritySteps(); this.confirmEmptyManaPool = userData.confirmEmptyManaPool(); this.flagName = userData.getFlagName(); + this.askMoveToGraveOrder = userData.askMoveToGraveOrder(); } public int getAvatarId() { @@ -62,5 +70,9 @@ public class UserDataView implements Serializable { public String getFlagName() { return flagName; } + + public boolean askMoveToGraveOrder() { + return askMoveToGraveOrder; + } } diff --git a/Mage.Plugins/Mage.Counter.Plugin/pom.xml b/Mage.Plugins/Mage.Counter.Plugin/pom.xml index a17a51e3693..569f1399beb 100644 --- a/Mage.Plugins/Mage.Counter.Plugin/pom.xml +++ b/Mage.Plugins/Mage.Counter.Plugin/pom.xml @@ -7,7 +7,7 @@ org.mage mage-plugins - 1.4.0 + 1.4.1 mage-counter-plugin diff --git a/Mage.Plugins/Mage.Theme.Plugin/pom.xml b/Mage.Plugins/Mage.Theme.Plugin/pom.xml index e03b2cd956f..053171cd390 100644 --- a/Mage.Plugins/Mage.Theme.Plugin/pom.xml +++ b/Mage.Plugins/Mage.Theme.Plugin/pom.xml @@ -6,7 +6,7 @@ org.mage mage-plugins - 1.4.0 + 1.4.1 mage-theme-plugin @@ -29,7 +29,7 @@ ${project.groupId} mage-client - 1.4.0 + 1.4.1 diff --git a/Mage.Plugins/pom.xml b/Mage.Plugins/pom.xml index 082e3e65096..cc48ed5c7be 100644 --- a/Mage.Plugins/pom.xml +++ b/Mage.Plugins/pom.xml @@ -7,7 +7,7 @@ org.mage mage-root - 1.4.0 + 1.4.1 mage-plugins diff --git a/Mage.Server.Console/pom.xml b/Mage.Server.Console/pom.xml index 89711b9d918..2522cc1d116 100644 --- a/Mage.Server.Console/pom.xml +++ b/Mage.Server.Console/pom.xml @@ -6,7 +6,7 @@ org.mage mage-root - 1.4.0 + 1.4.1 org.mage diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/pom.xml b/Mage.Server.Plugins/Mage.Deck.Constructed/pom.xml index 17ed6709e3e..eeb227fab7b 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/pom.xml +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/pom.xml @@ -7,7 +7,7 @@ org.mage mage-server-plugins - 1.4.0 + 1.4.1 mage-deck-constructed diff --git a/Mage.Server.Plugins/Mage.Deck.Limited/pom.xml b/Mage.Server.Plugins/Mage.Deck.Limited/pom.xml index aaf2a0c6c0a..5ba54ada61d 100644 --- a/Mage.Server.Plugins/Mage.Deck.Limited/pom.xml +++ b/Mage.Server.Plugins/Mage.Deck.Limited/pom.xml @@ -7,7 +7,7 @@ org.mage mage-server-plugins - 1.4.0 + 1.4.1 mage-deck-limited diff --git a/Mage.Server.Plugins/Mage.Game.CommanderDuel/pom.xml b/Mage.Server.Plugins/Mage.Game.CommanderDuel/pom.xml index 198839d0f23..21d3ecfae31 100644 --- a/Mage.Server.Plugins/Mage.Game.CommanderDuel/pom.xml +++ b/Mage.Server.Plugins/Mage.Game.CommanderDuel/pom.xml @@ -7,7 +7,7 @@ org.mage mage-server-plugins - 1.4.0 + 1.4.1 mage-game-commanderduel diff --git a/Mage.Server.Plugins/Mage.Game.CommanderFreeForAll/pom.xml b/Mage.Server.Plugins/Mage.Game.CommanderFreeForAll/pom.xml index d83276362cc..f0fa53feb71 100644 --- a/Mage.Server.Plugins/Mage.Game.CommanderFreeForAll/pom.xml +++ b/Mage.Server.Plugins/Mage.Game.CommanderFreeForAll/pom.xml @@ -6,7 +6,7 @@ org.mage mage-server-plugins - 1.4.0 + 1.4.1 mage-game-commanderfreeforall diff --git a/Mage.Server.Plugins/Mage.Game.FreeForAll/pom.xml b/Mage.Server.Plugins/Mage.Game.FreeForAll/pom.xml index d44c53517b5..79201f719e6 100644 --- a/Mage.Server.Plugins/Mage.Game.FreeForAll/pom.xml +++ b/Mage.Server.Plugins/Mage.Game.FreeForAll/pom.xml @@ -7,7 +7,7 @@ org.mage mage-server-plugins - 1.4.0 + 1.4.1 mage-game-freeforall diff --git a/Mage.Server.Plugins/Mage.Game.TinyLeadersDuel/pom.xml b/Mage.Server.Plugins/Mage.Game.TinyLeadersDuel/pom.xml index 3ed7020bf77..995624a110d 100644 --- a/Mage.Server.Plugins/Mage.Game.TinyLeadersDuel/pom.xml +++ b/Mage.Server.Plugins/Mage.Game.TinyLeadersDuel/pom.xml @@ -7,7 +7,7 @@ org.mage mage-server-plugins - 1.4.0 + 1.4.1 mage-game-tinyleadersduel diff --git a/Mage.Server.Plugins/Mage.Game.TwoPlayerDuel/pom.xml b/Mage.Server.Plugins/Mage.Game.TwoPlayerDuel/pom.xml index fe7e465d170..822af7beeff 100644 --- a/Mage.Server.Plugins/Mage.Game.TwoPlayerDuel/pom.xml +++ b/Mage.Server.Plugins/Mage.Game.TwoPlayerDuel/pom.xml @@ -7,7 +7,7 @@ org.mage mage-server-plugins - 1.4.0 + 1.4.1 mage-game-twoplayerduel diff --git a/Mage.Server.Plugins/Mage.Player.AI.DraftBot/pom.xml b/Mage.Server.Plugins/Mage.Player.AI.DraftBot/pom.xml index 13e94e25e60..eb5254b9266 100644 --- a/Mage.Server.Plugins/Mage.Player.AI.DraftBot/pom.xml +++ b/Mage.Server.Plugins/Mage.Player.AI.DraftBot/pom.xml @@ -7,7 +7,7 @@ org.mage mage-server-plugins - 1.4.0 + 1.4.1 mage-player-ai-draftbot diff --git a/Mage.Server.Plugins/Mage.Player.AI.MA/pom.xml b/Mage.Server.Plugins/Mage.Player.AI.MA/pom.xml index 8bbe618537c..d905d12ec1b 100644 --- a/Mage.Server.Plugins/Mage.Player.AI.MA/pom.xml +++ b/Mage.Server.Plugins/Mage.Player.AI.MA/pom.xml @@ -7,7 +7,7 @@ org.mage mage-server-plugins - 1.4.0 + 1.4.1 mage-player-ai-ma diff --git a/Mage.Server.Plugins/Mage.Player.AI/pom.xml b/Mage.Server.Plugins/Mage.Player.AI/pom.xml index d4308dc2e4f..6c90d7e1d56 100644 --- a/Mage.Server.Plugins/Mage.Player.AI/pom.xml +++ b/Mage.Server.Plugins/Mage.Player.AI/pom.xml @@ -7,7 +7,7 @@ org.mage mage-server-plugins - 1.4.0 + 1.4.1 mage-player-ai diff --git a/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java b/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java index e10917f2746..7daf4cb517b 100644 --- a/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java +++ b/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java @@ -175,7 +175,7 @@ public class ComputerPlayer extends PlayerImpl implements Player { public ComputerPlayer(String name, RangeOfInfluence range) { super(name, range); human = false; - userData = new UserData(UserGroup.COMPUTER, 64, false, true, false, null, "Computer.png"); + userData = new UserData(UserGroup.COMPUTER, 64, false, true, false, null, "Computer.png", false); pickedCards = new ArrayList<>(); } diff --git a/Mage.Server.Plugins/Mage.Player.AIMCTS/pom.xml b/Mage.Server.Plugins/Mage.Player.AIMCTS/pom.xml index 86f8bf80990..ef53791b090 100644 --- a/Mage.Server.Plugins/Mage.Player.AIMCTS/pom.xml +++ b/Mage.Server.Plugins/Mage.Player.AIMCTS/pom.xml @@ -7,7 +7,7 @@ org.mage mage-server-plugins - 1.4.0 + 1.4.1 mage-player-ai-mcts diff --git a/Mage.Server.Plugins/Mage.Player.AIMinimax/pom.xml b/Mage.Server.Plugins/Mage.Player.AIMinimax/pom.xml index 5223670dca0..7f31cb06928 100644 --- a/Mage.Server.Plugins/Mage.Player.AIMinimax/pom.xml +++ b/Mage.Server.Plugins/Mage.Player.AIMinimax/pom.xml @@ -7,7 +7,7 @@ org.mage mage-server-plugins - 1.4.0 + 1.4.1 mage-player-aiminimax diff --git a/Mage.Server.Plugins/Mage.Player.Human/pom.xml b/Mage.Server.Plugins/Mage.Player.Human/pom.xml index 9e7c35f9d90..d76184bfd64 100644 --- a/Mage.Server.Plugins/Mage.Player.Human/pom.xml +++ b/Mage.Server.Plugins/Mage.Player.Human/pom.xml @@ -7,7 +7,7 @@ org.mage mage-server-plugins - 1.4.0 + 1.4.1 mage-player-human diff --git a/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/pom.xml b/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/pom.xml index a54a82d6f56..897b17155a2 100644 --- a/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/pom.xml +++ b/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/pom.xml @@ -7,7 +7,7 @@ org.mage mage-server-plugins - 1.4.0 + 1.4.1 mage-tournament-boosterdraft diff --git a/Mage.Server.Plugins/Mage.Tournament.Constructed/pom.xml b/Mage.Server.Plugins/Mage.Tournament.Constructed/pom.xml index 272aa4bdf8f..a4c096d5073 100644 --- a/Mage.Server.Plugins/Mage.Tournament.Constructed/pom.xml +++ b/Mage.Server.Plugins/Mage.Tournament.Constructed/pom.xml @@ -7,7 +7,7 @@ org.mage mage-server-plugins - 1.4.0 + 1.4.1 mage-tournament-constructed diff --git a/Mage.Server.Plugins/Mage.Tournament.Sealed/pom.xml b/Mage.Server.Plugins/Mage.Tournament.Sealed/pom.xml index 1727046d60a..37b534066be 100644 --- a/Mage.Server.Plugins/Mage.Tournament.Sealed/pom.xml +++ b/Mage.Server.Plugins/Mage.Tournament.Sealed/pom.xml @@ -7,7 +7,7 @@ org.mage mage-server-plugins - 1.4.0 + 1.4.1 mage-tournament-sealed diff --git a/Mage.Server.Plugins/pom.xml b/Mage.Server.Plugins/pom.xml index eb1522dccf4..6aa5662ff10 100644 --- a/Mage.Server.Plugins/pom.xml +++ b/Mage.Server.Plugins/pom.xml @@ -6,7 +6,7 @@ org.mage mage-root - 1.4.0 + 1.4.1 mage-server-plugins diff --git a/Mage.Server/pom.xml b/Mage.Server/pom.xml index 8ca875326bd..ecc375c12d3 100644 --- a/Mage.Server/pom.xml +++ b/Mage.Server/pom.xml @@ -6,7 +6,7 @@ org.mage mage-root - 1.4.0 + 1.4.1 mage-server diff --git a/Mage.Server/release/server.msg.txt b/Mage.Server/release/server.msg.txt index c6bb6c677ec..f9309549e1d 100644 --- a/Mage.Server/release/server.msg.txt +++ b/Mage.Server/release/server.msg.txt @@ -1,4 +1,4 @@ -Welcome! You are playing XMage version 1.3.0 +Welcome! You are playing XMage version 1.4.1 Find what was changed since previous versions on project Wiki https://github.com/magefree/mage/wiki Contact us on the XMAGE board of http://www.slightlymagic.net/forum/viewforum.php?f=70 for bug reports or enhancement requests. -Download newest version from http://XMage.info. \ No newline at end of file +Download newest version from http://XMage.de \ No newline at end of file diff --git a/Mage.Server/server.msg.txt b/Mage.Server/server.msg.txt index 17ea51ac05a..7ef6a5c492c 100644 --- a/Mage.Server/server.msg.txt +++ b/Mage.Server/server.msg.txt @@ -2,5 +2,5 @@ HotKeys: Alt+E - Enlarge card image Wheel zoom in/out - Enlarge card image F4 - end current turn, response to stack F9 - skip all opponents' turns, no response to stack -Welcome! You are playing Mage version 1.4.0 +Welcome! You are playing Mage version 1.4.1 Contact us on www.slightlymagic.net \ No newline at end of file diff --git a/Mage.Server/src/main/java/mage/server/Session.java b/Mage.Server/src/main/java/mage/server/Session.java index 2560f43da87..5bfe452d51c 100644 --- a/Mage.Server/src/main/java/mage/server/Session.java +++ b/Mage.Server/src/main/java/mage/server/Session.java @@ -142,7 +142,7 @@ public class Session { if (user == null) { user = UserManager.getInstance().findUser("Admin"); } - user.setUserData(new UserData(UserGroup.ADMIN, 0, false, false, false, null, "world.png")); + user.setUserData(new UserData(UserGroup.ADMIN, 0, false, false, false, null, "world.png", false)); if (!UserManager.getInstance().connectToSession(sessionId, user.getId())) { logger.info("Error connecting Admin!"); } @@ -157,7 +157,7 @@ public class Session { userData = new UserData(UserGroup.PLAYER, userDataView.getAvatarId(), userDataView.isShowAbilityPickerForced(), userDataView.allowRequestShowHandCards(), userDataView.confirmEmptyManaPool(), userDataView.getUserSkipPrioritySteps(), - userDataView.getFlagName()); + userDataView.getFlagName(), userDataView.askMoveToGraveOrder()); user.setUserData(userData); } else { if (userDataView.getAvatarId() == 51) { // Update special avatar if first avatar is selected @@ -168,6 +168,7 @@ public class Session { userData.setAllowRequestShowHandCards(userDataView.allowRequestShowHandCards()); userData.setUserSkipPrioritySteps(userDataView.getUserSkipPrioritySteps()); userData.setConfirmEmptyManaPool(userDataView.confirmEmptyManaPool()); + userData.setAskMoveToGraveOrder(userDataView.askMoveToGraveOrder()); } return true; } diff --git a/Mage.Server/src/main/java/mage/server/game/GameController.java b/Mage.Server/src/main/java/mage/server/game/GameController.java index 5f541cc186b..44f72a2a2a1 100644 --- a/Mage.Server/src/main/java/mage/server/game/GameController.java +++ b/Mage.Server/src/main/java/mage/server/game/GameController.java @@ -602,8 +602,8 @@ public class GameController implements GameCallback { if (grantingPlayer.isHuman()) { GameSessionPlayer gameSession = gameSessions.get(userIdGranter); if (gameSession != null) { - UUID requestingPlayer = getPlayerId(userIdRequester); - if (requestingPlayer == null || !requestingPlayer.equals(grantingPlayer.getId())) { // don't allow request for your own cards + UUID requestingPlayerId = getPlayerId(userIdRequester); + if (requestingPlayerId == null || !requestingPlayerId.equals(grantingPlayer.getId())) { // don't allow request for your own cards if (grantingPlayer.isRequestToShowHandCardsAllowed()) { gameSession.requestPermissionToSeeHandCards(userIdRequester); } else { diff --git a/Mage.Sets/pom.xml b/Mage.Sets/pom.xml index 6974f845d0f..e5beb76c890 100644 --- a/Mage.Sets/pom.xml +++ b/Mage.Sets/pom.xml @@ -7,7 +7,7 @@ org.mage mage-root - 1.4.0 + 1.4.1 org.mage diff --git a/Mage.Sets/src/mage/sets/alliances/YavimayaAnts.java b/Mage.Sets/src/mage/sets/alliances/YavimayaAnts.java new file mode 100644 index 00000000000..db233aee603 --- /dev/null +++ b/Mage.Sets/src/mage/sets/alliances/YavimayaAnts.java @@ -0,0 +1,70 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.alliances; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.keyword.TrampleAbility; +import mage.abilities.keyword.HasteAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.keyword.CumulativeUpkeepAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LoneFox + + */ +public class YavimayaAnts extends CardImpl { + + public YavimayaAnts(UUID ownerId) { + super(ownerId, 93, "Yavimaya Ants", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{G}{G}"); + this.expansionSetCode = "ALL"; + this.subtype.add("Insect"); + this.power = new MageInt(5); + this.toughness = new MageInt(1); + + // Trample + this.addAbility(TrampleAbility.getInstance()); + // Haste + this.addAbility(HasteAbility.getInstance()); + // Cumulative upkeep {G}{G} + this.addAbility(new CumulativeUpkeepAbility(new ManaCostsImpl("{G}{G}"))); + } + + public YavimayaAnts(final YavimayaAnts card) { + super(card); + } + + @Override + public YavimayaAnts copy() { + return new YavimayaAnts(this); + } +} diff --git a/Mage.Sets/src/mage/sets/arabiannights/ErgRaiders.java b/Mage.Sets/src/mage/sets/arabiannights/ErgRaiders.java new file mode 100644 index 00000000000..840710323ef --- /dev/null +++ b/Mage.Sets/src/mage/sets/arabiannights/ErgRaiders.java @@ -0,0 +1,53 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.arabiannights; + +import java.util.UUID; + +/** + * + * @author LoneFox + + */ +public class ErgRaiders extends mage.sets.fourthedition.ErgRaiders { + + public ErgRaiders(UUID ownerId) { + super(ownerId); + this.cardNumber = 3; + this.expansionSetCode = "ARN"; + } + + public ErgRaiders(final ErgRaiders card) { + super(card); + } + + @Override + public ErgRaiders copy() { + return new ErgRaiders(this); + } +} diff --git a/Mage.Sets/src/mage/sets/arabiannights/HasranOgress.java b/Mage.Sets/src/mage/sets/arabiannights/HasranOgress.java new file mode 100644 index 00000000000..767c07fa5c3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/arabiannights/HasranOgress.java @@ -0,0 +1,53 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.arabiannights; + +import java.util.UUID; + +/** + * + * @author LoneFox + + */ +public class HasranOgress extends mage.sets.masterseditioniv.HasranOgress { + + public HasranOgress(UUID ownerId) { + super(ownerId); + this.cardNumber = 6; + this.expansionSetCode = "ARN"; + } + + public HasranOgress(final HasranOgress card) { + super(card); + } + + @Override + public HasranOgress copy() { + return new HasranOgress(this); + } +} diff --git a/Mage.Sets/src/mage/sets/coldsnap/WhiteShieldCrusader.java b/Mage.Sets/src/mage/sets/coldsnap/WhiteShieldCrusader.java new file mode 100644 index 00000000000..72f0081f091 --- /dev/null +++ b/Mage.Sets/src/mage/sets/coldsnap/WhiteShieldCrusader.java @@ -0,0 +1,86 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.coldsnap; + +import java.util.UUID; +import mage.MageInt; +import mage.ObjectColor; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.ProtectionAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.filter.predicate.mageobject.ColorPredicate; + +/** + * + * @author LoneFox + + */ +public class WhiteShieldCrusader extends CardImpl { + + private static final FilterCard filter = new FilterCard("Black"); + + static { + filter.add(new ColorPredicate(ObjectColor.BLACK)); + } + + public WhiteShieldCrusader(UUID ownerId) { + super(ownerId, 24, "White Shield Crusader", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{W}{W}"); + this.expansionSetCode = "CSP"; + this.subtype.add("Human"); + this.subtype.add("Knight"); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // Protection from black + this.addAbility(new ProtectionAbility(filter)); + + // {W}: White Shield Crusader gains flying until end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilitySourceEffect(FlyingAbility.getInstance(), Duration.EndOfTurn), new ManaCostsImpl("{W}"))); + + // {W}{W}: White Shield Crusader gets +1/+0 until end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1,0, Duration.EndOfTurn), new ManaCostsImpl("{W}{W}"))); + } + + public WhiteShieldCrusader(final WhiteShieldCrusader card) { + super(card); + } + + @Override + public WhiteShieldCrusader copy() { + return new WhiteShieldCrusader(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander/FalseProphet.java b/Mage.Sets/src/mage/sets/commander/FalseProphet.java new file mode 100644 index 00000000000..02e9f79fb51 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander/FalseProphet.java @@ -0,0 +1,53 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.commander; + +import java.util.UUID; + +/** + * + * @author LoneFox + + */ +public class FalseProphet extends mage.sets.urzasdestiny.FalseProphet { + + public FalseProphet(UUID ownerId) { + super(ownerId); + this.cardNumber = 13; + this.expansionSetCode = "CMD"; + } + + public FalseProphet(final FalseProphet card) { + super(card); + } + + @Override + public FalseProphet copy() { + return new FalseProphet(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander/TheMimeoplasm.java b/Mage.Sets/src/mage/sets/commander/TheMimeoplasm.java index de4556bc487..0397ca4cff8 100644 --- a/Mage.Sets/src/mage/sets/commander/TheMimeoplasm.java +++ b/Mage.Sets/src/mage/sets/commander/TheMimeoplasm.java @@ -36,6 +36,8 @@ import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.CopyEffect; import mage.cards.Card; import mage.cards.CardImpl; +import mage.cards.Cards; +import mage.cards.CardsImpl; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Outcome; @@ -94,31 +96,33 @@ class TheMimeoplasmEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - Player player = game.getPlayer(source.getControllerId()); + Player controller = game.getPlayer(source.getControllerId()); Permanent permanent = game.getPermanent(source.getSourceId()); - if (player != null && permanent != null) { + if (controller != null && permanent != null) { if (new CardsInAllGraveyardsCount(new FilterCreatureCard()).calculate(game, source, this) >= 2) { - if (player.chooseUse(Outcome.Benefit, "Do you want to exile two creature cards from graveyards?", game)) { + if (controller.chooseUse(Outcome.Benefit, "Do you want to exile two creature cards from graveyards?", game)) { TargetCardInGraveyard targetCopy = new TargetCardInGraveyard(new FilterCreatureCard("creature card to become a copy of")); - TargetCardInGraveyard targetCounters = new TargetCardInGraveyard(new FilterCreatureCard("creature card for additional +1/+1 counters")); - if (player.choose(Outcome.Copy, targetCopy, source.getSourceId(), game)) { + TargetCardInGraveyard targetCounters = new TargetCardInGraveyard(new FilterCreatureCard("creature card to determine amount of additional +1/+1 counters")); + if (controller.choose(Outcome.Copy, targetCopy, source.getSourceId(), game)) { Card cardToCopy = game.getCard(targetCopy.getFirstTarget()); if (cardToCopy != null) { - player.moveCardToExileWithInfo(cardToCopy, null, "", source.getSourceId(), game, Zone.GRAVEYARD, true); - if (player.choose(Outcome.Copy, targetCounters, source.getSourceId(), game)) { + if (controller.choose(Outcome.Copy, targetCounters, source.getSourceId(), game)) { Card cardForCounters = game.getCard(targetCounters.getFirstTarget()); if (cardForCounters != null) { - player.moveCardToExileWithInfo(cardForCounters, null, "", source.getSourceId(), game, Zone.GRAVEYARD, true); + Cards cardsToExile = new CardsImpl(); + cardsToExile.add(cardToCopy); + cardsToExile.add(cardForCounters); + controller.moveCards(cardsToExile, Zone.GRAVEYARD, Zone.EXILED, source, game); CopyEffect copyEffect = new CopyEffect(Duration.Custom, cardToCopy, source.getSourceId()); game.addEffect(copyEffect, source); permanent.addCounters(CounterType.P1P1.createInstance(cardForCounters.getPower().getValue()), game); - return true; } } } } } } + return true; } return false; } diff --git a/Mage.Sets/src/mage/sets/commander2013/NightSoil.java b/Mage.Sets/src/mage/sets/commander2013/NightSoil.java index b7e0c197361..b83edbc8648 100644 --- a/Mage.Sets/src/mage/sets/commander2013/NightSoil.java +++ b/Mage.Sets/src/mage/sets/commander2013/NightSoil.java @@ -33,7 +33,7 @@ import java.util.UUID; * * @author LevelX2 */ -public class NightSoil extends mage.sets.fallenempires.NightSoil { +public class NightSoil extends mage.sets.fallenempires.NightSoil1 { public NightSoil(UUID ownerId) { super(ownerId); diff --git a/Mage.Sets/src/mage/sets/commander2014/ZoeticCavern.java b/Mage.Sets/src/mage/sets/commander2014/ZoeticCavern.java index 6613499c77d..ed54e110b30 100644 --- a/Mage.Sets/src/mage/sets/commander2014/ZoeticCavern.java +++ b/Mage.Sets/src/mage/sets/commander2014/ZoeticCavern.java @@ -46,7 +46,7 @@ public class ZoeticCavern extends CardImpl { this.expansionSetCode = "C14"; // {T}: Add {1} to your mana pool. - this.addAbility(new ColorlessManaAbility()); + this.addAbility(new ColorlessManaAbility()); // Morph {2} this.addAbility(new MorphAbility(this, new ManaCostsImpl("{2}"))); } diff --git a/Mage.Sets/src/mage/sets/conflux/QuenchableFire.java b/Mage.Sets/src/mage/sets/conflux/QuenchableFire.java index 9b7f9cdaf37..7338637ae0e 100644 --- a/Mage.Sets/src/mage/sets/conflux/QuenchableFire.java +++ b/Mage.Sets/src/mage/sets/conflux/QuenchableFire.java @@ -29,6 +29,7 @@ package mage.sets.conflux; import java.util.UUID; +import mage.MageObject; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.Rarity; @@ -36,6 +37,7 @@ import mage.abilities.Ability; import mage.abilities.DelayedTriggeredAbility; import mage.abilities.SpecialAction; import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.RemoveDelayedTriggeredAbilityEffect; @@ -78,7 +80,8 @@ class QuenchableFireEffect extends OneShotEffect { public QuenchableFireEffect() { super(Outcome.Damage); - staticText = "{this} deals an additional 3 damage to that player at the beginning of your next upkeep step unless he or she pays {U} before that step"; + staticText = "{this} deals an additional 3 damage to that player at the beginning of your next upkeep step unless he or she pays {U} before that step." + + "
    Use the Special button to pay the {U} with a special action before the beginning of your next upkeep step."; } public QuenchableFireEffect(final QuenchableFireEffect effect) { @@ -92,22 +95,34 @@ class QuenchableFireEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - //create delayed triggered ability - QuenchableFireDelayedTriggeredAbility delayedAbility = new QuenchableFireDelayedTriggeredAbility(); - delayedAbility.setSourceId(source.getSourceId()); - delayedAbility.setControllerId(source.getControllerId()); - delayedAbility.setSourceObject(source.getSourceObject(game), game); - delayedAbility.getTargets().addAll(source.getTargets()); - game.addDelayedTriggeredAbility(delayedAbility); + MageObject sourceObject = source.getSourceObject(game); + if (sourceObject != null) { + + //create special action + QuenchableFireSpecialAction newAction = new QuenchableFireSpecialAction(); - //create special action - QuenchableFireSpecialAction newAction = new QuenchableFireSpecialAction(delayedAbility.getId()); - delayedAbility.setSpecialActionId(newAction.getId()); - newAction.setSourceId(source.getSourceId()); - newAction.setControllerId(source.getFirstTarget()); - newAction.getTargets().addAll(source.getTargets()); - game.getState().getSpecialActions().add(newAction); - return true; + //create delayed triggered ability + QuenchableFireDelayedTriggeredAbility delayedAbility = new QuenchableFireDelayedTriggeredAbility(); + delayedAbility.setSourceId(source.getSourceId()); + delayedAbility.setControllerId(source.getControllerId()); + delayedAbility.setSourceObject(sourceObject, game); + delayedAbility.getTargets().addAll(source.getTargets()); + delayedAbility.setSpecialActionId(newAction.getId()); + UUID delayedAbilityId = game.addDelayedTriggeredAbility(delayedAbility); + + // update special action + newAction.addCost(new ManaCostsImpl("{U}")); + Effect effect = new RemoveDelayedTriggeredAbilityEffect(delayedAbilityId); + newAction.addEffect(effect); + effect.setText(sourceObject.getIdName() + " - Pay {U} to remove the triggered ability that deals 3 damage to you at the beginning of your next upkeep step"); + newAction.addEffect(new RemoveSpecialActionEffect(newAction.getId())); + newAction.setSourceId(source.getSourceId()); + newAction.setControllerId(source.getFirstTarget()); + newAction.getTargets().addAll(source.getTargets()); + game.getState().getSpecialActions().add(newAction); + return true; + } + return false; } } @@ -151,11 +166,8 @@ class QuenchableFireDelayedTriggeredAbility extends DelayedTriggeredAbility { class QuenchableFireSpecialAction extends SpecialAction { - public QuenchableFireSpecialAction(UUID effectId) { + public QuenchableFireSpecialAction() { super(); - this.addCost(new ManaCostsImpl("{U}")); - this.addEffect(new RemoveDelayedTriggeredAbilityEffect(effectId)); - this.addEffect(new RemoveSpecialActionEffect(this.getId())); } public QuenchableFireSpecialAction(final QuenchableFireSpecialAction ability) { diff --git a/Mage.Sets/src/mage/sets/darksteel/NimAbomination.java b/Mage.Sets/src/mage/sets/darksteel/NimAbomination.java new file mode 100644 index 00000000000..d13bc0e2504 --- /dev/null +++ b/Mage.Sets/src/mage/sets/darksteel/NimAbomination.java @@ -0,0 +1,69 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.darksteel; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.BeginningOfEndStepTriggeredAbility; +import mage.abilities.condition.InvertCondition; +import mage.abilities.condition.common.SourceTappedCondition; +import mage.abilities.effects.common.LoseLifeSourceControllerEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; + +/** + * + * @author LoneFox + + */ +public class NimAbomination extends CardImpl { + + public NimAbomination(UUID ownerId) { + super(ownerId, 49, "Nim Abomination", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{B}"); + this.expansionSetCode = "DST"; + this.subtype.add("Zombie"); + this.power = new MageInt(3); + this.toughness = new MageInt(4); + + // At the beginning of your end step, if Nim Abomination is untapped, you lose 3 life. + this.addAbility(new BeginningOfEndStepTriggeredAbility(Zone.BATTLEFIELD, new LoseLifeSourceControllerEffect(3), + TargetController.YOU, new InvertCondition(new SourceTappedCondition()), false)); + } + + public NimAbomination(final NimAbomination card) { + super(card); + } + + @Override + public NimAbomination copy() { + return new NimAbomination(this); + } +} diff --git a/Mage.Sets/src/mage/sets/dissension/Drekavac.java b/Mage.Sets/src/mage/sets/dissension/Drekavac.java new file mode 100644 index 00000000000..e752a3ac8fa --- /dev/null +++ b/Mage.Sets/src/mage/sets/dissension/Drekavac.java @@ -0,0 +1,76 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.dissension; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.costs.common.DiscardTargetCost; +import mage.abilities.effects.common.SacrificeSourceUnlessPaysEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.FilterCard; +import mage.filter.common.FilterCreatureCard; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.target.common.TargetCardInHand; + +/** + * + * @author LoneFox + + */ +public class Drekavac extends CardImpl { + + private static final FilterCard filter = new FilterCard("noncreature card"); + + static { + filter.add(Predicates.not(new CardTypePredicate(CardType.CREATURE))); + } + + public Drekavac(UUID ownerId) { + super(ownerId, 43, "Drekavac", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{B}"); + this.expansionSetCode = "DIS"; + this.subtype.add("Beast"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // When Drekavac enters the battlefield, sacrifice it unless you discard a noncreature card. + this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new DiscardTargetCost(new TargetCardInHand(filter))))); + } + + public Drekavac(final Drekavac card) { + super(card); + } + + @Override + public Drekavac copy() { + return new Drekavac(this); + } +} diff --git a/Mage.Sets/src/mage/sets/elspethvskiora/IcatianJavelineers.java b/Mage.Sets/src/mage/sets/elspethvskiora/IcatianJavelineers.java index 259b571d0da..bbde1977f58 100644 --- a/Mage.Sets/src/mage/sets/elspethvskiora/IcatianJavelineers.java +++ b/Mage.Sets/src/mage/sets/elspethvskiora/IcatianJavelineers.java @@ -33,7 +33,7 @@ import java.util.UUID; * * @author fireshoes */ -public class IcatianJavelineers extends mage.sets.fallenempires.IcatianJavelineers { +public class IcatianJavelineers extends mage.sets.fallenempires.IcatianJavelineers1 { public IcatianJavelineers(UUID ownerId) { super(ownerId); diff --git a/Mage.Sets/src/mage/sets/fallenempires/GoblinGrenade.java b/Mage.Sets/src/mage/sets/fallenempires/GoblinGrenade1.java similarity index 86% rename from Mage.Sets/src/mage/sets/fallenempires/GoblinGrenade.java rename to Mage.Sets/src/mage/sets/fallenempires/GoblinGrenade1.java index 0396099817d..9a8e8e4cf68 100644 --- a/Mage.Sets/src/mage/sets/fallenempires/GoblinGrenade.java +++ b/Mage.Sets/src/mage/sets/fallenempires/GoblinGrenade1.java @@ -34,21 +34,21 @@ import mage.constants.Rarity; * * @author North */ -public class GoblinGrenade extends mage.sets.magic2012.GoblinGrenade { +public class GoblinGrenade1 extends mage.sets.magic2012.GoblinGrenade { - public GoblinGrenade(UUID ownerId) { + public GoblinGrenade1(UUID ownerId) { super(ownerId); this.cardNumber = 114; this.expansionSetCode = "FEM"; this.rarity = Rarity.COMMON; } - public GoblinGrenade(final GoblinGrenade card) { + public GoblinGrenade1(final GoblinGrenade1 card) { super(card); } @Override - public GoblinGrenade copy() { - return new GoblinGrenade(this); + public GoblinGrenade1 copy() { + return new GoblinGrenade1(this); } } diff --git a/Mage.Sets/src/mage/sets/fallenempires/GoblinGrenade2.java b/Mage.Sets/src/mage/sets/fallenempires/GoblinGrenade2.java new file mode 100644 index 00000000000..a62d5202ee2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fallenempires/GoblinGrenade2.java @@ -0,0 +1,54 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.fallenempires; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author North + */ +public class GoblinGrenade2 extends mage.sets.magic2012.GoblinGrenade { + + public GoblinGrenade2(UUID ownerId) { + super(ownerId); + this.cardNumber = 115; + this.expansionSetCode = "FEM"; + this.rarity = Rarity.COMMON; + } + + public GoblinGrenade2(final GoblinGrenade2 card) { + super(card); + } + + @Override + public GoblinGrenade2 copy() { + return new GoblinGrenade2(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fallenempires/GoblinGrenade3.java b/Mage.Sets/src/mage/sets/fallenempires/GoblinGrenade3.java new file mode 100644 index 00000000000..752f2d3062c --- /dev/null +++ b/Mage.Sets/src/mage/sets/fallenempires/GoblinGrenade3.java @@ -0,0 +1,54 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.fallenempires; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author North + */ +public class GoblinGrenade3 extends mage.sets.magic2012.GoblinGrenade { + + public GoblinGrenade3(UUID ownerId) { + super(ownerId); + this.cardNumber = 116; + this.expansionSetCode = "FEM"; + this.rarity = Rarity.COMMON; + } + + public GoblinGrenade3(final GoblinGrenade3 card) { + super(card); + } + + @Override + public GoblinGrenade3 copy() { + return new GoblinGrenade3(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fallenempires/HymnToTourach.java b/Mage.Sets/src/mage/sets/fallenempires/HymnToTourach1.java similarity index 91% rename from Mage.Sets/src/mage/sets/fallenempires/HymnToTourach.java rename to Mage.Sets/src/mage/sets/fallenempires/HymnToTourach1.java index 314a045ff79..ae9ec58249c 100644 --- a/Mage.Sets/src/mage/sets/fallenempires/HymnToTourach.java +++ b/Mage.Sets/src/mage/sets/fallenempires/HymnToTourach1.java @@ -38,9 +38,9 @@ import mage.target.TargetPlayer; * * @author jonubuu */ -public class HymnToTourach extends CardImpl { +public class HymnToTourach1 extends CardImpl { - public HymnToTourach(UUID ownerId) { + public HymnToTourach1(UUID ownerId) { super(ownerId, 12, "Hymn to Tourach", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{B}{B}"); this.expansionSetCode = "FEM"; @@ -50,12 +50,12 @@ public class HymnToTourach extends CardImpl { this.getSpellAbility().addTarget(new TargetPlayer()); } - public HymnToTourach(final HymnToTourach card) { + public HymnToTourach1(final HymnToTourach1 card) { super(card); } @Override - public HymnToTourach copy() { - return new HymnToTourach(this); + public HymnToTourach1 copy() { + return new HymnToTourach1(this); } } diff --git a/Mage.Sets/src/mage/sets/fallenempires/HymnToTourach2.java b/Mage.Sets/src/mage/sets/fallenempires/HymnToTourach2.java new file mode 100644 index 00000000000..e500765ff1d --- /dev/null +++ b/Mage.Sets/src/mage/sets/fallenempires/HymnToTourach2.java @@ -0,0 +1,56 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.fallenempires; + +import java.util.UUID; +import mage.abilities.effects.common.discard.DiscardTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.TargetPlayer; + +/** + * + * @author jonubuu + */ +public class HymnToTourach2 extends mage.sets.fallenempires.HymnToTourach1 { + + public HymnToTourach2(UUID ownerId) { + super(ownerId); + this.cardNumber = 13; + } + + public HymnToTourach2(final HymnToTourach2 card) { + super(card); + } + + @Override + public HymnToTourach2 copy() { + return new HymnToTourach2(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fallenempires/HymnToTourach3.java b/Mage.Sets/src/mage/sets/fallenempires/HymnToTourach3.java new file mode 100644 index 00000000000..b48d4ff5517 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fallenempires/HymnToTourach3.java @@ -0,0 +1,56 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.fallenempires; + +import java.util.UUID; +import mage.abilities.effects.common.discard.DiscardTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.TargetPlayer; + +/** + * + * @author jonubuu + */ +public class HymnToTourach3 extends mage.sets.fallenempires.HymnToTourach1 { + + public HymnToTourach3(UUID ownerId) { + super(ownerId); + this.cardNumber = 14; + } + + public HymnToTourach3(final HymnToTourach3 card) { + super(card); + } + + @Override + public HymnToTourach3 copy() { + return new HymnToTourach3(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fallenempires/HymnToTourach4.java b/Mage.Sets/src/mage/sets/fallenempires/HymnToTourach4.java new file mode 100644 index 00000000000..591b97f8789 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fallenempires/HymnToTourach4.java @@ -0,0 +1,56 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.fallenempires; + +import java.util.UUID; +import mage.abilities.effects.common.discard.DiscardTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.TargetPlayer; + +/** + * + * @author jonubuu + */ +public class HymnToTourach4 extends mage.sets.fallenempires.HymnToTourach1 { + + public HymnToTourach4(UUID ownerId) { + super(ownerId); + this.cardNumber = 15; + } + + public HymnToTourach4(final HymnToTourach4 card) { + super(card); + } + + @Override + public HymnToTourach4 copy() { + return new HymnToTourach4(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fallenempires/IcatianJavelineers.java b/Mage.Sets/src/mage/sets/fallenempires/IcatianJavelineers1.java similarity index 93% rename from Mage.Sets/src/mage/sets/fallenempires/IcatianJavelineers.java rename to Mage.Sets/src/mage/sets/fallenempires/IcatianJavelineers1.java index e525ddff687..a3a36e41680 100644 --- a/Mage.Sets/src/mage/sets/fallenempires/IcatianJavelineers.java +++ b/Mage.Sets/src/mage/sets/fallenempires/IcatianJavelineers1.java @@ -47,9 +47,9 @@ import mage.target.common.TargetCreatureOrPlayer; * * @author fireshoes */ -public class IcatianJavelineers extends CardImpl { +public class IcatianJavelineers1 extends CardImpl { - public IcatianJavelineers(UUID ownerId) { + public IcatianJavelineers1(UUID ownerId) { super(ownerId, 148, "Icatian Javelineers", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{W}"); this.expansionSetCode = "FEM"; this.subtype.add("Human"); @@ -67,12 +67,12 @@ public class IcatianJavelineers extends CardImpl { this.addAbility(ability); } - public IcatianJavelineers(final IcatianJavelineers card) { + public IcatianJavelineers1(final IcatianJavelineers1 card) { super(card); } @Override - public IcatianJavelineers copy() { - return new IcatianJavelineers(this); + public IcatianJavelineers1 copy() { + return new IcatianJavelineers1(this); } } diff --git a/Mage.Sets/src/mage/sets/fallenempires/IcatianJavelineers2.java b/Mage.Sets/src/mage/sets/fallenempires/IcatianJavelineers2.java new file mode 100644 index 00000000000..793fe6afae1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fallenempires/IcatianJavelineers2.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.timeshifted; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class IcatianJavelineers2 extends mage.sets.fallenempires.IcatianJavelineers1 { + + public IcatianJavelineers2(UUID ownerId) { + super(ownerId); + this.cardNumber = 149; + } + + public IcatianJavelineers2(final IcatianJavelineers2 card) { + super(card); + } + + @Override + public IcatianJavelineers2 copy() { + return new IcatianJavelineers2(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fallenempires/IcatianJavelineers3.java b/Mage.Sets/src/mage/sets/fallenempires/IcatianJavelineers3.java new file mode 100644 index 00000000000..85649357295 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fallenempires/IcatianJavelineers3.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.timeshifted; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author fireshoes + */ +public class IcatianJavelineers3 extends mage.sets.fallenempires.IcatianJavelineers1 { + + public IcatianJavelineers3(UUID ownerId) { + super(ownerId); + this.cardNumber = 150; + } + + public IcatianJavelineers3(final IcatianJavelineers3 card) { + super(card); + } + + @Override + public IcatianJavelineers3 copy() { + return new IcatianJavelineers3(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fallenempires/NightSoil.java b/Mage.Sets/src/mage/sets/fallenempires/NightSoil1.java similarity index 91% rename from Mage.Sets/src/mage/sets/fallenempires/NightSoil.java rename to Mage.Sets/src/mage/sets/fallenempires/NightSoil1.java index aa9118664a2..f31f9bfcb00 100644 --- a/Mage.Sets/src/mage/sets/fallenempires/NightSoil.java +++ b/Mage.Sets/src/mage/sets/fallenempires/NightSoil1.java @@ -45,9 +45,9 @@ import mage.target.common.TargetCardInASingleGraveyard; * * @author LevelX2 */ -public class NightSoil extends CardImpl { +public class NightSoil1 extends CardImpl { - public NightSoil(UUID ownerId) { + public NightSoil1(UUID ownerId) { super(ownerId, 80, "Night Soil", Rarity.COMMON, new CardType[]{CardType.ENCHANTMENT}, "{G}{G}"); this.expansionSetCode = "FEM"; @@ -58,12 +58,12 @@ public class NightSoil extends CardImpl { this.addAbility(ability); } - public NightSoil(final NightSoil card) { + public NightSoil1(final NightSoil1 card) { super(card); } @Override - public NightSoil copy() { - return new NightSoil(this); + public NightSoil1 copy() { + return new NightSoil1(this); } } diff --git a/Mage.Sets/src/mage/sets/fallenempires/NightSoil2.java b/Mage.Sets/src/mage/sets/fallenempires/NightSoil2.java new file mode 100644 index 00000000000..09706ba97b5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fallenempires/NightSoil2.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.masterseditionii; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class NightSoil2 extends mage.sets.fallenempires.NightSoil1 { + + public NightSoil2(UUID ownerId) { + super(ownerId); + this.cardNumber = 81; + } + + public NightSoil2(final NightSoil2 card) { + super(card); + } + + @Override + public NightSoil2 copy() { + return new NightSoil2(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fallenempires/NightSoil3.java b/Mage.Sets/src/mage/sets/fallenempires/NightSoil3.java new file mode 100644 index 00000000000..7289331f5f6 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fallenempires/NightSoil3.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.masterseditionii; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class NightSoil3 extends mage.sets.fallenempires.NightSoil1 { + + public NightSoil3(UUID ownerId) { + super(ownerId); + this.cardNumber = 82; + } + + public NightSoil3(final NightSoil3 card) { + super(card); + } + + @Override + public NightSoil3 copy() { + return new NightSoil3(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fallenempires/OrderOfLeitbur1.java b/Mage.Sets/src/mage/sets/fallenempires/OrderOfLeitbur1.java new file mode 100644 index 00000000000..194a0bd052c --- /dev/null +++ b/Mage.Sets/src/mage/sets/fallenempires/OrderOfLeitbur1.java @@ -0,0 +1,53 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.fallenempires; + +import java.util.UUID; + +/** + * + * @author LoneFox + + */ +public class OrderOfLeitbur1 extends mage.sets.mastersedition.OrderOfLeitbur { + + public OrderOfLeitbur1(UUID ownerId) { + super(ownerId); + this.cardNumber = 163; + this.expansionSetCode = "FEM"; + } + + public OrderOfLeitbur1(final OrderOfLeitbur1 card) { + super(card); + } + + @Override + public OrderOfLeitbur1 copy() { + return new OrderOfLeitbur1(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fallenempires/OrderOfLeitbur2.java b/Mage.Sets/src/mage/sets/fallenempires/OrderOfLeitbur2.java new file mode 100644 index 00000000000..360fdfe329b --- /dev/null +++ b/Mage.Sets/src/mage/sets/fallenempires/OrderOfLeitbur2.java @@ -0,0 +1,53 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.fallenempires; + +import java.util.UUID; + +/** + * + * @author LoneFox + + */ +public class OrderOfLeitbur2 extends mage.sets.mastersedition.OrderOfLeitbur { + + public OrderOfLeitbur2(UUID ownerId) { + super(ownerId); + this.cardNumber = 164; + this.expansionSetCode = "FEM"; + } + + public OrderOfLeitbur2(final OrderOfLeitbur2 card) { + super(card); + } + + @Override + public OrderOfLeitbur2 copy() { + return new OrderOfLeitbur2(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fallenempires/OrderOfLeitbur3.java b/Mage.Sets/src/mage/sets/fallenempires/OrderOfLeitbur3.java new file mode 100644 index 00000000000..1f71602dbc4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fallenempires/OrderOfLeitbur3.java @@ -0,0 +1,53 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.fallenempires; + +import java.util.UUID; + +/** + * + * @author LoneFox + + */ +public class OrderOfLeitbur3 extends mage.sets.mastersedition.OrderOfLeitbur { + + public OrderOfLeitbur3(UUID ownerId) { + super(ownerId); + this.cardNumber = 165; + this.expansionSetCode = "FEM"; + } + + public OrderOfLeitbur3(final OrderOfLeitbur3 card) { + super(card); + } + + @Override + public OrderOfLeitbur3 copy() { + return new OrderOfLeitbur3(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fallenempires/OrderOfTheEbonHand1.java b/Mage.Sets/src/mage/sets/fallenempires/OrderOfTheEbonHand1.java new file mode 100644 index 00000000000..221a35d91d7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fallenempires/OrderOfTheEbonHand1.java @@ -0,0 +1,53 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.fallenempires; + +import java.util.UUID; + +/** + * + * @author LoneFox + + */ +public class OrderOfTheEbonHand1 extends mage.sets.mastersedition.OrderOfTheEbonHand { + + public OrderOfTheEbonHand1(UUID ownerId) { + super(ownerId); + this.cardNumber = 25; + this.expansionSetCode = "FEM"; + } + + public OrderOfTheEbonHand1(final OrderOfTheEbonHand1 card) { + super(card); + } + + @Override + public OrderOfTheEbonHand1 copy() { + return new OrderOfTheEbonHand1(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fallenempires/OrderOfTheEbonHand2.java b/Mage.Sets/src/mage/sets/fallenempires/OrderOfTheEbonHand2.java new file mode 100644 index 00000000000..28270bc6488 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fallenempires/OrderOfTheEbonHand2.java @@ -0,0 +1,53 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.fallenempires; + +import java.util.UUID; + +/** + * + * @author LoneFox + + */ +public class OrderOfTheEbonHand2 extends mage.sets.mastersedition.OrderOfTheEbonHand { + + public OrderOfTheEbonHand2(UUID ownerId) { + super(ownerId); + this.cardNumber = 26; + this.expansionSetCode = "FEM"; + } + + public OrderOfTheEbonHand2(final OrderOfTheEbonHand2 card) { + super(card); + } + + @Override + public OrderOfTheEbonHand2 copy() { + return new OrderOfTheEbonHand2(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fallenempires/OrderOfTheEbonHand3.java b/Mage.Sets/src/mage/sets/fallenempires/OrderOfTheEbonHand3.java new file mode 100644 index 00000000000..85e25ae3f45 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fallenempires/OrderOfTheEbonHand3.java @@ -0,0 +1,53 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.fallenempires; + +import java.util.UUID; + +/** + * + * @author LoneFox + + */ +public class OrderOfTheEbonHand3 extends mage.sets.mastersedition.OrderOfTheEbonHand { + + public OrderOfTheEbonHand3(UUID ownerId) { + super(ownerId); + this.cardNumber = 27; + this.expansionSetCode = "FEM"; + } + + public OrderOfTheEbonHand3(final OrderOfTheEbonHand3 card) { + super(card); + } + + @Override + public OrderOfTheEbonHand3 copy() { + return new OrderOfTheEbonHand3(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fifthedition/ErgRaiders.java b/Mage.Sets/src/mage/sets/fifthedition/ErgRaiders.java new file mode 100644 index 00000000000..dae9ebd5a3b --- /dev/null +++ b/Mage.Sets/src/mage/sets/fifthedition/ErgRaiders.java @@ -0,0 +1,53 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.fifthedition; + +import java.util.UUID; + +/** + * + * @author LoneFox + + */ +public class ErgRaiders extends mage.sets.fourthedition.ErgRaiders { + + public ErgRaiders(UUID ownerId) { + super(ownerId); + this.cardNumber = 20; + this.expansionSetCode = "5ED"; + } + + public ErgRaiders(final ErgRaiders card) { + super(card); + } + + @Override + public ErgRaiders copy() { + return new ErgRaiders(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fifthedition/KnightOfStromgald.java b/Mage.Sets/src/mage/sets/fifthedition/KnightOfStromgald.java new file mode 100644 index 00000000000..af5cc58290f --- /dev/null +++ b/Mage.Sets/src/mage/sets/fifthedition/KnightOfStromgald.java @@ -0,0 +1,53 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.fifthedition; + +import java.util.UUID; + +/** + * + * @author LoneFox + + */ +public class KnightOfStromgald extends mage.sets.iceage.KnightOfStromgald { + + public KnightOfStromgald(UUID ownerId) { + super(ownerId); + this.cardNumber = 33; + this.expansionSetCode = "5ED"; + } + + public KnightOfStromgald(final KnightOfStromgald card) { + super(card); + } + + @Override + public KnightOfStromgald copy() { + return new KnightOfStromgald(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fifthedition/OrderOfTheWhiteShield.java b/Mage.Sets/src/mage/sets/fifthedition/OrderOfTheWhiteShield.java new file mode 100644 index 00000000000..b131da9beef --- /dev/null +++ b/Mage.Sets/src/mage/sets/fifthedition/OrderOfTheWhiteShield.java @@ -0,0 +1,53 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.fifthedition; + +import java.util.UUID; + +/** + * + * @author LoneFox + + */ +public class OrderOfTheWhiteShield extends mage.sets.iceage.OrderOfTheWhiteShield { + + public OrderOfTheWhiteShield(UUID ownerId) { + super(ownerId); + this.cardNumber = 325; + this.expansionSetCode = "5ED"; + } + + public OrderOfTheWhiteShield(final OrderOfTheWhiteShield card) { + super(card); + } + + @Override + public OrderOfTheWhiteShield copy() { + return new OrderOfTheWhiteShield(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fourthedition/ErgRaiders.java b/Mage.Sets/src/mage/sets/fourthedition/ErgRaiders.java new file mode 100644 index 00000000000..edc6362f7d3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fourthedition/ErgRaiders.java @@ -0,0 +1,87 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.fourthedition; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.TriggeredAbility; +import mage.abilities.common.BeginningOfEndStepTriggeredAbility; +import mage.abilities.condition.Condition; +import mage.abilities.decorator.ConditionalTriggeredAbility; +import mage.abilities.effects.common.DamageControllerEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.watchers.common.AttackedThisTurnWatcher; + +/** + * + * @author LoneFox + + */ +public class ErgRaiders extends CardImpl { + + public ErgRaiders(UUID ownerId) { + super(ownerId, 19, "Erg Raiders", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{B}"); + this.expansionSetCode = "4ED"; + this.subtype.add("Human"); + this.subtype.add("Warrior"); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + // At the beginning of your end step, if Erg Raiders didn't attack this turn, Erg Raiders deals 2 damage to you unless it came under your control this turn. + TriggeredAbility ability = new ConditionalTriggeredAbility(new BeginningOfEndStepTriggeredAbility(new DamageControllerEffect(2), TargetController.YOU, false), + new ErgRaidersCondition(), "At the beginning of your end step, if {this} didn't attack this turn, {this} deals 2 damage to you unless it came under your control this turn."); + ability.addWatcher(new AttackedThisTurnWatcher()); + this.addAbility(ability); + } + + public ErgRaiders(final ErgRaiders card) { + super(card); + } + + @Override + public ErgRaiders copy() { + return new ErgRaiders(this); + } +} + +class ErgRaidersCondition implements Condition { + + @Override + public boolean apply(Game game, Ability source) { + Permanent raiders = game.getPermanentOrLKIBattlefield(source.getSourceId()); + AttackedThisTurnWatcher watcher = (AttackedThisTurnWatcher) game.getState().getWatchers().get("AttackedThisTurn"); + // wasControlledFromStartOfControllerTurn should be checked during resolution I guess, but shouldn't be relevant + return raiders.wasControlledFromStartOfControllerTurn() && !watcher.getAttackedThisTurnCreatures().contains(raiders.getId()); + } +} diff --git a/Mage.Sets/src/mage/sets/gatecrash/Bioshift.java b/Mage.Sets/src/mage/sets/gatecrash/Bioshift.java index 27cb238c2fc..01764c518ab 100644 --- a/Mage.Sets/src/mage/sets/gatecrash/Bioshift.java +++ b/Mage.Sets/src/mage/sets/gatecrash/Bioshift.java @@ -52,7 +52,6 @@ public class Bioshift extends CardImpl { super(ownerId, 214, "Bioshift", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{G/U}"); this.expansionSetCode = "GTC"; - // Move any number of +1/+1 counters from target creature onto another target creature with the same controller. getSpellAbility().addEffect(new MoveCounterFromTargetToTargetEffect()); getSpellAbility().addTarget(new TargetCreaturePermanentSameController(2,2,new FilterCreaturePermanent(),false)); diff --git a/Mage.Sets/src/mage/sets/iceage/DanceOfTheDead.java b/Mage.Sets/src/mage/sets/iceage/DanceOfTheDead.java index d0f72fc69f1..8c694ba376d 100644 --- a/Mage.Sets/src/mage/sets/iceage/DanceOfTheDead.java +++ b/Mage.Sets/src/mage/sets/iceage/DanceOfTheDead.java @@ -42,6 +42,7 @@ import mage.abilities.effects.ContinuousEffectImpl; import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.DoIfCostPaid; +import mage.abilities.effects.common.DontUntapInControllersUntapStepEnchantedEffect; import mage.abilities.effects.common.DontUntapInControllersUntapStepSourceEffect; import mage.abilities.effects.common.UntapEnchantedEffect; import mage.abilities.effects.common.continuous.BoostEnchantedEffect; @@ -96,7 +97,7 @@ public class DanceOfTheDead extends CardImpl { // Enchanted creature gets +1/+1 and doesn't untap during its controller's untap step. ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(1, 1, Duration.WhileOnBattlefield)); - Effect effect = new DontUntapInControllersUntapStepSourceEffect(); + Effect effect = new DontUntapInControllersUntapStepEnchantedEffect(); effect.setText("and doesn't untap during its controller's untap step"); ability.addEffect(effect); this.addAbility(ability); @@ -144,7 +145,7 @@ class DanceOfTheDeadReAttachEffect extends OneShotEffect { } // put card into play - controller.putOntoBattlefieldWithInfo(cardInGraveyard, game, Zone.GRAVEYARD, source.getSourceId()); + controller.putOntoBattlefieldWithInfo(cardInGraveyard, game, Zone.GRAVEYARD, source.getSourceId(), true); Permanent enchantedCreature = game.getPermanent(cardInGraveyard.getId()); FilterCreaturePermanent filter = new FilterCreaturePermanent("enchant creature put onto the battlefield with Dance of the Dead"); diff --git a/Mage.Sets/src/mage/sets/iceage/KnightOfStromgald.java b/Mage.Sets/src/mage/sets/iceage/KnightOfStromgald.java new file mode 100644 index 00000000000..c923743d0be --- /dev/null +++ b/Mage.Sets/src/mage/sets/iceage/KnightOfStromgald.java @@ -0,0 +1,86 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.iceage; + +import java.util.UUID; +import mage.MageInt; +import mage.ObjectColor; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.keyword.FirstStrikeAbility; +import mage.abilities.keyword.ProtectionAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.filter.predicate.mageobject.ColorPredicate; + +/** + * + * @author LoneFox + + */ +public class KnightOfStromgald extends CardImpl { + + private static final FilterCard filter = new FilterCard("White"); + + static { + filter.add(new ColorPredicate(ObjectColor.WHITE)); + } + + public KnightOfStromgald(UUID ownerId) { + super(ownerId, 26, "Knight of Stromgald", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{B}{B}"); + this.expansionSetCode = "ICE"; + this.subtype.add("Human"); + this.subtype.add("Knight"); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // Protection from white + this.addAbility(new ProtectionAbility(filter)); + + // {B}: Knight of Stromgald gains first strike until end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilitySourceEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn), new ManaCostsImpl("{B}"))); + + // {B}{B}: Knight of Stromgald gets +1/+0 until end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1,0, Duration.EndOfTurn), new ManaCostsImpl("{B}{B}"))); + } + + public KnightOfStromgald(final KnightOfStromgald card) { + super(card); + } + + @Override + public KnightOfStromgald copy() { + return new KnightOfStromgald(this); + } +} diff --git a/Mage.Sets/src/mage/sets/iceage/OrcishCannoneers.java b/Mage.Sets/src/mage/sets/iceage/OrcishCannoneers.java new file mode 100644 index 00000000000..ef0cebf67d2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/iceage/OrcishCannoneers.java @@ -0,0 +1,72 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.iceage; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.DamageControllerEffect; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.common.TargetCreatureOrPlayer; + +/** + * + * @author LoneFox + + */ +public class OrcishCannoneers extends CardImpl { + + public OrcishCannoneers(UUID ownerId) { + super(ownerId, 205, "Orcish Cannoneers", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{R}{R}"); + this.expansionSetCode = "ICE"; + this.subtype.add("Orc"); + this.subtype.add("Warrior"); + this.power = new MageInt(1); + this.toughness = new MageInt(3); + + // {tap}: Orcish Cannoneers deals 2 damage to target creature or player and 3 damage to you. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2), new TapSourceCost()); ability.addTarget(new TargetCreatureOrPlayer()); + ability.addEffect(new DamageControllerEffect(3)); + this.addAbility(ability); + } + + public OrcishCannoneers(final OrcishCannoneers card) { + super(card); + } + + @Override + public OrcishCannoneers copy() { + return new OrcishCannoneers(this); + } +} diff --git a/Mage.Sets/src/mage/sets/iceage/OrderOfTheWhiteShield.java b/Mage.Sets/src/mage/sets/iceage/OrderOfTheWhiteShield.java new file mode 100644 index 00000000000..dc31f84840d --- /dev/null +++ b/Mage.Sets/src/mage/sets/iceage/OrderOfTheWhiteShield.java @@ -0,0 +1,86 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.iceage; + +import java.util.UUID; +import mage.MageInt; +import mage.ObjectColor; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.keyword.FirstStrikeAbility; +import mage.abilities.keyword.ProtectionAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.filter.predicate.mageobject.ColorPredicate; + +/** + * + * @author LoneFox + + */ +public class OrderOfTheWhiteShield extends CardImpl { + + private static final FilterCard filter = new FilterCard("Black"); + + static { + filter.add(new ColorPredicate(ObjectColor.BLACK)); + } + + public OrderOfTheWhiteShield(UUID ownerId) { + super(ownerId, 270, "Order of the White Shield", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{W}{W}"); + this.expansionSetCode = "ICE"; + this.subtype.add("Human"); + this.subtype.add("Knight"); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // Protection from black + this.addAbility(new ProtectionAbility(filter)); + + // {W}: Order of the White Shield gains first strike until end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilitySourceEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn), new ManaCostsImpl("{W}"))); + + // {W}{W}: Order of the White Shield gets +1/+0 until end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1,0, Duration.EndOfTurn), new ManaCostsImpl("{W}{W}"))); + } + + public OrderOfTheWhiteShield(final OrderOfTheWhiteShield card) { + super(card); + } + + @Override + public OrderOfTheWhiteShield copy() { + return new OrderOfTheWhiteShield(this); + } +} diff --git a/Mage.Sets/src/mage/sets/iceage/SoldeviSimulacrum.java b/Mage.Sets/src/mage/sets/iceage/SoldeviSimulacrum.java new file mode 100644 index 00000000000..a79829b58e6 --- /dev/null +++ b/Mage.Sets/src/mage/sets/iceage/SoldeviSimulacrum.java @@ -0,0 +1,53 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.iceage; + +import java.util.UUID; + +/** + * + * @author LoneFox + + */ +public class SoldeviSimulacrum extends mage.sets.masterseditionii.SoldeviSimulacrum { + + public SoldeviSimulacrum(UUID ownerId) { + super(ownerId); + this.cardNumber = 314; + this.expansionSetCode = "ICE"; + } + + public SoldeviSimulacrum(final SoldeviSimulacrum card) { + super(card); + } + + @Override + public SoldeviSimulacrum copy() { + return new SoldeviSimulacrum(this); + } +} diff --git a/Mage.Sets/src/mage/sets/innistrad/BloodlineKeeper.java b/Mage.Sets/src/mage/sets/innistrad/BloodlineKeeper.java index 1c7d05c764d..94a3961d9d5 100644 --- a/Mage.Sets/src/mage/sets/innistrad/BloodlineKeeper.java +++ b/Mage.Sets/src/mage/sets/innistrad/BloodlineKeeper.java @@ -67,7 +67,7 @@ public class BloodlineKeeper extends CardImpl { this.secondSideCard = new LordOfLineage(ownerId); this.addAbility(FlyingAbility.getInstance()); - // {tap}: Put a 2/2 black Vampire creature token with flying onto the battlefield. + // {T}: Put a 2/2 black Vampire creature token with flying onto the battlefield. this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new CreateTokenEffect(new VampireToken()), new TapSourceCost())); // {B}: Transform Bloodline Keeper. Activate this ability only if you control five or more Vampires. this.addAbility(new TransformAbility()); diff --git a/Mage.Sets/src/mage/sets/innistrad/StromkirkNoble.java b/Mage.Sets/src/mage/sets/innistrad/StromkirkNoble.java index bae289634cb..8d3e95c0cb3 100644 --- a/Mage.Sets/src/mage/sets/innistrad/StromkirkNoble.java +++ b/Mage.Sets/src/mage/sets/innistrad/StromkirkNoble.java @@ -29,20 +29,18 @@ package mage.sets.innistrad; import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; +import mage.abilities.common.SimpleEvasionAbility; +import mage.abilities.effects.common.combat.CantBeBlockedByCreaturesSourceEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Rarity; -import mage.constants.Zone; -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.effects.RestrictionEffect; -import mage.abilities.effects.common.counter.AddCountersSourceEffect; -import mage.cards.CardImpl; import mage.counters.CounterType; -import mage.game.Game; -import mage.game.permanent.Permanent; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; /** * @@ -51,6 +49,12 @@ import mage.game.permanent.Permanent; */ public class StromkirkNoble extends CardImpl { + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Humans"); + + static { + filter.add(new SubtypePredicate("Human")); + } + public StromkirkNoble(UUID ownerId) { super(ownerId, 164, "Stromkirk Noble", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{R}"); this.expansionSetCode = "ISD"; @@ -60,8 +64,8 @@ public class StromkirkNoble extends CardImpl { this.toughness = new MageInt(1); // Stromkirk Noble can't be blocked by Humans. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new StromkirkEffect())); - // Whenever Stromkirk Noble deals combat damage to a player, put a +1/+1 counter on it. + this.addAbility(new SimpleEvasionAbility(new CantBeBlockedByCreaturesSourceEffect(filter, Duration.WhileOnBattlefield))); + // Whenever Stromkirk Noble deals combat damage to a player, put a +1/+1 counter on it. this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), false)); } @@ -75,33 +79,3 @@ public class StromkirkNoble extends CardImpl { return new StromkirkNoble(this); } } - -class StromkirkEffect extends RestrictionEffect { - - public StromkirkEffect() { - super(Duration.WhileOnBattlefield); - } - - public StromkirkEffect(final StromkirkEffect effect) { - super(effect); - } - - @Override - public boolean applies(Permanent permanent, Ability source, Game game) { - if (permanent.getId().equals(source.getSourceId())) { - return true; - } - return false; - } - - @Override - public boolean canBeBlocked(Permanent attacker, Permanent blocker, Ability source, Game game) { - return !blocker.hasSubtype("Human"); - } - - @Override - public StromkirkEffect copy() { - return new StromkirkEffect(this); - } - -} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/invasion/Disrupt.java b/Mage.Sets/src/mage/sets/invasion/Disrupt.java new file mode 100644 index 00000000000..8a4718a3498 --- /dev/null +++ b/Mage.Sets/src/mage/sets/invasion/Disrupt.java @@ -0,0 +1,77 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.invasion; + +import java.util.UUID; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.common.CounterTargetEffect; +import mage.abilities.effects.common.CounterUnlessPaysEffect; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.FilterSpell; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.target.TargetSpell; + +/** + * + * @author LoneFox + + */ +public class Disrupt extends CardImpl { + + private static final FilterSpell filter = new FilterSpell("instant or sorcery spell"); + + static { + filter.add(Predicates.or( + new CardTypePredicate(CardType.INSTANT), + new CardTypePredicate(CardType.SORCERY))); + } + + public Disrupt(UUID ownerId) { + super(ownerId, 51, "Disrupt", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{U}"); + this.expansionSetCode = "INV"; + + // Counter target instant or sorcery spell unless its controller pays {1}. + this.getSpellAbility().addTarget(new TargetSpell(filter)); + this.getSpellAbility().addEffect(new CounterUnlessPaysEffect(new GenericManaCost(1))); + // Draw a card. + this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); + } + + public Disrupt(final Disrupt card) { + super(card); + } + + @Override + public Disrupt copy() { + return new Disrupt(this); + } +} diff --git a/Mage.Sets/src/mage/sets/judgment/GuidedStrike.java b/Mage.Sets/src/mage/sets/judgment/GuidedStrike.java new file mode 100644 index 00000000000..7545602758c --- /dev/null +++ b/Mage.Sets/src/mage/sets/judgment/GuidedStrike.java @@ -0,0 +1,53 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.judgment; + +import java.util.UUID; + +/** + * + * @author LoneFox + + */ +public class GuidedStrike extends mage.sets.weatherlight.GuidedStrike { + + public GuidedStrike(UUID ownerId) { + super(ownerId); + this.cardNumber = 13; + this.expansionSetCode = "JUD"; + } + + public GuidedStrike(final GuidedStrike card) { + super(card); + } + + @Override + public GuidedStrike copy() { + return new GuidedStrike(this); + } +} diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/ZurgoHelmsmasher.java b/Mage.Sets/src/mage/sets/khansoftarkir/ZurgoHelmsmasher.java index e003a002255..01fbf263c89 100644 --- a/Mage.Sets/src/mage/sets/khansoftarkir/ZurgoHelmsmasher.java +++ b/Mage.Sets/src/mage/sets/khansoftarkir/ZurgoHelmsmasher.java @@ -29,7 +29,7 @@ package mage.sets.khansoftarkir; import java.util.UUID; import mage.MageInt; -import mage.abilities.common.AttacksEachTurnStaticAbility; +import mage.abilities.common.AttacksEachCombatStaticAbility; import mage.abilities.common.DiesAndDealtDamageThisTurnTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.condition.common.MyTurnCondition; @@ -64,7 +64,7 @@ public class ZurgoHelmsmasher extends CardImpl { // Haste this.addAbility(HasteAbility.getInstance()); // Zurgo Helmsmasher attacks each combat if able. - this.addAbility(new AttacksEachTurnStaticAbility()); + this.addAbility(new AttacksEachCombatStaticAbility()); // Zurgo Helmsmasher has indestructible as long as it's your turn. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(new GainAbilitySourceEffect(IndestructibleAbility.getInstance(), Duration.WhileOnBattlefield), diff --git a/Mage.Sets/src/mage/sets/lorwyn/MerrowHarbinger.java b/Mage.Sets/src/mage/sets/lorwyn/MerrowHarbinger.java new file mode 100644 index 00000000000..984104412a0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/lorwyn/MerrowHarbinger.java @@ -0,0 +1,77 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.lorwyn; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.search.SearchLibraryPutOnLibraryEffect; +import mage.abilities.keyword.IslandwalkAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.FilterCard; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.target.common.TargetCardInLibrary; + +/** + * + * @author LoneFox + + */ +public class MerrowHarbinger extends CardImpl { + + public static final FilterCard filter = new FilterCard("Merfolk card"); + + static { + filter.add(new SubtypePredicate("Merfolk")); + } + + public MerrowHarbinger(UUID ownerId) { + super(ownerId, 73, "Merrow Harbinger", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{U}"); + this.expansionSetCode = "LRW"; + this.subtype.add("Merfolk"); + this.subtype.add("Wizard"); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + // Islandwalk + this.addAbility(new IslandwalkAbility()); + // When Merrow Harbinger enters the battlefield, you may search your library for a Merfolk card, reveal it, then shuffle your library and put that card on top of it. + this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutOnLibraryEffect(new TargetCardInLibrary(filter), true, true), true)); + } + + public MerrowHarbinger(final MerrowHarbinger card) { + super(card); + } + + @Override + public MerrowHarbinger copy() { + return new MerrowHarbinger(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magic2014/MaraudingMaulhorn.java b/Mage.Sets/src/mage/sets/magic2014/MaraudingMaulhorn.java index e5fa803cc8b..a43e8d31670 100644 --- a/Mage.Sets/src/mage/sets/magic2014/MaraudingMaulhorn.java +++ b/Mage.Sets/src/mage/sets/magic2014/MaraudingMaulhorn.java @@ -63,7 +63,7 @@ public class MaraudingMaulhorn extends CardImpl { // Marauding Maulhorn attacks each combat if able unless you control a creature named Advocate of the Beast. Effect effect = new ConditionalRequirementEffect( - new AttacksIfAbleSourceEffect(Duration.WhileOnBattlefield), + new AttacksIfAbleSourceEffect(Duration.WhileOnBattlefield, true), new PermanentsOnTheBattlefieldCondition(filter, PermanentsOnTheBattlefieldCondition.CountType.FEWER_THAN, 1)); effect.setText("{this} attacks each combat if able unless you control a creature named Advocate of the Beast"); diff --git a/Mage.Sets/src/mage/sets/magicorigins/ActOfTreason.java b/Mage.Sets/src/mage/sets/magicorigins/ActOfTreason.java new file mode 100644 index 00000000000..ab0270570c9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/ActOfTreason.java @@ -0,0 +1,54 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class ActOfTreason extends mage.sets.magic2010.ActOfTreason { + + public ActOfTreason(UUID ownerId) { + super(ownerId); + this.cardNumber = 999; + this.expansionSetCode = "ORI"; + this.rarity = Rarity.COMMON; + } + + public ActOfTreason(final ActOfTreason card) { + super(card); + } + + @Override + public ActOfTreason copy() { + return new ActOfTreason(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/AegisAngel.java b/Mage.Sets/src/mage/sets/magicorigins/AegisAngel.java new file mode 100644 index 00000000000..8f604f6dbf6 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/AegisAngel.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class AegisAngel extends mage.sets.magic2012.AegisAngel { + + public AegisAngel(UUID ownerId) { + super(ownerId); + this.cardNumber = 273; + this.expansionSetCode = "ORI"; + } + + public AegisAngel(final AegisAngel card) { + super(card); + } + + @Override + public AegisAngel copy() { + return new AegisAngel(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/AkroanJailer.java b/Mage.Sets/src/mage/sets/magicorigins/AkroanJailer.java new file mode 100644 index 00000000000..cd3162e2c69 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/AkroanJailer.java @@ -0,0 +1,74 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.Cost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.TapTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LevelX2 + */ +public class AkroanJailer extends CardImpl { + + public AkroanJailer(UUID ownerId) { + super(ownerId, 1, "Akroan Jailer", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{W}"); + this.expansionSetCode = "ORI"; + this.subtype.add("Human"); + this.subtype.add("Soldier"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // {2}{W}, {T}: Tap target creature. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new TapTargetEffect(), new ManaCostsImpl("{2}{W}")); + ability.addCost(new TapSourceCost()); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + + } + + public AkroanJailer(final AkroanJailer card) { + super(card); + } + + @Override + public AkroanJailer copy() { + return new AkroanJailer(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/BellowsLizard.java b/Mage.Sets/src/mage/sets/magicorigins/BellowsLizard.java new file mode 100644 index 00000000000..f43dc9c3ea2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/BellowsLizard.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class BellowsLizard extends mage.sets.returntoravnica.BellowsLizard { + + public BellowsLizard(UUID ownerId) { + super(ownerId); + this.cardNumber = 132; + this.expansionSetCode = "ORI"; + } + + public BellowsLizard(final BellowsLizard card) { + super(card); + } + + @Override + public BellowsLizard copy() { + return new BellowsLizard(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/CatacombSlug.java b/Mage.Sets/src/mage/sets/magicorigins/CatacombSlug.java new file mode 100644 index 00000000000..38ceb429d07 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/CatacombSlug.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class CatacombSlug extends mage.sets.returntoravnica.CatacombSlug { + + public CatacombSlug(UUID ownerId) { + super(ownerId); + this.cardNumber = 999; + this.expansionSetCode = "ORI"; + } + + public CatacombSlug(final CatacombSlug card) { + super(card); + } + + @Override + public CatacombSlug copy() { + return new CatacombSlug(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/ChandrasFury.java b/Mage.Sets/src/mage/sets/magicorigins/ChandrasFury.java new file mode 100644 index 00000000000..7aafc1d8ef6 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/ChandrasFury.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class ChandrasFury extends mage.sets.magic2013.ChandrasFury { + + public ChandrasFury(UUID ownerId) { + super(ownerId); + this.cardNumber = 999; + this.expansionSetCode = "ORI"; + } + + public ChandrasFury(final ChandrasFury card) { + super(card); + } + + @Override + public ChandrasFury copy() { + return new ChandrasFury(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/ChargingGriffin.java b/Mage.Sets/src/mage/sets/magicorigins/ChargingGriffin.java new file mode 100644 index 00000000000..3cbc9c975af --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/ChargingGriffin.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class ChargingGriffin extends mage.sets.magic2014.ChargingGriffin { + + public ChargingGriffin(UUID ownerId) { + super(ownerId); + this.cardNumber = 999; + this.expansionSetCode = "ORI"; + } + + public ChargingGriffin(final ChargingGriffin card) { + super(card); + } + + @Override + public ChargingGriffin copy() { + return new ChargingGriffin(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/Claustrophobia.java b/Mage.Sets/src/mage/sets/magicorigins/Claustrophobia.java new file mode 100644 index 00000000000..b363d80e591 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/Claustrophobia.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class Claustrophobia extends mage.sets.innistrad.Claustrophobia { + + public Claustrophobia(UUID ownerId) { + super(ownerId); + this.cardNumber = 999; + this.expansionSetCode = "ORI"; + } + + public Claustrophobia(final Claustrophobia card) { + super(card); + } + + @Override + public Claustrophobia copy() { + return new Claustrophobia(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/Cobblebrute.java b/Mage.Sets/src/mage/sets/magicorigins/Cobblebrute.java new file mode 100644 index 00000000000..97349a0e0e7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/Cobblebrute.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class Cobblebrute extends mage.sets.returntoravnica.Cobblebrute { + + public Cobblebrute(UUID ownerId) { + super(ownerId); + this.cardNumber = 999; + this.expansionSetCode = "ORI"; + } + + public Cobblebrute(final Cobblebrute card) { + super(card); + } + + @Override + public Cobblebrute copy() { + return new Cobblebrute(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/CruelRevival.java b/Mage.Sets/src/mage/sets/magicorigins/CruelRevival.java new file mode 100644 index 00000000000..7682e5befe8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/CruelRevival.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class CruelRevival extends mage.sets.onslaught.CruelRevival { + + public CruelRevival(UUID ownerId) { + super(ownerId); + this.cardNumber = 999; + this.expansionSetCode = "ORI"; + } + + public CruelRevival(final CruelRevival card) { + super(card); + } + + @Override + public CruelRevival copy() { + return new CruelRevival(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/Disperse.java b/Mage.Sets/src/mage/sets/magicorigins/Disperse.java new file mode 100644 index 00000000000..7581651100b --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/Disperse.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class Disperse extends mage.sets.scarsofmirrodin.Disperse { + + public Disperse(UUID ownerId) { + super(ownerId); + this.cardNumber = 999; + this.expansionSetCode = "ORI"; + } + + public Disperse(final Disperse card) { + super(card); + } + + @Override + public Disperse copy() { + return new Disperse(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/DivineVerdict.java b/Mage.Sets/src/mage/sets/magicorigins/DivineVerdict.java new file mode 100644 index 00000000000..492afb6c562 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/DivineVerdict.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class DivineVerdict extends mage.sets.magic2010.DivineVerdict { + + public DivineVerdict(UUID ownerId) { + super(ownerId); + this.cardNumber = 274; + this.expansionSetCode = "ORI"; + } + + public DivineVerdict(final DivineVerdict card) { + super(card); + } + + @Override + public DivineVerdict copy() { + return new DivineVerdict(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/EagleOfTheWatch.java b/Mage.Sets/src/mage/sets/magicorigins/EagleOfTheWatch.java new file mode 100644 index 00000000000..48ef646ab0b --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/EagleOfTheWatch.java @@ -0,0 +1,65 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.VigilanceAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class EagleOfTheWatch extends CardImpl { + + public EagleOfTheWatch(UUID ownerId) { + super(ownerId, 275, "Eagle of the Watch", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{W}"); + this.expansionSetCode = "ORI"; + this.subtype.add("Bird"); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // Vigilance + this.addAbility(VigilanceAbility.getInstance()); + } + + public EagleOfTheWatch(final EagleOfTheWatch card) { + super(card); + } + + @Override + public EagleOfTheWatch copy() { + return new EagleOfTheWatch(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/ElvishVisionary.java b/Mage.Sets/src/mage/sets/magicorigins/ElvishVisionary.java new file mode 100644 index 00000000000..d901aee1be2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/ElvishVisionary.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class ElvishVisionary extends mage.sets.shardsofalara.ElvishVisionary { + + public ElvishVisionary(UUID ownerId) { + super(ownerId); + this.cardNumber = 999; + this.expansionSetCode = "ORI"; + } + + public ElvishVisionary(final ElvishVisionary card) { + super(card); + } + + @Override + public ElvishVisionary copy() { + return new ElvishVisionary(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/FieryConclusion.java b/Mage.Sets/src/mage/sets/magicorigins/FieryConclusion.java new file mode 100644 index 00000000000..a973a8e8d1b --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/FieryConclusion.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class FieryConclusion extends mage.sets.ravnica.FieryConclusion { + + public FieryConclusion(UUID ownerId) { + super(ownerId); + this.cardNumber = 999; + this.expansionSetCode = "ORI"; + } + + public FieryConclusion(final FieryConclusion card) { + super(card); + } + + @Override + public FieryConclusion copy() { + return new FieryConclusion(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/FieryHellhound.java b/Mage.Sets/src/mage/sets/magicorigins/FieryHellhound.java new file mode 100644 index 00000000000..7c1fa061165 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/FieryHellhound.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class FieryHellhound extends mage.sets.magic2010.FieryHellhound { + + public FieryHellhound(UUID ownerId) { + super(ownerId); + this.cardNumber = 284; + this.expansionSetCode = "ORI"; + } + + public FieryHellhound(final FieryHellhound card) { + super(card); + } + + @Override + public FieryHellhound copy() { + return new FieryHellhound(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/FleshToDust.java b/Mage.Sets/src/mage/sets/magicorigins/FleshToDust.java new file mode 100644 index 00000000000..2c04313f824 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/FleshToDust.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class FleshToDust extends mage.sets.magic2015.FleshToDust { + + public FleshToDust(UUID ownerId) { + super(ownerId); + this.cardNumber = 280; + this.expansionSetCode = "ORI"; + } + + public FleshToDust(final FleshToDust card) { + super(card); + } + + @Override + public FleshToDust copy() { + return new FleshToDust(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/GoldForgedSentinel.java b/Mage.Sets/src/mage/sets/magicorigins/GoldForgedSentinel.java new file mode 100644 index 00000000000..418337f87b1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/GoldForgedSentinel.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class GoldForgedSentinel extends mage.sets.journeyintonyx.GoldForgedSentinel { + + public GoldForgedSentinel(UUID ownerId) { + super(ownerId); + this.cardNumber = 999; + this.expansionSetCode = "ORI"; + } + + public GoldForgedSentinel(final GoldForgedSentinel card) { + super(card); + } + + @Override + public GoldForgedSentinel copy() { + return new GoldForgedSentinel(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/HitchclawRecluse.java b/Mage.Sets/src/mage/sets/magicorigins/HitchclawRecluse.java new file mode 100644 index 00000000000..23193c76d9b --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/HitchclawRecluse.java @@ -0,0 +1,62 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.keyword.ReachAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class HitchclawRecluse extends CardImpl { + + public HitchclawRecluse(UUID ownerId) { + super(ownerId, 181, "Hitchclaw Recluse", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{2}{G}"); + this.expansionSetCode = "ORI"; + this.subtype.add("Spider"); + this.power = new MageInt(1); + this.toughness = new MageInt(4); + + // Reach + this.addAbility(ReachAbility.getInstance()); + } + + public HitchclawRecluse(final HitchclawRecluse card) { + super(card); + } + + @Override + public HitchclawRecluse copy() { + return new HitchclawRecluse(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/Hydrolash.java b/Mage.Sets/src/mage/sets/magicorigins/Hydrolash.java new file mode 100644 index 00000000000..73e088a3dc6 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/Hydrolash.java @@ -0,0 +1,63 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.continuous.BoostAllEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.filter.common.FilterAttackingCreature; + +/** + * + * @author LevelX2 + */ +public class Hydrolash extends CardImpl { + + public Hydrolash(UUID ownerId) { + super(ownerId, 59, "Hydrolash", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{2}{U}"); + this.expansionSetCode = "ORI"; + + // Attacking creatures get -2/-0 until end of turn. + this.getSpellAbility().addEffect(new BoostAllEffect(-2, 0, Duration.EndOfTurn, new FilterAttackingCreature(), false)); + // Draw a card. + this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); + } + + public Hydrolash(final Hydrolash card) { + super(card); + } + + @Override + public Hydrolash copy() { + return new Hydrolash(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/IntoTheVoid.java b/Mage.Sets/src/mage/sets/magicorigins/IntoTheVoid.java new file mode 100644 index 00000000000..8f4a7129709 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/IntoTheVoid.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class IntoTheVoid extends mage.sets.avacynrestored.IntoTheVoid { + + public IntoTheVoid(UUID ownerId) { + super(ownerId); + this.cardNumber = 277; + this.expansionSetCode = "ORI"; + } + + public IntoTheVoid(final IntoTheVoid card) { + super(card); + } + + @Override + public IntoTheVoid copy() { + return new IntoTheVoid(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/JayemdaeTome.java b/Mage.Sets/src/mage/sets/magicorigins/JayemdaeTome.java new file mode 100644 index 00000000000..8588e525641 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/JayemdaeTome.java @@ -0,0 +1,54 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class JayemdaeTome extends mage.sets.tenthedition.JayemdaeTome { + + public JayemdaeTome(UUID ownerId) { + super(ownerId); + this.cardNumber = 999; + this.expansionSetCode = "ORI"; + this.rarity = Rarity.UNCOMMON; + } + + public JayemdaeTome(final JayemdaeTome card) { + super(card); + } + + @Override + public JayemdaeTome copy() { + return new JayemdaeTome(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/LeafGilder.java b/Mage.Sets/src/mage/sets/magicorigins/LeafGilder.java new file mode 100644 index 00000000000..5c2ef28e0af --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/LeafGilder.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class LeafGilder extends mage.sets.lorwyn.LeafGilder { + + public LeafGilder(UUID ownerId) { + super(ownerId); + this.cardNumber = 999; + this.expansionSetCode = "ORI"; + } + + public LeafGilder(final LeafGilder card) { + super(card); + } + + @Override + public LeafGilder copy() { + return new LeafGilder(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/MahamotiDjinn.java b/Mage.Sets/src/mage/sets/magicorigins/MahamotiDjinn.java new file mode 100644 index 00000000000..b43f3266594 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/MahamotiDjinn.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class MahamotiDjinn extends mage.sets.tenthedition.MahamotiDjinn { + + public MahamotiDjinn(UUID ownerId) { + super(ownerId); + this.cardNumber = 278; + this.expansionSetCode = "ORI"; + } + + public MahamotiDjinn(final MahamotiDjinn card) { + super(card); + } + + @Override + public MahamotiDjinn copy() { + return new MahamotiDjinn(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/MaritimeGuard.java b/Mage.Sets/src/mage/sets/magicorigins/MaritimeGuard.java new file mode 100644 index 00000000000..ffc48924a7a --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/MaritimeGuard.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class MaritimeGuard extends mage.sets.magic2011.MaritimeGuard { + + public MaritimeGuard(UUID ownerId) { + super(ownerId); + this.cardNumber = 999; + this.expansionSetCode = "ORI"; + } + + public MaritimeGuard(final MaritimeGuard card) { + super(card); + } + + @Override + public MaritimeGuard copy() { + return new MaritimeGuard(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/Meteorite.java b/Mage.Sets/src/mage/sets/magicorigins/Meteorite.java new file mode 100644 index 00000000000..f76704a0dba --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/Meteorite.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class Meteorite extends mage.sets.magic2015.Meteorite { + + public Meteorite(UUID ownerId) { + super(ownerId); + this.cardNumber = 999; + this.expansionSetCode = "ORI"; + } + + public Meteorite(final Meteorite card) { + super(card); + } + + @Override + public Meteorite copy() { + return new Meteorite(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/MightyLeap.java b/Mage.Sets/src/mage/sets/magicorigins/MightyLeap.java new file mode 100644 index 00000000000..ca7871a5d01 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/MightyLeap.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class MightyLeap extends mage.sets.magic2011.MightyLeap { + + public MightyLeap(UUID ownerId) { + super(ownerId); + this.cardNumber = 999; + this.expansionSetCode = "ORI"; + } + + public MightyLeap(final MightyLeap card) { + super(card); + } + + @Override + public MightyLeap copy() { + return new MightyLeap(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/MindRot.java b/Mage.Sets/src/mage/sets/magicorigins/MindRot.java new file mode 100644 index 00000000000..00bc85d1f7e --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/MindRot.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class MindRot extends mage.sets.tenthedition.MindRot { + + public MindRot(UUID ownerId) { + super(ownerId); + this.cardNumber = 281; + this.expansionSetCode = "ORI"; + } + + public MindRot(final MindRot card) { + super(card); + } + + @Override + public MindRot copy() { + return new MindRot(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/Nightmare.java b/Mage.Sets/src/mage/sets/magicorigins/Nightmare.java new file mode 100644 index 00000000000..66b16d06b81 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/Nightmare.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class Nightmare extends mage.sets.tenthedition.Nightmare { + + public Nightmare(UUID ownerId) { + super(ownerId); + this.cardNumber = 282; + this.expansionSetCode = "ORI"; + } + + public Nightmare(final Nightmare card) { + super(card); + } + + @Override + public Nightmare copy() { + return new Nightmare(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/Plummet.java b/Mage.Sets/src/mage/sets/magicorigins/Plummet.java new file mode 100644 index 00000000000..656174705bc --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/Plummet.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class Plummet extends mage.sets.magic2011.Plummet { + + public Plummet(UUID ownerId) { + super(ownerId); + this.cardNumber = 286; + this.expansionSetCode = "ORI"; + } + + public Plummet(final Plummet card) { + super(card); + } + + @Override + public Plummet copy() { + return new Plummet(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/PrizedUnicorn.java b/Mage.Sets/src/mage/sets/magicorigins/PrizedUnicorn.java new file mode 100644 index 00000000000..53404983129 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/PrizedUnicorn.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class PrizedUnicorn extends mage.sets.magic2010.PrizedUnicorn { + + public PrizedUnicorn(UUID ownerId) { + super(ownerId); + this.cardNumber = 287; + this.expansionSetCode = "ORI"; + } + + public PrizedUnicorn(final PrizedUnicorn card) { + super(card); + } + + @Override + public PrizedUnicorn copy() { + return new PrizedUnicorn(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/RingwardenOwl.java b/Mage.Sets/src/mage/sets/magicorigins/RingwardenOwl.java new file mode 100644 index 00000000000..5f1b4be7822 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/RingwardenOwl.java @@ -0,0 +1,65 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.ProwessAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class RingwardenOwl extends CardImpl { + + public RingwardenOwl(UUID ownerId) { + super(ownerId, 68, "Ringwarden Owl", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{3}{U}{U}"); + this.expansionSetCode = "ORI"; + this.subtype.add("Bird"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // Prowess + this.addAbility(new ProwessAbility()); + } + + public RingwardenOwl(final RingwardenOwl card) { + super(card); + } + + @Override + public RingwardenOwl copy() { + return new RingwardenOwl(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/RunedServitor.java b/Mage.Sets/src/mage/sets/magicorigins/RunedServitor.java new file mode 100644 index 00000000000..907344659f5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/RunedServitor.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class RunedServitor extends mage.sets.riseoftheeldrazi.RunedServitor { + + public RunedServitor(UUID ownerId) { + super(ownerId); + this.cardNumber = 999; + this.expansionSetCode = "ORI"; + } + + public RunedServitor(final RunedServitor card) { + super(card); + } + + @Override + public RunedServitor copy() { + return new RunedServitor(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/ScrapskinDrake.java b/Mage.Sets/src/mage/sets/magicorigins/ScrapskinDrake.java new file mode 100644 index 00000000000..d4252ebcd87 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/ScrapskinDrake.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class ScrapskinDrake extends mage.sets.avacynrestored.ScrapskinDrake { + + public ScrapskinDrake(UUID ownerId) { + super(ownerId); + this.cardNumber = 999; + this.expansionSetCode = "ORI"; + } + + public ScrapskinDrake(final ScrapskinDrake card) { + super(card); + } + + @Override + public ScrapskinDrake copy() { + return new ScrapskinDrake(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/SengirVampire.java b/Mage.Sets/src/mage/sets/magicorigins/SengirVampire.java new file mode 100644 index 00000000000..22738918ecb --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/SengirVampire.java @@ -0,0 +1,54 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class SengirVampire extends mage.sets.tenthedition.SengirVampire { + + public SengirVampire(UUID ownerId) { + super(ownerId); + this.cardNumber = 283; + this.expansionSetCode = "ORI"; + this.rarity = Rarity.UNCOMMON; + } + + public SengirVampire(final SengirVampire card) { + super(card); + } + + @Override + public SengirVampire copy() { + return new SengirVampire(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/SerraAngel.java b/Mage.Sets/src/mage/sets/magicorigins/SerraAngel.java new file mode 100644 index 00000000000..66a988ea548 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/SerraAngel.java @@ -0,0 +1,54 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class SerraAngel extends mage.sets.tenthedition.SerraAngel { + + public SerraAngel(UUID ownerId) { + super(ownerId); + this.cardNumber = 276; + this.expansionSetCode = "ORI"; + this.rarity = Rarity.UNCOMMON; + } + + public SerraAngel(final SerraAngel card) { + super(card); + } + + @Override + public SerraAngel copy() { + return new SerraAngel(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/ShivanDragon.java b/Mage.Sets/src/mage/sets/magicorigins/ShivanDragon.java new file mode 100644 index 00000000000..8b8db501f71 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/ShivanDragon.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class ShivanDragon extends mage.sets.tenthedition.ShivanDragon { + + public ShivanDragon(UUID ownerId) { + super(ownerId); + this.cardNumber = 285; + this.expansionSetCode = "ORI"; + } + + public ShivanDragon(final ShivanDragon card) { + super(card); + } + + @Override + public ShivanDragon copy() { + return new ShivanDragon(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/TerraStomper.java b/Mage.Sets/src/mage/sets/magicorigins/TerraStomper.java new file mode 100644 index 00000000000..ccc15798ad3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/TerraStomper.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class TerraStomper extends mage.sets.zendikar.TerraStomper { + + public TerraStomper(UUID ownerId) { + super(ownerId); + this.cardNumber = 288; + this.expansionSetCode = "ORI"; + } + + public TerraStomper(final TerraStomper card) { + super(card); + } + + @Override + public TerraStomper copy() { + return new TerraStomper(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/TitanicGrowth.java b/Mage.Sets/src/mage/sets/magicorigins/TitanicGrowth.java new file mode 100644 index 00000000000..0a3464df340 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/TitanicGrowth.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class TitanicGrowth extends mage.sets.magic2012.TitanicGrowth { + + public TitanicGrowth(UUID ownerId) { + super(ownerId); + this.cardNumber = 999; + this.expansionSetCode = "ORI"; + } + + public TitanicGrowth(final TitanicGrowth card) { + super(card); + } + + @Override + public TitanicGrowth copy() { + return new TitanicGrowth(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/TitansStrength.java b/Mage.Sets/src/mage/sets/magicorigins/TitansStrength.java new file mode 100644 index 00000000000..fbb3ca18954 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/TitansStrength.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class TitansStrength extends mage.sets.theros.TitansStrength { + + public TitansStrength(UUID ownerId) { + super(ownerId); + this.cardNumber = 999; + this.expansionSetCode = "ORI"; + } + + public TitansStrength(final TitansStrength card) { + super(card); + } + + @Override + public TitansStrength copy() { + return new TitansStrength(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/TowerGeist.java b/Mage.Sets/src/mage/sets/magicorigins/TowerGeist.java new file mode 100644 index 00000000000..83f4e1c1304 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/TowerGeist.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class TowerGeist extends mage.sets.darkascension.TowerGeist { + + public TowerGeist(UUID ownerId) { + super(ownerId); + this.cardNumber = 999; + this.expansionSetCode = "ORI"; + } + + public TowerGeist(final TowerGeist card) { + super(card); + } + + @Override + public TowerGeist copy() { + return new TowerGeist(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/ValorInAkros.java b/Mage.Sets/src/mage/sets/magicorigins/ValorInAkros.java new file mode 100644 index 00000000000..82f5128b61c --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/ValorInAkros.java @@ -0,0 +1,60 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; +import mage.abilities.common.CreatureEntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.continuous.BoostControlledEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; + +/** + * + * @author LevelX2 + */ +public class ValorInAkros extends CardImpl { + + public ValorInAkros(UUID ownerId) { + super(ownerId, 39, "Valor in Akros", Rarity.UNCOMMON, new CardType[]{CardType.ENCHANTMENT}, "{3}{W}"); + this.expansionSetCode = "ORI"; + + // Whenever a creature enters the battlefield under your control, creatures you control get +1/+1 until end of turn. + this.addAbility(new CreatureEntersBattlefieldTriggeredAbility(new BoostControlledEffect(1,1,Duration.EndOfTurn))); + } + + public ValorInAkros(final ValorInAkros card) { + super(card); + } + + @Override + public ValorInAkros copy() { + return new ValorInAkros(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/VastwoodGorger.java b/Mage.Sets/src/mage/sets/magicorigins/VastwoodGorger.java new file mode 100644 index 00000000000..d63e8419778 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/VastwoodGorger.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class VastwoodGorger extends mage.sets.zendikar.VastwoodGorger { + + public VastwoodGorger(UUID ownerId) { + super(ownerId); + this.cardNumber = 999; + this.expansionSetCode = "ORI"; + } + + public VastwoodGorger(final VastwoodGorger card) { + super(card); + } + + @Override + public VastwoodGorger copy() { + return new VastwoodGorger(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/WeaveFate.java b/Mage.Sets/src/mage/sets/magicorigins/WeaveFate.java new file mode 100644 index 00000000000..88eef44bb47 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/WeaveFate.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class WeaveFate extends mage.sets.khansoftarkir.WeaveFate { + + public WeaveFate(UUID ownerId) { + super(ownerId); + this.cardNumber = 279; + this.expansionSetCode = "ORI"; + } + + public WeaveFate(final WeaveFate card) { + super(card); + } + + @Override + public WeaveFate copy() { + return new WeaveFate(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/WeightOfTheUnderworld.java b/Mage.Sets/src/mage/sets/magicorigins/WeightOfTheUnderworld.java new file mode 100644 index 00000000000..a2152d252aa --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/WeightOfTheUnderworld.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class WeightOfTheUnderworld extends mage.sets.bornofthegods.WeightOfTheUnderworld { + + public WeightOfTheUnderworld(UUID ownerId) { + super(ownerId); + this.cardNumber = 999; + this.expansionSetCode = "ORI"; + } + + public WeightOfTheUnderworld(final WeightOfTheUnderworld card) { + super(card); + } + + @Override + public WeightOfTheUnderworld copy() { + return new WeightOfTheUnderworld(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/YevasForcemage.java b/Mage.Sets/src/mage/sets/magicorigins/YevasForcemage.java new file mode 100644 index 00000000000..9aeebb11921 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/YevasForcemage.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class YevasForcemage extends mage.sets.magic2013.YevasForcemage { + + public YevasForcemage(UUID ownerId) { + super(ownerId); + this.cardNumber = 999; + this.expansionSetCode = "ORI"; + } + + public YevasForcemage(final YevasForcemage card) { + super(card); + } + + @Override + public YevasForcemage copy() { + return new YevasForcemage(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magicorigins/YokedOx.java b/Mage.Sets/src/mage/sets/magicorigins/YokedOx.java new file mode 100644 index 00000000000..a8782b64095 --- /dev/null +++ b/Mage.Sets/src/mage/sets/magicorigins/YokedOx.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.magicorigins; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class YokedOx extends mage.sets.theros.YokedOx { + + public YokedOx(UUID ownerId) { + super(ownerId); + this.cardNumber = 999; + this.expansionSetCode = "ORI"; + } + + public YokedOx(final YokedOx card) { + super(card); + } + + @Override + public YokedOx copy() { + return new YokedOx(this); + } +} diff --git a/Mage.Sets/src/mage/sets/mastersedition/ErgRaiders.java b/Mage.Sets/src/mage/sets/mastersedition/ErgRaiders.java new file mode 100644 index 00000000000..854f83d1a03 --- /dev/null +++ b/Mage.Sets/src/mage/sets/mastersedition/ErgRaiders.java @@ -0,0 +1,53 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.mastersedition; + +import java.util.UUID; + +/** + * + * @author LoneFox + + */ +public class ErgRaiders extends mage.sets.fourthedition.ErgRaiders { + + public ErgRaiders(UUID ownerId) { + super(ownerId); + this.cardNumber = 68; + this.expansionSetCode = "MED"; + } + + public ErgRaiders(final ErgRaiders card) { + super(card); + } + + @Override + public ErgRaiders copy() { + return new ErgRaiders(this); + } +} diff --git a/Mage.Sets/src/mage/sets/mastersedition/HymnToTourach.java b/Mage.Sets/src/mage/sets/mastersedition/HymnToTourach.java index 1d8d6d5d373..21e4af02e9f 100644 --- a/Mage.Sets/src/mage/sets/mastersedition/HymnToTourach.java +++ b/Mage.Sets/src/mage/sets/mastersedition/HymnToTourach.java @@ -34,7 +34,7 @@ import mage.constants.Rarity; * * @author LevelX2 */ -public class HymnToTourach extends mage.sets.fallenempires.HymnToTourach { +public class HymnToTourach extends mage.sets.fallenempires.HymnToTourach1 { public HymnToTourach(UUID ownerId) { super(ownerId); diff --git a/Mage.Sets/src/mage/sets/mastersedition/OrderOfLeitbur.java b/Mage.Sets/src/mage/sets/mastersedition/OrderOfLeitbur.java new file mode 100644 index 00000000000..fae1e77830f --- /dev/null +++ b/Mage.Sets/src/mage/sets/mastersedition/OrderOfLeitbur.java @@ -0,0 +1,87 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.mastersedition; + +import java.util.UUID; +import mage.MageInt; +import mage.ObjectColor; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.keyword.FirstStrikeAbility; +import mage.abilities.keyword.ProtectionAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.filter.predicate.mageobject.ColorPredicate; + +/** + * + * @author LoneFox + + */ +public class OrderOfLeitbur extends CardImpl { + + private static final FilterCard filter = new FilterCard("Black"); + + static { + filter.add(new ColorPredicate(ObjectColor.BLACK)); + } + + public OrderOfLeitbur(UUID ownerId) { + super(ownerId, 22, "Order of Leitbur", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{W}{W}"); + this.expansionSetCode = "MED"; + this.subtype.add("Human"); + this.subtype.add("Cleric"); + this.subtype.add("Knight"); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // Protection from black + this.addAbility(new ProtectionAbility(filter)); + + // {W}: Order of Leitbur gains first strike until end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilitySourceEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn), new ManaCostsImpl("{W}"))); + + // {W}{W}: Order of Leitbur gets +1/+0 until end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1,0, Duration.EndOfTurn), new ManaCostsImpl("{W}{W}"))); + } + + public OrderOfLeitbur(final OrderOfLeitbur card) { + super(card); + } + + @Override + public OrderOfLeitbur copy() { + return new OrderOfLeitbur(this); + } +} diff --git a/Mage.Sets/src/mage/sets/mastersedition/OrderOfTheEbonHand.java b/Mage.Sets/src/mage/sets/mastersedition/OrderOfTheEbonHand.java new file mode 100644 index 00000000000..2bbbd28ddca --- /dev/null +++ b/Mage.Sets/src/mage/sets/mastersedition/OrderOfTheEbonHand.java @@ -0,0 +1,86 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.mastersedition; + +import java.util.UUID; +import mage.MageInt; +import mage.ObjectColor; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.keyword.FirstStrikeAbility; +import mage.abilities.keyword.ProtectionAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.filter.predicate.mageobject.ColorPredicate; + +/** + * + * @author LoneFox + + */ +public class OrderOfTheEbonHand extends CardImpl { + + private static final FilterCard filter = new FilterCard("White"); + + static { + filter.add(new ColorPredicate(ObjectColor.WHITE)); + } + + public OrderOfTheEbonHand(UUID ownerId) { + super(ownerId, 78, "Order of the Ebon Hand", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{B}{B}"); + this.expansionSetCode = "MED"; + this.subtype.add("Cleric"); + this.subtype.add("Knight"); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // Protection from white + this.addAbility(new ProtectionAbility(filter)); + + // {B}: Order of the Ebon Hand gains first strike until end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new GainAbilitySourceEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn), new ManaCostsImpl("{B}"))); + + // {B}{B}: Order of the Ebon Hand gets +1/+0 until end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1,0, Duration.EndOfTurn), new ManaCostsImpl("{B}{B}"))); + } + + public OrderOfTheEbonHand(final OrderOfTheEbonHand card) { + super(card); + } + + @Override + public OrderOfTheEbonHand copy() { + return new OrderOfTheEbonHand(this); + } +} diff --git a/Mage.Sets/src/mage/sets/mastersedition/YavimayaAnts.java b/Mage.Sets/src/mage/sets/mastersedition/YavimayaAnts.java new file mode 100644 index 00000000000..d91f842e169 --- /dev/null +++ b/Mage.Sets/src/mage/sets/mastersedition/YavimayaAnts.java @@ -0,0 +1,53 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.mastersedition; + +import java.util.UUID; + +/** + * + * @author LoneFox + + */ +public class YavimayaAnts extends mage.sets.alliances.YavimayaAnts { + + public YavimayaAnts(UUID ownerId) { + super(ownerId); + this.cardNumber = 140; + this.expansionSetCode = "MED"; + } + + public YavimayaAnts(final YavimayaAnts card) { + super(card); + } + + @Override + public YavimayaAnts copy() { + return new YavimayaAnts(this); + } +} diff --git a/Mage.Sets/src/mage/sets/masterseditionii/IcatianJavelineers.java b/Mage.Sets/src/mage/sets/masterseditionii/IcatianJavelineers.java index cd8d2c60232..5df5c74144e 100644 --- a/Mage.Sets/src/mage/sets/masterseditionii/IcatianJavelineers.java +++ b/Mage.Sets/src/mage/sets/masterseditionii/IcatianJavelineers.java @@ -33,7 +33,7 @@ import java.util.UUID; * * @author LevelX2 */ -public class IcatianJavelineers extends mage.sets.fallenempires.IcatianJavelineers { +public class IcatianJavelineers extends mage.sets.fallenempires.IcatianJavelineers1 { public IcatianJavelineers(UUID ownerId) { super(ownerId); diff --git a/Mage.Sets/src/mage/sets/masterseditionii/KnightOfStromgald.java b/Mage.Sets/src/mage/sets/masterseditionii/KnightOfStromgald.java new file mode 100644 index 00000000000..221d23aee70 --- /dev/null +++ b/Mage.Sets/src/mage/sets/masterseditionii/KnightOfStromgald.java @@ -0,0 +1,53 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.masterseditionii; + +import java.util.UUID; + +/** + * + * @author LoneFox + + */ +public class KnightOfStromgald extends mage.sets.iceage.KnightOfStromgald { + + public KnightOfStromgald(UUID ownerId) { + super(ownerId); + this.cardNumber = 99; + this.expansionSetCode = "ME2"; + } + + public KnightOfStromgald(final KnightOfStromgald card) { + super(card); + } + + @Override + public KnightOfStromgald copy() { + return new KnightOfStromgald(this); + } +} diff --git a/Mage.Sets/src/mage/sets/masterseditionii/NightSoil.java b/Mage.Sets/src/mage/sets/masterseditionii/NightSoil.java index bfd1a3da304..17998657fbb 100644 --- a/Mage.Sets/src/mage/sets/masterseditionii/NightSoil.java +++ b/Mage.Sets/src/mage/sets/masterseditionii/NightSoil.java @@ -34,7 +34,7 @@ import mage.constants.Rarity; * * @author LevelX2 */ -public class NightSoil extends mage.sets.fallenempires.NightSoil { +public class NightSoil extends mage.sets.fallenempires.NightSoil1 { public NightSoil(UUID ownerId) { super(ownerId); diff --git a/Mage.Sets/src/mage/sets/masterseditionii/OrcishCannoneers.java b/Mage.Sets/src/mage/sets/masterseditionii/OrcishCannoneers.java new file mode 100644 index 00000000000..ad2ace68f89 --- /dev/null +++ b/Mage.Sets/src/mage/sets/masterseditionii/OrcishCannoneers.java @@ -0,0 +1,53 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.masterseditionii; + +import java.util.UUID; + +/** + * + * @author LoneFox + + */ +public class OrcishCannoneers extends mage.sets.iceage.OrcishCannoneers { + + public OrcishCannoneers(UUID ownerId) { + super(ownerId); + this.cardNumber = 138; + this.expansionSetCode = "ME2"; + } + + public OrcishCannoneers(final OrcishCannoneers card) { + super(card); + } + + @Override + public OrcishCannoneers copy() { + return new OrcishCannoneers(this); + } +} diff --git a/Mage.Sets/src/mage/sets/masterseditionii/OrderOfTheWhiteShield.java b/Mage.Sets/src/mage/sets/masterseditionii/OrderOfTheWhiteShield.java new file mode 100644 index 00000000000..0f056198a83 --- /dev/null +++ b/Mage.Sets/src/mage/sets/masterseditionii/OrderOfTheWhiteShield.java @@ -0,0 +1,53 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.masterseditionii; + +import java.util.UUID; + +/** + * + * @author LoneFox + + */ +public class OrderOfTheWhiteShield extends mage.sets.iceage.OrderOfTheWhiteShield { + + public OrderOfTheWhiteShield(UUID ownerId) { + super(ownerId); + this.cardNumber = 26; + this.expansionSetCode = "ME2"; + } + + public OrderOfTheWhiteShield(final OrderOfTheWhiteShield card) { + super(card); + } + + @Override + public OrderOfTheWhiteShield copy() { + return new OrderOfTheWhiteShield(this); + } +} diff --git a/Mage.Sets/src/mage/sets/masterseditionii/SoldeviSimulacrum.java b/Mage.Sets/src/mage/sets/masterseditionii/SoldeviSimulacrum.java new file mode 100644 index 00000000000..9dd318919b9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/masterseditionii/SoldeviSimulacrum.java @@ -0,0 +1,70 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.masterseditionii; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.abilities.keyword.CumulativeUpkeepAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author LoneFox + + */ +public class SoldeviSimulacrum extends CardImpl { + + public SoldeviSimulacrum(UUID ownerId) { + super(ownerId, 222, "Soldevi Simulacrum", Rarity.UNCOMMON, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{4}"); + this.expansionSetCode = "ME2"; + this.subtype.add("Soldier"); + this.power = new MageInt(2); + this.toughness = new MageInt(4); + + // Cumulative upkeep {1} + this.addAbility(new CumulativeUpkeepAbility(new ManaCostsImpl("{1}"))); + // {1}: Soldevi Simulacrum gets +1/+0 until end of turn. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1,0, Duration.EndOfTurn), new ManaCostsImpl("{1}"))); + } + + public SoldeviSimulacrum(final SoldeviSimulacrum card) { + super(card); + } + + @Override + public SoldeviSimulacrum copy() { + return new SoldeviSimulacrum(this); + } +} diff --git a/Mage.Sets/src/mage/sets/masterseditioniii/FireAmbush.java b/Mage.Sets/src/mage/sets/masterseditioniii/FireAmbush.java new file mode 100644 index 00000000000..20a2913cdb7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/masterseditioniii/FireAmbush.java @@ -0,0 +1,53 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.masterseditioniii; + +import java.util.UUID; + +/** + * + * @author LoneFox + + */ +public class FireAmbush extends mage.sets.portalthreekingdoms.FireAmbush { + + public FireAmbush(UUID ownerId) { + super(ownerId); + this.cardNumber = 97; + this.expansionSetCode = "ME3"; + } + + public FireAmbush(final FireAmbush card) { + super(card); + } + + @Override + public FireAmbush copy() { + return new FireAmbush(this); + } +} diff --git a/Mage.Sets/src/mage/sets/masterseditioniii/JungleLion.java b/Mage.Sets/src/mage/sets/masterseditioniii/JungleLion.java new file mode 100644 index 00000000000..3dee958c18a --- /dev/null +++ b/Mage.Sets/src/mage/sets/masterseditioniii/JungleLion.java @@ -0,0 +1,53 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.masterseditioniii; + +import java.util.UUID; + +/** + * + * @author LoneFox + + */ +public class JungleLion extends mage.sets.portal.JungleLion { + + public JungleLion(UUID ownerId) { + super(ownerId); + this.cardNumber = 125; + this.expansionSetCode = "ME3"; + } + + public JungleLion(final JungleLion card) { + super(card); + } + + @Override + public JungleLion copy() { + return new JungleLion(this); + } +} diff --git a/Mage.Sets/src/mage/sets/masterseditioniv/FireImp.java b/Mage.Sets/src/mage/sets/masterseditioniv/FireImp.java new file mode 100644 index 00000000000..5a61e3c4634 --- /dev/null +++ b/Mage.Sets/src/mage/sets/masterseditioniv/FireImp.java @@ -0,0 +1,53 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.masterseditioniv; + +import java.util.UUID; + +/** + * + * @author LoneFox + + */ +public class FireImp extends mage.sets.portal.FireImp { + + public FireImp(UUID ownerId) { + super(ownerId); + this.cardNumber = 113; + this.expansionSetCode = "ME4"; + } + + public FireImp(final FireImp card) { + super(card); + } + + @Override + public FireImp copy() { + return new FireImp(this); + } +} diff --git a/Mage.Sets/src/mage/sets/masterseditioniv/HasranOgress.java b/Mage.Sets/src/mage/sets/masterseditioniv/HasranOgress.java new file mode 100644 index 00000000000..f183ab6e5a5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/masterseditioniv/HasranOgress.java @@ -0,0 +1,103 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.masterseditioniv; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.AttacksTriggeredAbility; +import mage.abilities.costs.Cost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.OneShotEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.game.Game; +import mage.players.Player; + +/** + * + * @author LoneFox + + */ +public class HasranOgress extends CardImpl { + + public HasranOgress(UUID ownerId) { + super(ownerId, 86, "Hasran Ogress", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{B}{B}"); + this.expansionSetCode = "ME4"; + this.subtype.add("Ogre"); + this.power = new MageInt(3); + this.toughness = new MageInt(2); + + // Whenever Hasran Ogress attacks, it deals 3 damage to you unless you pay {2}. + this.addAbility(new AttacksTriggeredAbility(new HasranOgressEffect(), false)); + } + + public HasranOgress(final HasranOgress card) { + super(card); + } + + @Override + public HasranOgress copy() { + return new HasranOgress(this); + } +} + +class HasranOgressEffect extends OneShotEffect { + + public HasranOgressEffect() { + super(Outcome.Damage); + this.staticText = "{this} deals 3 damage to you unless you pay {2}"; + } + + public HasranOgressEffect(final HasranOgressEffect effect) { + super(effect); + } + + @Override + public HasranOgressEffect copy() { + return new HasranOgressEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + Cost cost = new ManaCostsImpl("{2}"); + String message = "Would you like to pay {2} to prevent taking 3 damage from Hasran Ogress?"; + if (!(controller.chooseUse(Outcome.Benefit, message, game) + && cost.pay(source, game, source.getSourceId(), controller.getId(), false))) { + controller.damage(3, source.getSourceId(), game, false, true); + } + return true; + } + return false; + } +} + diff --git a/Mage.Sets/src/mage/sets/mediainserts/OgreArsonist.java b/Mage.Sets/src/mage/sets/mediainserts/OgreArsonist.java new file mode 100644 index 00000000000..c832c8d75a3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/mediainserts/OgreArsonist.java @@ -0,0 +1,55 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.mediainserts; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author LoneFox + + */ +public class OgreArsonist extends mage.sets.portalsecondage.OgreArsonist { + + public OgreArsonist(UUID ownerId) { + super(ownerId); + this.cardNumber = 63; + this.expansionSetCode = "MBP"; + this.rarity = Rarity.SPECIAL; + } + + public OgreArsonist(final OgreArsonist card) { + super(card); + } + + @Override + public OgreArsonist copy() { + return new OgreArsonist(this); + } +} diff --git a/Mage.Sets/src/mage/sets/mercadianmasques/PowerMatrix.java b/Mage.Sets/src/mage/sets/mercadianmasques/PowerMatrix.java new file mode 100644 index 00000000000..753c475ff9b --- /dev/null +++ b/Mage.Sets/src/mage/sets/mercadianmasques/PowerMatrix.java @@ -0,0 +1,83 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.mercadianmasques; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.effects.Effect; +import mage.abilities.keyword.FirstStrikeAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LoneFox + + */ +public class PowerMatrix extends CardImpl { + + public PowerMatrix(UUID ownerId) { + super(ownerId, 309, "Power Matrix", Rarity.RARE, new CardType[]{CardType.ARTIFACT}, "{4}"); + this.expansionSetCode = "MMQ"; + + // {tap}: Target creature gets +1/+1 and gains flying, first strike, and trample until end of turn. + Effect effect = new BoostTargetEffect(1, 1, Duration.EndOfTurn); + effect.setText("Target creature gets +1/+1"); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new TapSourceCost()); + effect = new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn); + effect.setText("and gains flying,"); + ability.addEffect(effect); + effect = new GainAbilityTargetEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn); + effect.setText("first strike,"); + ability.addEffect(effect); + effect = new GainAbilityTargetEffect(TrampleAbility.getInstance(), Duration.EndOfTurn); + effect.setText("and trample until end of turn."); + ability.addEffect(effect); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + } + + public PowerMatrix(final PowerMatrix card) { + super(card); + } + + @Override + public PowerMatrix copy() { + return new PowerMatrix(this); + } +} diff --git a/Mage.Sets/src/mage/sets/mercadianmasques/SaberAnts.java b/Mage.Sets/src/mage/sets/mercadianmasques/SaberAnts.java new file mode 100644 index 00000000000..86d7afe6d90 --- /dev/null +++ b/Mage.Sets/src/mage/sets/mercadianmasques/SaberAnts.java @@ -0,0 +1,98 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.mercadianmasques; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.DealtDamageToSourceTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.permanent.token.InsectToken; +import mage.players.Player; + +/** + * + * @author LoneFox + + */ +public class SaberAnts extends CardImpl { + + public SaberAnts(UUID ownerId) { + super(ownerId, 267, "Saber Ants", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{G}"); + this.expansionSetCode = "MMQ"; + this.subtype.add("Insect"); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + // Whenever Saber Ants is dealt damage, you may put that many 1/1 green Insect creature tokens onto the battlefield. + this.addAbility(new DealtDamageToSourceTriggeredAbility(Zone.BATTLEFIELD, new SaberAntsEffect(), true)); + } + + public SaberAnts(final SaberAnts card) { + super(card); + } + + @Override + public SaberAnts copy() { + return new SaberAnts(this); + } +} + +class SaberAntsEffect extends OneShotEffect { + + public SaberAntsEffect() { + super(Outcome.Benefit); + this.staticText = "you may put that many 1/1 green Insect creature tokens onto the battlefield"; + } + + public SaberAntsEffect(final SaberAntsEffect effect) { + super(effect); + } + + @Override + public SaberAntsEffect copy() { + return new SaberAntsEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + int damage = (Integer) this.getValue("damage"); + return new CreateTokenEffect(new InsectToken(), damage).apply(game, source); + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/mercadianmasques/ThrashingWumpus.java b/Mage.Sets/src/mage/sets/mercadianmasques/ThrashingWumpus.java new file mode 100644 index 00000000000..ca9a4b4e971 --- /dev/null +++ b/Mage.Sets/src/mage/sets/mercadianmasques/ThrashingWumpus.java @@ -0,0 +1,66 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.mercadianmasques; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.DamageEverythingEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author LoneFox + + */ +public class ThrashingWumpus extends CardImpl { + + public ThrashingWumpus(UUID ownerId) { + super(ownerId, 166, "Thrashing Wumpus", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{3}{B}{B}"); + this.expansionSetCode = "MMQ"; + this.subtype.add("Beast"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // {B}: Thrashing Wumpus deals 1 damage to each creature and each player. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageEverythingEffect(1), new ManaCostsImpl("{B}"))); + } + + public ThrashingWumpus(final ThrashingWumpus card) { + super(card); + } + + @Override + public ThrashingWumpus copy() { + return new ThrashingWumpus(this); + } +} diff --git a/Mage.Sets/src/mage/sets/mirage/SewerRats.java b/Mage.Sets/src/mage/sets/mirage/SewerRats.java new file mode 100644 index 00000000000..4422dd8667c --- /dev/null +++ b/Mage.Sets/src/mage/sets/mirage/SewerRats.java @@ -0,0 +1,71 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.mirage; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.LimitedTimesPerTurnActivatedAbility; +import mage.abilities.costs.common.PayLifeCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author LoneFox + + */ +public class SewerRats extends CardImpl { + + public SewerRats(UUID ownerId) { + super(ownerId, 37, "Sewer Rats", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{B}"); + this.expansionSetCode = "MIR"; + this.subtype.add("Rat"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // {B}, Pay 1 life: Sewer Rats gets +1/+0 until end of turn. Activate this ability no more than three times each turn. + Ability ability = new LimitedTimesPerTurnActivatedAbility(Zone.BATTLEFIELD, new BoostSourceEffect(1, 0, Duration.EndOfTurn), new ManaCostsImpl("{B}"), 3); + ability.addCost(new PayLifeCost(1)); + this.addAbility(ability); + } + + public SewerRats(final SewerRats card) { + super(card); + } + + @Override + public SewerRats copy() { + return new SewerRats(this); + } +} diff --git a/Mage.Sets/src/mage/sets/mirrodin/LivingHive.java b/Mage.Sets/src/mage/sets/mirrodin/LivingHive.java new file mode 100644 index 00000000000..d2e38bc750b --- /dev/null +++ b/Mage.Sets/src/mage/sets/mirrodin/LivingHive.java @@ -0,0 +1,103 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.mirrodin; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.game.Game; +import mage.game.permanent.token.InsectToken; +import mage.players.Player; + +/** + * + * @author ilcartographer + */ +public class LivingHive extends CardImpl { + + public LivingHive(UUID ownerId) { + super(ownerId, 124, "Living Hive", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{6}{G}{G}"); + this.expansionSetCode = "MRD"; + this.subtype.add("Elemental"); + this.subtype.add("Insect"); + this.power = new MageInt(6); + this.toughness = new MageInt(6); + + // Trample + this.addAbility(TrampleAbility.getInstance()); + // Whenever Living Hive deals combat damage to a player, put that many 1/1 green Insect creature tokens onto the battlefield. + this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new LivingHiveEffect(), false, true)); + } + + public LivingHive(final LivingHive card) { + super(card); + } + + @Override + public LivingHive copy() { + return new LivingHive(this); + } +} + +class LivingHiveEffect extends OneShotEffect { + + public LivingHiveEffect() { + super(Outcome.PutCreatureInPlay); + this.staticText = "put that many 1/1 green Insect creature tokens onto the battlefield"; + } + + public LivingHiveEffect(final LivingHiveEffect effect) { + super(effect); + } + + @Override + public LivingHiveEffect copy() { + return new LivingHiveEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(targetPointer.getFirst(game, source)); + if (player != null) { + int amount = (Integer)getValue("damage"); + if (amount > 0) { + return new CreateTokenEffect(new InsectToken(), amount).apply(game, source); + } + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/mirrodin/SoulFoundry.java b/Mage.Sets/src/mage/sets/mirrodin/SoulFoundry.java index cd94be9ca31..8e4c6a28792 100644 --- a/Mage.Sets/src/mage/sets/mirrodin/SoulFoundry.java +++ b/Mage.Sets/src/mage/sets/mirrodin/SoulFoundry.java @@ -65,7 +65,7 @@ public class SoulFoundry extends CardImpl { // Imprint - When Soul Foundry enters the battlefield, you may exile a creature card from your hand. this.addAbility(new EntersBattlefieldTriggeredAbility(new SoulFoundryImprintEffect(), true, "Imprint - ")); - // {X}, {tap}: Put a token that's a copy of the exiled card onto the battlefield. X is the converted mana cost of that card. + // {X}, {T}: Put a token that's a copy of the exiled card onto the battlefield. X is the converted mana cost of that card. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SoulFoundryEffect(), new ManaCostsImpl("{X}")); ability.addCost(new TapSourceCost()); this.addAbility(ability); @@ -78,20 +78,23 @@ public class SoulFoundry extends CardImpl { @Override public void adjustCosts(Ability ability, Game game) { - Permanent card = game.getPermanent(ability.getSourceId()); - if (card != null) { - if (card.getImprinted().size() > 0) { - Card imprinted = game.getCard(card.getImprinted().get(0)); - if (imprinted != null) { - ability.getManaCostsToPay().add(0, new GenericManaCost(imprinted.getManaCost().convertedManaCost())); + if (ability instanceof SimpleActivatedAbility) { + Permanent sourcePermanent = game.getPermanent(ability.getSourceId()); + if (sourcePermanent != null) { + if (sourcePermanent.getImprinted().size() > 0) { + Card imprinted = game.getCard(sourcePermanent.getImprinted().get(0)); + if (imprinted != null) { + ability.getManaCostsToPay().clear(); + ability.getManaCostsToPay().add(0, new GenericManaCost(imprinted.getManaCost().convertedManaCost())); + } } } - } - // no {X} anymore as we already have imprinted the card with defined manacost - for (ManaCost cost : ability.getManaCostsToPay()) { - if (cost instanceof VariableCost) { - cost.setPaid(); + // no {X} anymore as we already have imprinted the card with defined manacost + for (ManaCost cost : ability.getManaCostsToPay()) { + if (cost instanceof VariableCost) { + cost.setPaid(); + } } } } diff --git a/Mage.Sets/src/mage/sets/newphyrexia/ApostlesBlessing.java b/Mage.Sets/src/mage/sets/newphyrexia/ApostlesBlessing.java index 79bdbcafa4f..1106bb635aa 100644 --- a/Mage.Sets/src/mage/sets/newphyrexia/ApostlesBlessing.java +++ b/Mage.Sets/src/mage/sets/newphyrexia/ApostlesBlessing.java @@ -87,7 +87,7 @@ class ApostlesBlessingEffect extends OneShotEffect { public ApostlesBlessingEffect() { super(Outcome.AddAbility); - this.staticText = "Target artifact or creature gains protection from artifacts or from the color of your choice until end of turn"; + this.staticText = "Target artifact or creature you control gains protection from artifacts or from the color of your choice until end of turn"; } public ApostlesBlessingEffect(final ApostlesBlessingEffect effect) { diff --git a/Mage.Sets/src/mage/sets/newphyrexia/PhyrexianMetamorph.java b/Mage.Sets/src/mage/sets/newphyrexia/PhyrexianMetamorph.java index c4ca04c7f52..6948b40a292 100644 --- a/Mage.Sets/src/mage/sets/newphyrexia/PhyrexianMetamorph.java +++ b/Mage.Sets/src/mage/sets/newphyrexia/PhyrexianMetamorph.java @@ -36,8 +36,10 @@ import mage.constants.Zone; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.Effect; import mage.abilities.effects.EntersBattlefieldEffect; import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.CopyPermanentEffect; import mage.cards.CardImpl; import mage.filter.FilterPermanent; import mage.filter.predicate.Predicates; @@ -54,7 +56,15 @@ import mage.util.functions.ApplyToPermanent; * @author Loki */ public class PhyrexianMetamorph extends CardImpl { + + private static final FilterPermanent filter = new FilterPermanent("artifact or creature"); + static { + filter.add(Predicates.or( + new CardTypePredicate(CardType.ARTIFACT), + new CardTypePredicate(CardType.CREATURE))); + } + public PhyrexianMetamorph (UUID ownerId) { super(ownerId, 42, "Phyrexian Metamorph", Rarity.RARE, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{3}{UP}"); this.expansionSetCode = "NPH"; @@ -63,10 +73,21 @@ public class PhyrexianMetamorph extends CardImpl { this.power = new MageInt(0); this.toughness = new MageInt(0); - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new EntersBattlefieldEffect( - new PhyrexianMetamorphEffect(), - "You may have {this} enter the battlefield as a copy of any artifact or creature on the battlefield, except it's an artifact in addition to its other types", - true)); + ApplyToPermanent phyrexianMetamorphApplier = new ApplyToPermanent() { + @Override + public Boolean apply(Game game, Permanent permanent) { + if (!permanent.getCardType().contains(CardType.ARTIFACT)) { + permanent.getCardType().add(CardType.ARTIFACT); + } + return true; + } + }; + + // {UP} ( can be paid with either {U} or 2 life.) + // You may have Phyrexian Metamorph enter the battlefield as a copy of any artifact or creature on the battlefield, except it's an artifact in addition to its other types. + Effect effect = new CopyPermanentEffect(filter, phyrexianMetamorphApplier); + effect.setText("You may have {this} enter the battlefield as a copy of any artifact or creature on the battlefield, except it's an artifact in addition to its other types"); + Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new EntersBattlefieldEffect(effect)); this.addAbility(ability); } @@ -80,56 +101,3 @@ public class PhyrexianMetamorph extends CardImpl { } } - -class PhyrexianMetamorphEffect extends OneShotEffect { - - private static final FilterPermanent filter = new FilterPermanent("artifact or creature"); - - static { - filter.add(Predicates.or( - new CardTypePredicate(CardType.ARTIFACT), - new CardTypePredicate(CardType.CREATURE))); - } - - public PhyrexianMetamorphEffect() { - super(Outcome.Copy); - } - - public PhyrexianMetamorphEffect(final PhyrexianMetamorphEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - Player player = game.getPlayer(source.getControllerId()); - Permanent sourcePermanent = game.getPermanent(source.getSourceId()); - if (player != null && sourcePermanent != null) { - Target target = new TargetPermanent(filter); - target.setNotTarget(true); - if (target.canChoose(source.getControllerId(), game)) { - player.choose(Outcome.Copy, target, source.getSourceId(), game); - Permanent copyFromPermanent = game.getPermanent(target.getFirstTarget()); - if (copyFromPermanent != null) { - game.copyPermanent(copyFromPermanent, sourcePermanent, source, new ApplyToPermanent() { - @Override - public Boolean apply(Game game, Permanent permanent) { - if (!permanent.getCardType().contains(CardType.ARTIFACT)) { - permanent.getCardType().add(CardType.ARTIFACT); - } - return true; - } - }); - - return true; - } - } - } - return false; - } - - @Override - public PhyrexianMetamorphEffect copy() { - return new PhyrexianMetamorphEffect(this); - } - -} diff --git a/Mage.Sets/src/mage/sets/odyssey/StillLife.java b/Mage.Sets/src/mage/sets/odyssey/StillLife.java new file mode 100644 index 00000000000..97e9d7d2ee9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/odyssey/StillLife.java @@ -0,0 +1,76 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.odyssey; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.game.permanent.token.Token; + +/** + * + * @author LoneFox + + */ +public class StillLife extends CardImpl { + + public StillLife(UUID ownerId) { + super(ownerId, 275, "Still Life", Rarity.UNCOMMON, new CardType[]{CardType.ENCHANTMENT}, "{1}{G}{G}"); + this.expansionSetCode = "ODY"; + + // {G}{G}: Still Life becomes a 4/3 Centaur creature until end of turn. It's still an enchantment. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BecomesCreatureSourceEffect(new StillLifeCentaur(), "", Duration.EndOfTurn), new ManaCostsImpl("{G}{G}"))); + } + + public StillLife(final StillLife card) { + super(card); + } + + @Override + public StillLife copy() { + return new StillLife(this); + } +} + +class StillLifeCentaur extends Token { + + public StillLifeCentaur() { + super("Centaur", "a 4/3 Centaur creature token"); + cardType.add(CardType.CREATURE); + subtype.add("Centaur"); + power = new MageInt(4); + toughness = new MageInt(3); + } +} diff --git a/Mage.Sets/src/mage/sets/planechase/LivingHive.java b/Mage.Sets/src/mage/sets/planechase/LivingHive.java new file mode 100644 index 00000000000..1b502f6e2eb --- /dev/null +++ b/Mage.Sets/src/mage/sets/planechase/LivingHive.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.planechase; + +import java.util.UUID; + +/** + * + * @author ilcartographer + */ +public class LivingHive extends mage.sets.mirrodin.LivingHive { + + public LivingHive(UUID ownerId) { + super(ownerId); + this.cardNumber = 75; + this.expansionSetCode = "HOP"; + } + + public LivingHive(final LivingHive card) { + super(card); + } + + @Override + public LivingHive copy() { + return new LivingHive(this); + } +} diff --git a/Mage.Sets/src/mage/sets/planeshift/PhyrexianScuta.java b/Mage.Sets/src/mage/sets/planeshift/PhyrexianScuta.java new file mode 100644 index 00000000000..5a43de13839 --- /dev/null +++ b/Mage.Sets/src/mage/sets/planeshift/PhyrexianScuta.java @@ -0,0 +1,71 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.planeshift; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.condition.common.KickedCondition; +import mage.abilities.costs.common.PayLifeCost; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.keyword.KickerAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.counters.CounterType; + +/** + * + * @author LoneFox + + */ +public class PhyrexianScuta extends CardImpl { + + public PhyrexianScuta(UUID ownerId) { + super(ownerId, 51, "Phyrexian Scuta", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{3}{B}"); + this.expansionSetCode = "PLS"; + this.subtype.add("Zombie"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Kicker-Pay 3 life. + this.addAbility(new KickerAbility(new PayLifeCost(3))); + // If Phyrexian Scuta was kicked, it enters the battlefield with two +1/+1 counters on it. + this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance(2)), KickedCondition.getInstance(), + true, "If Phyrexian Scuta was kicked, it enters the battlefield with two +1/+1 counters on it.", "")); + } + + public PhyrexianScuta(final PhyrexianScuta card) { + super(card); + } + + @Override + public PhyrexianScuta copy() { + return new PhyrexianScuta(this); + } +} diff --git a/Mage.Sets/src/mage/sets/planeshift/SinisterStrength.java b/Mage.Sets/src/mage/sets/planeshift/SinisterStrength.java new file mode 100644 index 00000000000..56b6eda461f --- /dev/null +++ b/Mage.Sets/src/mage/sets/planeshift/SinisterStrength.java @@ -0,0 +1,85 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.planeshift; + +import java.util.UUID; +import mage.ObjectColor; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.continuous.BoostEnchantedEffect; +import mage.abilities.effects.common.continuous.SetCardColorAttachedEffect; +import mage.abilities.keyword.EnchantAbility; +import mage.cards.CardImpl; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.TargetPermanent; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LoneFox + + */ +public class SinisterStrength extends CardImpl { + + public SinisterStrength(UUID ownerId) { + super(ownerId, 54, "Sinister Strength", Rarity.COMMON, new CardType[]{CardType.ENCHANTMENT}, "{1}{B}"); + this.expansionSetCode = "PLS"; + this.subtype.add("Aura"); + + // Enchant creature + TargetPermanent auraTarget = new TargetCreaturePermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); + Ability ability = new EnchantAbility(auraTarget.getTargetName()); + this.addAbility(ability); + // Enchanted creature gets +3/+1 and is black. + Effect effect = new BoostEnchantedEffect(3, 1); + effect.setText("Enchanted creature gets +3/+1"); + ability = new SimpleStaticAbility(Zone.BATTLEFIELD, effect); + effect = new SetCardColorAttachedEffect(ObjectColor.BLACK, Duration.WhileOnBattlefield, AttachmentType.AURA); + effect.setText("and is black"); + ability.addEffect(effect); + this.addAbility(ability); + } + + public SinisterStrength(final SinisterStrength card) { + super(card); + } + + @Override + public SinisterStrength copy() { + return new SinisterStrength(this); + } +} diff --git a/Mage.Sets/src/mage/sets/portal/FireImp.java b/Mage.Sets/src/mage/sets/portal/FireImp.java new file mode 100644 index 00000000000..613ef39ba63 --- /dev/null +++ b/Mage.Sets/src/mage/sets/portal/FireImp.java @@ -0,0 +1,68 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.portal; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LoneFox + + */ +public class FireImp extends CardImpl { + + public FireImp(UUID ownerId) { + super(ownerId, 131, "Fire Imp", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{2}{R}"); + this.expansionSetCode = "POR"; + this.subtype.add("Imp"); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // When Fire Imp enters the battlefield, it deals 2 damage to target creature. + Ability ability = new EntersBattlefieldTriggeredAbility(new DamageTargetEffect(2), false); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + } + + public FireImp(final FireImp card) { + super(card); + } + + @Override + public FireImp copy() { + return new FireImp(this); + } +} diff --git a/Mage.Sets/src/mage/sets/portal/JungleLion.java b/Mage.Sets/src/mage/sets/portal/JungleLion.java new file mode 100644 index 00000000000..96cc8628217 --- /dev/null +++ b/Mage.Sets/src/mage/sets/portal/JungleLion.java @@ -0,0 +1,63 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.portal; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.CantBlockAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author LoneFox + + */ +public class JungleLion extends CardImpl { + + public JungleLion(UUID ownerId) { + super(ownerId, 96, "Jungle Lion", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{G}"); + this.expansionSetCode = "POR"; + this.subtype.add("Cat"); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // Jungle Lion can't block. + this.addAbility(new CantBlockAbility()); + } + + public JungleLion(final JungleLion card) { + super(card); + } + + @Override + public JungleLion copy() { + return new JungleLion(this); + } +} diff --git a/Mage.Sets/src/mage/sets/portal/MercenaryKnight.java b/Mage.Sets/src/mage/sets/portal/MercenaryKnight.java new file mode 100644 index 00000000000..7aba7fa471e --- /dev/null +++ b/Mage.Sets/src/mage/sets/portal/MercenaryKnight.java @@ -0,0 +1,69 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.portal; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.costs.common.DiscardTargetCost; +import mage.abilities.effects.common.SacrificeSourceUnlessPaysEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterCreatureCard; +import mage.target.common.TargetCardInHand; + +/** + * + * @author LoneFox + + */ +public class MercenaryKnight extends CardImpl { + + public MercenaryKnight(UUID ownerId) { + super(ownerId, 22, "Mercenary Knight", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{2}{B}"); + this.expansionSetCode = "POR"; + this.subtype.add("Human"); + this.subtype.add("Mercenary"); + this.subtype.add("Knight"); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // When Mercenary Knight enters the battlefield, sacrifice it unless you discard a creature card. + this.addAbility(new EntersBattlefieldTriggeredAbility(new SacrificeSourceUnlessPaysEffect(new DiscardTargetCost(new TargetCardInHand(new FilterCreatureCard("a creature card")))))); + } + + public MercenaryKnight(final MercenaryKnight card) { + super(card); + } + + @Override + public MercenaryKnight copy() { + return new MercenaryKnight(this); + } +} diff --git a/Mage.Sets/src/mage/sets/portalsecondage/OgreArsonist.java b/Mage.Sets/src/mage/sets/portalsecondage/OgreArsonist.java new file mode 100644 index 00000000000..cb8e78b43f1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/portalsecondage/OgreArsonist.java @@ -0,0 +1,70 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.portalsecondage; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.keyword.EchoAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.common.TargetLandPermanent; + +/** + * + * @author LoneFox + + */ +public class OgreArsonist extends CardImpl { + + public OgreArsonist(UUID ownerId) { + super(ownerId, 110, "Ogre Arsonist", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{4}{R}"); + this.expansionSetCode = "PO2"; + this.subtype.add("Ogre"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // When Ogre Arsonist enters the battlefield, destroy target land. + Ability ability = new EntersBattlefieldTriggeredAbility(new DestroyTargetEffect()); + ability.addTarget(new TargetLandPermanent()); + this.addAbility(ability); + + } + + public OgreArsonist(final OgreArsonist card) { + super(card); + } + + @Override + public OgreArsonist copy() { + return new OgreArsonist(this); + } +} diff --git a/Mage.Sets/src/mage/sets/portalthreekingdoms/FireAmbush.java b/Mage.Sets/src/mage/sets/portalthreekingdoms/FireAmbush.java new file mode 100644 index 00000000000..336a88dc4ca --- /dev/null +++ b/Mage.Sets/src/mage/sets/portalthreekingdoms/FireAmbush.java @@ -0,0 +1,61 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.portalthreekingdoms; + +import java.util.UUID; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.common.TargetCreatureOrPlayer; + +/** + * + * @author LoneFox + + */ +public class FireAmbush extends CardImpl { + + public FireAmbush(UUID ownerId) { + super(ownerId, 111, "Fire Ambush", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{1}{R}"); + this.expansionSetCode = "PTK"; + + // Fire Ambush deals 3 damage to target creature or player. + this.getSpellAbility().addEffect(new DamageTargetEffect(3)); + this.getSpellAbility().addTarget(new TargetCreatureOrPlayer()); + } + + public FireAmbush(final FireAmbush card) { + super(card); + } + + @Override + public FireAmbush copy() { + return new FireAmbush(this); + } +} diff --git a/Mage.Sets/src/mage/sets/portalthreekingdoms/RavagingHorde.java b/Mage.Sets/src/mage/sets/portalthreekingdoms/RavagingHorde.java new file mode 100644 index 00000000000..33c5af074f1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/portalthreekingdoms/RavagingHorde.java @@ -0,0 +1,70 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.portalthreekingdoms; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.keyword.EchoAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.target.common.TargetLandPermanent; + +/** + * + * @author LoneFox + + */ +public class RavagingHorde extends CardImpl { + + public RavagingHorde(UUID ownerId) { + super(ownerId, 118, "Ravaging Horde", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{R}{R}"); + this.expansionSetCode = "PTK"; + this.subtype.add("Human"); + this.subtype.add("Soldier"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // When Ravaging Horde enters the battlefield, destroy target land. + Ability ability = new EntersBattlefieldTriggeredAbility(new DestroyTargetEffect()); + ability.addTarget(new TargetLandPermanent()); + this.addAbility(ability); + } + + public RavagingHorde(final RavagingHorde card) { + super(card); + } + + @Override + public RavagingHorde copy() { + return new RavagingHorde(this); + } +} diff --git a/Mage.Sets/src/mage/sets/prereleaseevents/FalseProphet.java b/Mage.Sets/src/mage/sets/prereleaseevents/FalseProphet.java new file mode 100644 index 00000000000..b288153460b --- /dev/null +++ b/Mage.Sets/src/mage/sets/prereleaseevents/FalseProphet.java @@ -0,0 +1,55 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.prereleaseevents; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author LoneFox + + */ +public class FalseProphet extends mage.sets.urzasdestiny.FalseProphet { + + public FalseProphet(UUID ownerId) { + super(ownerId); + this.cardNumber = 7; + this.expansionSetCode = "PTC"; + this.rarity = Rarity.SPECIAL; + } + + public FalseProphet(final FalseProphet card) { + super(card); + } + + @Override + public FalseProphet copy() { + return new FalseProphet(this); + } +} diff --git a/Mage.Sets/src/mage/sets/ravnica/FollowedFootsteps.java b/Mage.Sets/src/mage/sets/ravnica/FollowedFootsteps.java new file mode 100644 index 00000000000..4ab45ecce4c --- /dev/null +++ b/Mage.Sets/src/mage/sets/ravnica/FollowedFootsteps.java @@ -0,0 +1,109 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.ravnica; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.OnEventTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.keyword.EnchantAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; +import mage.game.permanent.token.EmptyToken; +import mage.target.TargetPermanent; +import mage.target.common.TargetCreaturePermanent; +import mage.util.CardUtil; + +/** + * + * @author LoneFox + + */ +public class FollowedFootsteps extends CardImpl { + + public FollowedFootsteps(UUID ownerId) { + super(ownerId, 51, "Followed Footsteps", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{3}{U}{U}"); + this.expansionSetCode = "RAV"; + this.subtype.add("Aura"); + + // Enchant creature + TargetPermanent auraTarget = new TargetCreaturePermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.Copy)); + Ability ability = new EnchantAbility(auraTarget.getTargetName()); + this.addAbility(ability); + + // At the beginning of your upkeep, put a token that's a copy of enchanted creature onto the battlefield. + this.addAbility(new OnEventTriggeredAbility(GameEvent.EventType.UPKEEP_STEP_PRE, "beginning of your upkeep", new FollowedFootstepsEffect(), false)); + } + + public FollowedFootsteps(final FollowedFootsteps card) { + super(card); + } + + @Override + public FollowedFootsteps copy() { + return new FollowedFootsteps(this); + } +} + +class FollowedFootstepsEffect extends OneShotEffect { + + public FollowedFootstepsEffect() { + super(Outcome.PutCreatureInPlay); + this.staticText = "You put a token onto the battlefield that's a copy of enchanted creature"; + } + + public FollowedFootstepsEffect(final FollowedFootstepsEffect effect) { + super(effect); + } + + @Override + public FollowedFootstepsEffect copy() { + return new FollowedFootstepsEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent enchantment = game.getPermanentOrLKIBattlefield(source.getSourceId()); + Permanent target = game.getPermanentOrLKIBattlefield(enchantment.getAttachedTo()); + if (target != null) { + EmptyToken token = new EmptyToken(); + CardUtil.copyTo(token).from(target); + token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId()); + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/revisededition/ErgRaiders.java b/Mage.Sets/src/mage/sets/revisededition/ErgRaiders.java new file mode 100644 index 00000000000..d6419978e4f --- /dev/null +++ b/Mage.Sets/src/mage/sets/revisededition/ErgRaiders.java @@ -0,0 +1,53 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.revisededition; + +import java.util.UUID; + +/** + * + * @author LoneFox + + */ +public class ErgRaiders extends mage.sets.fourthedition.ErgRaiders { + + public ErgRaiders(UUID ownerId) { + super(ownerId); + this.cardNumber = 17; + this.expansionSetCode = "3ED"; + } + + public ErgRaiders(final ErgRaiders card) { + super(card); + } + + @Override + public ErgRaiders copy() { + return new ErgRaiders(this); + } +} diff --git a/Mage.Sets/src/mage/sets/riseoftheeldrazi/AncientStirrings.java b/Mage.Sets/src/mage/sets/riseoftheeldrazi/AncientStirrings.java index e8d1a74c219..9c08a777ab5 100644 --- a/Mage.Sets/src/mage/sets/riseoftheeldrazi/AncientStirrings.java +++ b/Mage.Sets/src/mage/sets/riseoftheeldrazi/AncientStirrings.java @@ -37,6 +37,7 @@ import mage.filter.FilterCard; import mage.filter.predicate.mageobject.ColorlessPredicate; import java.util.UUID; +import mage.constants.Zone; /** * @author LevelX @@ -54,10 +55,11 @@ public class AncientStirrings extends CardImpl { super(ownerId, 174, "Ancient Stirrings", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{G}"); this.expansionSetCode = "ROE"; - // Look at the top five cards of your library. You may reveal a colorless card from among them and put it into your hand. // Then put the rest on the bottom of your library in any order. (Cards with no colored mana in their mana costs are colorless. Lands are also colorless.) - this.getSpellAbility().addEffect(new LookLibraryAndPickControllerEffect(new StaticValue(5), false, new StaticValue(1), filter, false)); + this.getSpellAbility().addEffect(new LookLibraryAndPickControllerEffect(new StaticValue(5), false, new StaticValue(1), filter, Zone.LIBRARY, + false, true, false, Zone.HAND, true)); + } public AncientStirrings(final AncientStirrings card) { diff --git a/Mage.Sets/src/mage/sets/scourge/ExtraArms.java b/Mage.Sets/src/mage/sets/scourge/ExtraArms.java new file mode 100644 index 00000000000..b148cfeb158 --- /dev/null +++ b/Mage.Sets/src/mage/sets/scourge/ExtraArms.java @@ -0,0 +1,77 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.scourge; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.AttacksAttachedTriggeredAbility; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.keyword.EnchantAbility; +import mage.cards.CardImpl; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.target.TargetPermanent; +import mage.target.common.TargetCreatureOrPlayer; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LoneFox + + */ +public class ExtraArms extends CardImpl { + + public ExtraArms(UUID ownerId) { + super(ownerId, 92, "Extra Arms", Rarity.UNCOMMON, new CardType[]{CardType.ENCHANTMENT}, "{4}{R}"); + this.expansionSetCode = "SCG"; + this.subtype.add("Aura"); + + // Enchant creature + TargetPermanent auraTarget = new TargetCreaturePermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.AddAbility)); + Ability ability = new EnchantAbility(auraTarget.getTargetName()); + this.addAbility(ability); + // Whenever enchanted creature attacks, it deals 2 damage to target creature or player. + ability = new AttacksAttachedTriggeredAbility(new DamageTargetEffect(2), AttachmentType.AURA, false); + ability.addTarget(new TargetCreatureOrPlayer()); + this.addAbility(ability); + } + + public ExtraArms(final ExtraArms card) { + super(card); + } + + @Override + public ExtraArms copy() { + return new ExtraArms(this); + } +} diff --git a/Mage.Sets/src/mage/sets/stronghold/TidalWarrior.java b/Mage.Sets/src/mage/sets/stronghold/TidalWarrior.java new file mode 100644 index 00000000000..56a850505f8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/stronghold/TidalWarrior.java @@ -0,0 +1,72 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.stronghold; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.continuous.BecomesBasicLandTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.common.TargetLandPermanent; + +/** + * + * @author LoneFox + + */ +public class TidalWarrior extends CardImpl { + + public TidalWarrior(UUID ownerId) { + super(ownerId, 47, "Tidal Warrior", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{U}"); + this.expansionSetCode = "STH"; + this.subtype.add("Merfolk"); + this.subtype.add("Warrior"); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // {tap}: Target land becomes an Island until end of turn. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BecomesBasicLandTargetEffect(Duration.EndOfTurn, "Island"), new TapSourceCost()); + ability.addTarget(new TargetLandPermanent()); + this.addAbility(ability); + } + + public TidalWarrior(final TidalWarrior card) { + super(card); + } + + @Override + public TidalWarrior copy() { + return new TidalWarrior(this); + } +} diff --git a/Mage.Sets/src/mage/sets/timeshifted/IcatianJavelineers.java b/Mage.Sets/src/mage/sets/timeshifted/IcatianJavelineers.java index 39aa3d2541f..c2868996632 100644 --- a/Mage.Sets/src/mage/sets/timeshifted/IcatianJavelineers.java +++ b/Mage.Sets/src/mage/sets/timeshifted/IcatianJavelineers.java @@ -34,7 +34,7 @@ import mage.constants.Rarity; * * @author fireshoes */ -public class IcatianJavelineers extends mage.sets.fallenempires.IcatianJavelineers { +public class IcatianJavelineers extends mage.sets.fallenempires.IcatianJavelineers1 { public IcatianJavelineers(UUID ownerId) { super(ownerId); diff --git a/Mage.Sets/src/mage/sets/timespiral/GoblinSkycutter.java b/Mage.Sets/src/mage/sets/timespiral/GoblinSkycutter.java new file mode 100644 index 00000000000..5f5e114a8e6 --- /dev/null +++ b/Mage.Sets/src/mage/sets/timespiral/GoblinSkycutter.java @@ -0,0 +1,83 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.timespiral; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.SacrificeSourceCost; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.effects.common.continuous.LoseAbilityTargetEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LoneFox + + */ +public class GoblinSkycutter extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creature with flying"); + + static { + filter.add(new AbilityPredicate(FlyingAbility.class)); + } + + public GoblinSkycutter(UUID ownerId) { + super(ownerId, 159, "Goblin Skycutter", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{R}"); + this.expansionSetCode = "TSP"; + this.subtype.add("Goblin"); + this.subtype.add("Warrior"); + this.power = new MageInt(2); + this.toughness = new MageInt(1); + + // Sacrifice Goblin Skycutter: Goblin Skycutter deals 2 damage to target creature with flying. That creature loses flying until end of turn. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(2), new SacrificeSourceCost()); + ability.addEffect(new LoseAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn)); + ability.addTarget(new TargetCreaturePermanent(filter)); + this.addAbility(ability); + } + + public GoblinSkycutter(final GoblinSkycutter card) { + super(card); + } + + @Override + public GoblinSkycutter copy() { + return new GoblinSkycutter(this); + } +} diff --git a/Mage.Sets/src/mage/sets/timespiral/SpiketailDrakeling.java b/Mage.Sets/src/mage/sets/timespiral/SpiketailDrakeling.java new file mode 100644 index 00000000000..68b414e1ef1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/timespiral/SpiketailDrakeling.java @@ -0,0 +1,75 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.timespiral; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.SacrificeSourceCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.common.CounterUnlessPaysEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.TargetSpell; + +/** + * + * @author LoneFox + + */ +public class SpiketailDrakeling extends CardImpl { + + public SpiketailDrakeling(UUID ownerId) { + super(ownerId, 80, "Spiketail Drakeling", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{1}{U}{U}"); + this.expansionSetCode = "TSP"; + this.subtype.add("Drake"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + // Sacrifice Spiketail Drakeling: Counter target spell unless its controller pays {2}. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new CounterUnlessPaysEffect(new GenericManaCost(2)), new SacrificeSourceCost()); ability.addTarget(new TargetSpell()); + this.addAbility(ability); + + } + + public SpiketailDrakeling(final SpiketailDrakeling card) { + super(card); + } + + @Override + public SpiketailDrakeling copy() { + return new SpiketailDrakeling(this); + } +} diff --git a/Mage.Sets/src/mage/sets/timespiral/TeferiMageOfZhalfir.java b/Mage.Sets/src/mage/sets/timespiral/TeferiMageOfZhalfir.java index 12ce53027ff..26395fa7c3a 100644 --- a/Mage.Sets/src/mage/sets/timespiral/TeferiMageOfZhalfir.java +++ b/Mage.Sets/src/mage/sets/timespiral/TeferiMageOfZhalfir.java @@ -131,7 +131,14 @@ class TeferiMageOfZhalfirAddFlashEffect extends ContinuousEffectImpl { if (card.getOwnerId().equals(controller.getId()) && card.getCardType().contains(CardType.CREATURE)) { game.getState().addOtherAbility(card, FlashAbility.getInstance()); } - } + } + // commander in command zone + if (controller.getCommanderId() != null && game.getState().getZone(controller.getCommanderId()).equals(Zone.COMMAND)) { + Card card = game.getCard(controller.getCommanderId()); + if (card.getCardType().contains(CardType.CREATURE)) { + game.getState().addOtherAbility(card, FlashAbility.getInstance()); + } + } return true; } return false; diff --git a/Mage.Sets/src/mage/sets/urzasdestiny/FalseProphet.java b/Mage.Sets/src/mage/sets/urzasdestiny/FalseProphet.java new file mode 100644 index 00000000000..aa5f554acac --- /dev/null +++ b/Mage.Sets/src/mage/sets/urzasdestiny/FalseProphet.java @@ -0,0 +1,66 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.urzasdestiny; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.DiesTriggeredAbility; +import mage.abilities.effects.common.ExileAllEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.common.FilterCreaturePermanent; + +/** + * + * @author LoneFox + + */ +public class FalseProphet extends CardImpl { + + public FalseProphet(UUID ownerId) { + super(ownerId, 6, "False Prophet", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{2}{W}{W}"); + this.expansionSetCode = "UDS"; + this.subtype.add("Human"); + this.subtype.add("Cleric"); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // When False Prophet dies, exile all creatures. + this.addAbility(new DiesTriggeredAbility(new ExileAllEffect(new FilterCreaturePermanent()))); + } + + public FalseProphet(final FalseProphet card) { + super(card); + } + + @Override + public FalseProphet copy() { + return new FalseProphet(this); + } +} diff --git a/Mage.Sets/src/mage/sets/urzassaga/Symbiosis.java b/Mage.Sets/src/mage/sets/urzassaga/Symbiosis.java new file mode 100644 index 00000000000..36f382eaba4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/urzassaga/Symbiosis.java @@ -0,0 +1,62 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.urzassaga; + +import java.util.UUID; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author LoneFox + + */ +public class Symbiosis extends CardImpl { + + public Symbiosis(UUID ownerId) { + super(ownerId, 275, "Symbiosis", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{1}{G}"); + this.expansionSetCode = "USG"; + + // Two target creatures each get +2/+2 until end of turn. + this.getSpellAbility().addTarget(new TargetCreaturePermanent(2)); + this.getSpellAbility().addEffect(new BoostTargetEffect(2, 2, Duration.EndOfTurn)); + } + + public Symbiosis(final Symbiosis card) { + super(card); + } + + @Override + public Symbiosis copy() { + return new Symbiosis(this); + } +} diff --git a/Mage.Sets/src/mage/sets/vintagemasters/BragoKingEternal.java b/Mage.Sets/src/mage/sets/vintagemasters/BragoKingEternal.java index bf7928bf32b..3739f406ec1 100644 --- a/Mage.Sets/src/mage/sets/vintagemasters/BragoKingEternal.java +++ b/Mage.Sets/src/mage/sets/vintagemasters/BragoKingEternal.java @@ -40,7 +40,6 @@ import mage.constants.CardType; import mage.constants.Rarity; import mage.constants.Zone; import mage.filter.common.FilterControlledPermanent; -import mage.filter.common.FilterNonlandPermanent; import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.CardTypePredicate; import mage.target.common.TargetControlledPermanent; diff --git a/Mage.Sets/src/mage/sets/vintagemasters/HymnToTourach.java b/Mage.Sets/src/mage/sets/vintagemasters/HymnToTourach.java index 8d891d3d838..c2aabdb54e0 100644 --- a/Mage.Sets/src/mage/sets/vintagemasters/HymnToTourach.java +++ b/Mage.Sets/src/mage/sets/vintagemasters/HymnToTourach.java @@ -34,7 +34,7 @@ import mage.constants.Rarity; * * @author LevelX2 */ -public class HymnToTourach extends mage.sets.fallenempires.HymnToTourach { +public class HymnToTourach extends mage.sets.fallenempires.HymnToTourach1 { public HymnToTourach(UUID ownerId) { super(ownerId); diff --git a/Mage.Sets/src/mage/sets/weatherlight/Disrupt.java b/Mage.Sets/src/mage/sets/weatherlight/Disrupt.java new file mode 100644 index 00000000000..2e32076e0b4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/weatherlight/Disrupt.java @@ -0,0 +1,55 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.weatherlight; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author LoneFox + + */ +public class Disrupt extends mage.sets.invasion.Disrupt { + + public Disrupt(UUID ownerId) { + super(ownerId); + this.cardNumber = 37; + this.expansionSetCode = "WTH"; + this.rarity = Rarity.COMMON; + } + + public Disrupt(final Disrupt card) { + super(card); + } + + @Override + public Disrupt copy() { + return new Disrupt(this); + } +} diff --git a/Mage.Sets/src/mage/sets/weatherlight/GuidedStrike.java b/Mage.Sets/src/mage/sets/weatherlight/GuidedStrike.java new file mode 100644 index 00000000000..3728ecb59e9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/weatherlight/GuidedStrike.java @@ -0,0 +1,73 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.sets.weatherlight; + +import java.util.UUID; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.abilities.effects.Effect; +import mage.abilities.keyword.FirstStrikeAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.target.common.TargetCreaturePermanent; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; + +/** + * + * @author LoneFox + + */ +public class GuidedStrike extends CardImpl { + + public GuidedStrike(UUID ownerId) { + super(ownerId, 132, "Guided Strike", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{1}{W}"); + this.expansionSetCode = "WTH"; + + // Target creature gets +1/+0 and gains first strike until end of turn. + this.getSpellAbility().addTarget(new TargetCreaturePermanent(0, 1)); + Effect effect = new BoostTargetEffect(1, 0, Duration.EndOfTurn); + effect.setText("Target creature gets +1/+0"); + this.getSpellAbility().addEffect(effect); + effect = new GainAbilityTargetEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn); + effect.setText("and gains first strike until end of turn"); + this.getSpellAbility().addEffect(effect); + // Draw a card. + this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); + } + + public GuidedStrike(final GuidedStrike card) { + super(card); + } + + @Override + public GuidedStrike copy() { + return new GuidedStrike(this); + } +} diff --git a/Mage.Sets/src/mage/sets/worldwake/SearingBlaze.java b/Mage.Sets/src/mage/sets/worldwake/SearingBlaze.java index c5b2b73ac36..2cccea80098 100644 --- a/Mage.Sets/src/mage/sets/worldwake/SearingBlaze.java +++ b/Mage.Sets/src/mage/sets/worldwake/SearingBlaze.java @@ -96,24 +96,18 @@ class SearingBlazeEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - Watcher watcher = game.getState().getWatchers().get("LandPlayed", source.getControllerId()); + LandfallWatcher watcher = (LandfallWatcher) game.getState().getWatchers().get("LandPlayed"); Player player = game.getPlayer(source.getTargets().get(0).getFirstTarget()); Permanent creature = game.getPermanent(source.getTargets().get(1).getFirstTarget()); - if (watcher != null && watcher.conditionMet()) { - if (player != null) { - player.damage(3, source.getSourceId(), game, false, true); - } - if (creature != null) { - creature.damage(3, source.getSourceId(), game, false, true); - } + int damage = 1; + if (watcher != null && watcher.landPlayed(source.getControllerId())) { + damage = 3; } - else { - if (player != null) { - player.damage(1, source.getSourceId(), game, false, true); - } - if (creature != null) { - creature.damage(1, source.getSourceId(), game, false, true); - } + if (player != null) { + player.damage(damage, source.getSourceId(), game, false, true); + } + if (creature != null) { + creature.damage(damage, source.getSourceId(), game, false, true); } return true; } @@ -143,7 +137,7 @@ class SearingBlazeTarget extends TargetPermanent { @Override public Set possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) { Set availablePossibleTargets = super.possibleTargets(sourceId, sourceControllerId, game); - Set possibleTargets = new HashSet(); + Set possibleTargets = new HashSet<>(); MageObject object = game.getObject(sourceId); if (object instanceof StackObject) { UUID playerId = ((StackObject)object).getStackAbility().getFirstTarget(); diff --git a/Mage.Sets/src/mage/sets/wpngateway/IcatianJavelineers.java b/Mage.Sets/src/mage/sets/wpngateway/IcatianJavelineers.java index dab3bbbc363..c70e020699e 100644 --- a/Mage.Sets/src/mage/sets/wpngateway/IcatianJavelineers.java +++ b/Mage.Sets/src/mage/sets/wpngateway/IcatianJavelineers.java @@ -34,7 +34,7 @@ import mage.constants.Rarity; * * @author fireshoes */ -public class IcatianJavelineers extends mage.sets.fallenempires.IcatianJavelineers { +public class IcatianJavelineers extends mage.sets.fallenempires.IcatianJavelineers1 { public IcatianJavelineers(UUID ownerId) { super(ownerId); diff --git a/Mage.Stats/pom.xml b/Mage.Stats/pom.xml index 99fed80daa7..c95eae15158 100644 --- a/Mage.Stats/pom.xml +++ b/Mage.Stats/pom.xml @@ -6,7 +6,7 @@ org.mage mage-root - 1.4.0 + 1.4.1 org.mage diff --git a/Mage.Tests/CommanderDuel_UW.dck b/Mage.Tests/CommanderDuel_UW.dck new file mode 100644 index 00000000000..795b083a073 --- /dev/null +++ b/Mage.Tests/CommanderDuel_UW.dck @@ -0,0 +1,70 @@ +NAME:Geoff's Daxos of Meletis +1 [THS:58] Ordeal of Thassa +1 [5ED:388] Mana Vault +1 [THS:14] Gift of Immortality +1 [PC2:12] Spirit Mantle +1 [M13:36] Sublime Archangel +1 [M13:206] Gilded Lotus +1 [M11:5] Armored Ascension +1 [ALA:27] Sigiled Paladin +1 [ALA:26] Sighted-Caste Sorcerer +1 [CON:2] Asha's Favor +1 [M14:210] Fireshrieker +1 [GTC:17] Holy Mantle +1 [CHK:65] Hinder +1 [DGM:96] Render Silent +1 [M13:74] Tricks of the Trade +1 [ISD:229] Mask of Avacyn +1 [GPT:28] Infiltrator's Magemark +14 [THS:234] Island +1 [CMD:261] Sol Ring +1 [THS:25] Ordeal of Heliod +1 [5DN:131] Helm of Kaldra +1 [M12:24] Lifelink +1 [AVR:50] Elgaud Shieldmate +19 [THS:230] Plains +1 [M14:23] Indestructibility +1 [M14:5] Archangel of Thune +1 [CMD:265] Azorius Chancery +1 [ARB:3] Ethercaste Knight +1 [ARB:1] Ardent Plea +1 [M13:18] Guardians of Akrasa +1 [CMD:40] Brainstorm +1 [UDS:139] Thran Dynamo +1 [M12:219] Swiftfoot Boots +1 [THS:39] Aqueous Form +1 [M13:6] Aven Squire +1 [MMA:25] Path to Exile +1 [M13:4] Angelic Benediction +1 [CMD:253] Lightning Greaves +1 [SHM:150] Steel of the Godhead +1 [M13:225] Glacial Fortress +1 [10E:40] Serra's Embrace +1 [JUD:31] Unquestioned Authority +1 [M13:221] Cathedral of War +1 [RTR:9] Ethereal Armor +1 [DDL:27] Battle Mastery +1 [DDL:24] Bonds of Faith +1 [ISD:53] Dissipate +1 [DKA:148] Executioner's Hood +1 [DIS:159] Azorius Signet +1 [GTC:37] Hands of Binding +1 [PC2:112] Quietus Spike +1 [MRD:144] Banshee's Blade +1 [AVR:36] Silverblade Paladin +1 [PC2:115] Whispersilk Cloak +1 [M12:73] Ponder +1 [M13:29] Rhox Faithmender +1 [ALA:1] Akrasan Squire +1 [M13:213] Ring of Thune +1 [UDS:46] Sigil of Sleep +1 [M13:211] Ring of Evos Isle +1 [RTR:241] Hallowed Fountain +1 [7ED:67] Counterspell +1 [ISD:49] Curiosity +1 [SOM:229] Seachrome Coast +1 [PC2:10] Mammoth Umbra +1 [MBS:104] Darksteel Plate +1 [M13:21] Knight of Glory +1 [M13:22] Oblivion Ring +SB: 1 [THS:191] Daxos of Meletis diff --git a/Mage.Tests/pom.xml b/Mage.Tests/pom.xml index 8b5be68e065..5536e82d55f 100644 --- a/Mage.Tests/pom.xml +++ b/Mage.Tests/pom.xml @@ -6,7 +6,7 @@ org.mage mage-root - 1.4.0 + 1.4.1 mage-tests diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/LandfallTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/LandfallTest.java index ef5349b9ae8..0f4ab1f663b 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/LandfallTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/LandfallTest.java @@ -111,5 +111,40 @@ public class LandfallTest extends CardTestPlayerBase { assertLife(playerB, 20); } + + /** + * Searing Blaze's landfall doesn't appear to be working. My opponent played + * a mountain, then played searing blaze targeting my Tasigur, the Golden + * Fang. It only dealt 1 damage to me, where it should've dealt 3, because + * my opponent had played a land. + */ + @Test + public void testSearingBlaze() { + // Searing Blaze deals 1 damage to target player and 1 damage to target creature that player controls. + // Landfall - If you had a land enter the battlefield under your control this turn, Searing Blaze deals 3 damage to that player and 3 damage to that creature instead. + addCard(Zone.HAND, playerA, "Searing Blaze",1); + addCard(Zone.BATTLEFIELD, playerA, "Mountain",1); + addCard(Zone.HAND, playerA, "Mountain"); + + addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion",1); + + + playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Mountain"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Searing Blaze"); + + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerA, "Mountain", 2); + assertGraveyardCount(playerA, "Searing Blaze" , 1); + + assertLife(playerA, 20); + assertLife(playerB, 17); + + assertGraveyardCount(playerB, "Silvercoat Lion" , 1); + + } } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/counterspell/CounterspellTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/counterspell/CounterspellTest.java new file mode 100644 index 00000000000..1481997f5af --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/counterspell/CounterspellTest.java @@ -0,0 +1,80 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package org.mage.test.cards.abilities.oneshot.counterspell; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ + +public class CounterspellTest extends CardTestPlayerBase { + + /** + It looks like Boom//Bust can't be countered (although it says it's countered in the log). + + Code: Select all + 13:10: Benno casts Boom [8ce] targeting Mountain [4c8] Island [80c] + 13:10: Benno casts Counterspell [2b7] targeting Boom [8ce] + 13:10: Benno puts Boom [8ce] from stack into his or her graveyard + 13:10: Boom is countered by Counterspell [2b7] + 13:10: Benno puts Counterspell [2b7] from stack into his or her graveyard + 13:10: Mountain [4c8] was destroyed + 13:10: Island [80c] was destroyed + */ + + @Test + public void testCounterSplitSpell() { + // Boom - Sorcery {1}{R} + // Destroy target land you control and target land you don't control. + addCard(Zone.HAND, playerA, "Boom // Bust"); + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 2); + + addCard(Zone.BATTLEFIELD, playerB, "Island", 2); + addCard(Zone.HAND, playerB, "Counterspell"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Boom", "Mountain^Island"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Counterspell", "Boom"); + + setStopAt(1, PhaseStep.END_TURN); + execute(); + + assertGraveyardCount(playerA, "Boom // Bust", 1); + assertGraveyardCount(playerB, "Counterspell", 1); + + assertPermanentCount(playerA, "Mountain", 2); + assertPermanentCount(playerB, "Island", 2); + + assertLife(playerA, 20); + assertLife(playerB, 20); + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/copy/PhyrexianMetamorphTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/copy/PhyrexianMetamorphTest.java new file mode 100644 index 00000000000..56819d12149 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/copy/PhyrexianMetamorphTest.java @@ -0,0 +1,124 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package org.mage.test.cards.copy; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ + +public class PhyrexianMetamorphTest extends CardTestPlayerBase { + + + @Test + public void testCopyCreature() { + addCard(Zone.BATTLEFIELD, playerA, "Island", 1); + addCard(Zone.BATTLEFIELD, playerA, "Plains", 5); + + // You may have Phyrexian Metamorph enter the battlefield as a copy of any artifact or creature on the battlefield, except it's an artifact in addition to its other types. + addCard(Zone.HAND, playerA, "Phyrexian Metamorph"); // {3}{UP} + addCard(Zone.HAND, playerA, "Cloudshift"); + + //Flying + // Vanishing 3 (This permanent enters the battlefield with three time counters on it. At the beginning of your upkeep, remove a time counter from it. When the last is removed, sacrifice it.) + // When Aven Riftwatcher enters the battlefield or leaves the battlefield, you gain 2 life. + addCard(Zone.BATTLEFIELD, playerB, "Aven Riftwatcher"); // 2/3 + + // When Ponyback Brigade enters the battlefield or is turned face up, put three 1/1 red Goblin creature tokens onto the battlefield. + addCard(Zone.BATTLEFIELD, playerB, "Ponyback Brigade"); // 2/2 + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Phyrexian Metamorph"); + setChoice(playerA, "Aven Riftwatcher"); + + castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Cloudshift", "Aven Riftwatcher"); + setChoice(playerA, "Ponyback Brigade"); + + setStopAt(1, PhaseStep.END_TURN); + execute(); + + assertLife(playerA, 24); + assertLife(playerB, 20); + + assertGraveyardCount(playerA, "Cloudshift", 1); + + assertPermanentCount(playerA, "Ponyback Brigade", 1); + assertPermanentCount(playerA, "Goblin", 3); + + } + + /** + * An opponent cast Phyrexian Metamorph and cloned another opponent's + * Maelstrom Wanderer(his Commander). The first opponent then dealt combat + * damage with Brago, King Eternal and chose to flicker several permanents, + * including the Phyrexian Metamorph/Maelstrom Wanderer, but he was not able + * to choose a new creature to clone when the Phyrexian Metamorph re-entered + * the battlefield. + */ + + @Test + public void testFlickerWithBrago() { + addCard(Zone.BATTLEFIELD, playerA, "Island", 4); + + // You may have Phyrexian Metamorph enter the battlefield as a copy of any artifact or creature on the battlefield, except it's an artifact in addition to its other types. + addCard(Zone.HAND, playerA, "Phyrexian Metamorph"); // {3}{UP} + + // Flying + // When Brago, King Eternal deals combat damage to a player, exile any number of target nonland permanents you control, then return those cards to the battlefield under their owner's control. + addCard(Zone.BATTLEFIELD, playerA, "Brago, King Eternal"); // 2/4 + + // Creatures you control have haste. + // Cascade, cascade + addCard(Zone.BATTLEFIELD, playerB, "Maelstrom Wanderer"); // 7/5 + // When Ponyback Brigade enters the battlefield or is turned face up, put three 1/1 red Goblin creature tokens onto the battlefield. + addCard(Zone.BATTLEFIELD, playerB, "Ponyback Brigade"); // 2/2 + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Phyrexian Metamorph"); + setChoice(playerA, "Maelstrom Wanderer"); + + attack(3, playerA, "Brago, King Eternal"); + addTarget(playerA, "Maelstrom Wanderer"); + setChoice(playerA, "Ponyback Brigade"); + + setStopAt(3, PhaseStep.END_COMBAT); + execute(); + + assertLife(playerA, 20); + assertLife(playerB, 18); + + assertPermanentCount(playerA, "Ponyback Brigade", 1); + assertPermanentCount(playerA, "Goblin", 3); + + } + + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/copy/TheMimeoplasmTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/copy/TheMimeoplasmTest.java new file mode 100644 index 00000000000..5ef499da439 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/copy/TheMimeoplasmTest.java @@ -0,0 +1,97 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package org.mage.test.cards.copy; + +import mage.abilities.keyword.FlyingAbility; +import mage.constants.PhaseStep; +import mage.constants.Zone; +import mage.game.permanent.Permanent; +import org.junit.Assert; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class TheMimeoplasmTest extends CardTestPlayerBase { + + /** + * I cast either Phyrexian Metamorph or Phantasmal Image and copied The + * Mimeoplasm which was copying a Primeval Titan, but my clone became + * another Mimeoplasm, so it exiled two creatures from graveyards and cloned + * one of those instead. + * + * Copying cards that are copy of other cards copies the original, rather + * than the copy. + * To wit, when The Mimeoplasm is out (and lets say is a copy of Elvish + * Mystic), and someone then plays Clone choosing to enter as the cloned + * Elvish Mystic, they are incorrectly getting The Mimeoplasm instead. + * + */ + @Test + public void testCloneMimeoplasm() { + // As The Mimeoplasm enters the battlefield, you may exile two creature cards from graveyards. + // If you do, it enters the battlefield as a copy of one of those cards with a number of additional +1/+1 counters on it equal to the power of the other card. + addCard(Zone.HAND, playerA, "The Mimeoplasm", 1); // {2}{G}{U}{B} + + addCard(Zone.HAND, playerA, "Clone", 1); // {3}{U} + + addCard(Zone.GRAVEYARD, playerB, "Silvercoat Lion", 1); // 2/2 + addCard(Zone.GRAVEYARD, playerB, "Aven Riftwatcher", 1); // 2/3 + + addCard(Zone.BATTLEFIELD, playerA, "Forest", 1); + addCard(Zone.BATTLEFIELD, playerA, "Island", 7); + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 1); + + + castSpell(1,PhaseStep.PRECOMBAT_MAIN, playerA, "The Mimeoplasm"); + setChoice(playerA, "Aven Riftwatcher"); + setChoice(playerA, "Silvercoat Lion"); + + castSpell(1,PhaseStep.PRECOMBAT_MAIN, playerA, "Clone"); + setChoice(playerA, "Aven Riftwatcher"); + + + setStopAt(1, PhaseStep.END_TURN); + execute(); + + assertHandCount(playerA, "Clone", 0); + + assertLife(playerA, 24); + assertLife(playerB, 20); + + assertPermanentCount(playerA, "Aven Riftwatcher", 2); + assertPowerToughness(playerA, "Aven Riftwatcher", 4, 5); + assertPowerToughness(playerA, "Aven Riftwatcher", 2, 3); + + assertGraveyardCount(playerB, 0); + + + } +} \ No newline at end of file diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/SoulFoundryTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/SoulFoundryTest.java new file mode 100644 index 00000000000..326e36c81ce --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/SoulFoundryTest.java @@ -0,0 +1,67 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package org.mage.test.cards.single; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ + +public class SoulFoundryTest extends CardTestPlayerBase { + + /** + * Soul Foundry imprinted with Bloodline Keeper costs 8 colorless mana to + * use the ability instead of 4 (the converted mana cost of Bloodline + * Keeper). + */ + @Test + public void testBloodlineKeeper() { + addCard(Zone.BATTLEFIELD, playerA, "Island", 8); + // Imprint - When Soul Foundry enters the battlefield, you may exile a creature card from your hand. + // {X}, {T}: Put a token that's a copy of the exiled card onto the battlefield. X is the converted mana cost of that card. + addCard(Zone.HAND, playerA, "Soul Foundry"); // {4} + addCard(Zone.HAND, playerA, "Bloodline Keeper"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Soul Foundry"); + setChoice(playerA, "Yes"); + activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "{X},{T}: Put a token"); + + setStopAt(1, PhaseStep.END_TURN); + execute(); + + assertPermanentCount(playerA, "Soul Foundry", 1); + + assertExileCount("Bloodline Keeper", 1); + assertPermanentCount(playerA, "Bloodline Keeper", 1); + } +} \ No newline at end of file diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/PossibilityStormTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/PossibilityStormTest.java new file mode 100644 index 00000000000..6501fbf2ab9 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/PossibilityStormTest.java @@ -0,0 +1,95 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package org.mage.test.cards.triggers; + + +import mage.cards.Card; +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Assert; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ + +public class PossibilityStormTest extends CardTestPlayerBase { + + /** + * There's currently a bug with Possibility Storm and Zoetic Cavern. The way + * it's supposed to work is the P. Storm trigger exiles Zoetic Cavern and + * then uses last known information about the spell to determine the type of + * card the trigger is looking for(creature in this instance). Instead it's + * basing the type solely off what's printed on the card. What happened to + * me earlier was the trigger skipped right over an Emrakul and then + * revealed a Flooded Strand. I was prompted whether or not I wanted to + * "cast" Flooded Strand without paying it's cost. Eventually I clicked yes + * and it produced a Game Error that resulted in rollback. I recreated the + * error against an AI opponent and copied the code. Can't actually post it + * because the filter on this site claims it makes my post look too + * "spammy". Here's a screenshot of it instead(in spoiler tag). + */ + + @Test + public void TestWithZoeticCavern() { + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 3); + // Whenever a player casts a spell from his or her hand, that player exiles it, then exiles cards from + // the top of his or her library until he or she exiles a card that shares a card type with it. That + // player may cast that card without paying its mana cost. Then he or she puts all cards exiled with + // Possibility Storm on the bottom of his or her library in a random order. + addCard(Zone.BATTLEFIELD, playerA, "Possibility Storm", 2); + + // {T}: Add {1} to your mana pool. + // Morph {2} + addCard(Zone.HAND, playerA, "Zoetic Cavern"); + + addCard(Zone.LIBRARY, playerA, "Silvercoat Lion"); + skipInitShuffling(); + + playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Zoetic Cavern"); + setChoice(playerA, "Yes"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerA, "Zoetic Cavern", 0); + + boolean zoeticCavernInLibrary = false; + for (Card card: playerA.getLibrary().getCards(currentGame)) { + if (card.getName().equals("Zoetic Cavern")) { + zoeticCavernInLibrary = true; + } + } + Assert.assertEquals("Zoetic Cavern has to be in the library", true, zoeticCavernInLibrary); + + assertPermanentCount(playerA, "Silvercoat Lion", 1); + + } +} \ No newline at end of file diff --git a/Mage.Tests/src/test/java/org/mage/test/commander/duel/CastCommanderTest.java b/Mage.Tests/src/test/java/org/mage/test/commander/duel/CastCommanderTest.java index 33bbc816b54..6af9e08c961 100644 --- a/Mage.Tests/src/test/java/org/mage/test/commander/duel/CastCommanderTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/commander/duel/CastCommanderTest.java @@ -38,7 +38,7 @@ import org.mage.test.serverside.base.CardTestCommanderDuelBase; */ public class CastCommanderTest extends CardTestCommanderDuelBase { @Test - public void testFirstAbility() { + public void testCastCommander() { addCard(Zone.BATTLEFIELD, playerA, "Swamp", 5); castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Ob Nixilis of the Black Oath"); @@ -50,5 +50,5 @@ public class CastCommanderTest extends CardTestCommanderDuelBase { assertLife(playerB, 40); assertPermanentCount(playerA, "Ob Nixilis of the Black Oath", 1); - } + } } diff --git a/Mage.Tests/src/test/java/org/mage/test/commander/duel/TeferiMageOfZhalfirTest.java b/Mage.Tests/src/test/java/org/mage/test/commander/duel/TeferiMageOfZhalfirTest.java new file mode 100644 index 00000000000..08c03b60468 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/commander/duel/TeferiMageOfZhalfirTest.java @@ -0,0 +1,98 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package org.mage.test.commander.duel; + + +import java.io.FileNotFoundException; +import mage.constants.PhaseStep; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.GameException; +import org.junit.Assert; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestCommanderDuelBase; + +/** + * + * @author LevelX2 + */ + +public class TeferiMageOfZhalfirTest extends CardTestCommanderDuelBase { + + @Override + protected Game createNewGameAndPlayers() throws GameException, FileNotFoundException { + setDecknamePlayerA("CommanderDuel_UW.dck"); // Commander = Daxos of Meletis + return super.createNewGameAndPlayers(); + } + + @Test + public void castCommanderWithFlash() { + addCard(Zone.BATTLEFIELD, playerA, "Plains", 2); + addCard(Zone.BATTLEFIELD, playerA, "Island", 1); + + addCard(Zone.BATTLEFIELD, playerA, "Teferi, Mage of Zhalfir"); + + castSpell(1, PhaseStep.BEGIN_COMBAT, playerA, "Daxos of Meletis"); + setStopAt(1, PhaseStep.END_COMBAT); + execute(); + + assertPermanentCount(playerA, "Daxos of Meletis", 1); + + } + + @Test + public void testCommanderDamage() { + addCard(Zone.BATTLEFIELD, playerA, "Plains", 6); + addCard(Zone.BATTLEFIELD, playerA, "Island", 1); + // Enchant creature + // Enchanted creature gets +4/+4, has flying and first strike, and is an Angel in addition to its other types. + // When enchanted creature dies, return Angelic Destiny to its owner's hand. + addCard(Zone.HAND, playerA, "Angelic Destiny"); + + addCard(Zone.BATTLEFIELD, playerA, "Teferi, Mage of Zhalfir"); + + // Daxos of Meletis can't be blocked by creatures with power 3 or greater. + // Whenever Daxos of Meletis deals combat damage to a player, exile the top card of that player's library. You gain life equal to that card's converted mana cost. Until end of turn, you may cast that card and you may spend mana as though it were mana of any color to cast it. + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Daxos of Meletis"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Angelic Destiny","Daxos of Meletis"); + + attack(3, playerA, "Daxos of Meletis"); + attack(5, playerA, "Daxos of Meletis"); + attack(7, playerA, "Daxos of Meletis"); + attack(9, playerA, "Daxos of Meletis"); + + setStopAt(9, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertPermanentCount(playerA, "Daxos of Meletis", 1); + assertPowerToughness(playerA, "Daxos of Meletis", 6, 6); + + Assert.assertEquals("Player A has won because of commander damage", true, playerA.hasWon()); + Assert.assertEquals("Player A has lost because of commander damage", true, playerB.hasLost()); + } +} \ No newline at end of file diff --git a/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java b/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java index 4f99f385689..be7c65487a0 100644 --- a/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java +++ b/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java @@ -29,6 +29,7 @@ package org.mage.test.player; import java.io.Serializable; import java.util.ArrayList; +import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -91,6 +92,7 @@ import mage.target.TargetPermanent; import mage.target.TargetPlayer; import mage.target.TargetSource; import mage.target.TargetSpell; +import mage.target.common.TargetCardInGraveyard; import mage.target.common.TargetCardInHand; import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCreaturePermanentAmount; @@ -604,17 +606,53 @@ public class TestPlayer implements Player { } } } + if (target instanceof TargetCardInGraveyard) { + TargetCardInGraveyard targetCardInGraveyard = ((TargetCardInGraveyard) target); + Set possibleTargets = new HashSet<>(); + for(UUID playerId: this.getInRange()) { + Player player = game.getPlayer(playerId); + if (player != null) { + possibleTargets.addAll(player.getGraveyard()); + } + } + + for (String choose2 : choices) { + String[] targetList = choose2.split("\\^"); + boolean targetFound = false; + for (UUID targetId : possibleTargets) { + MageObject targetObject = game.getObject(targetId); + if (targetObject != null) { + for (String targetName : targetList) { + if (targetObject.getName().equals(targetName)) { + List alreadyTargetted = targetCardInGraveyard.getTargets(); + if (targetCardInGraveyard.canTarget(targetObject.getId(), game)) { + if (alreadyTargetted != null && !alreadyTargetted.contains(targetObject.getId())) { + targetCardInGraveyard.add(targetObject.getId(), game); + choices.remove(choose2); + targetFound = true; + } + } + } + } + if (targetFound && targetCardInGraveyard.isChosen()) { + choices.remove(choose2); + return true; + } + } + } + } + } if (target instanceof TargetSource) { Set possibleTargets; TargetSource t = ((TargetSource) target); possibleTargets = t.possibleTargets(sourceId, computerPlayer.getId(), game); - for (UUID targetId : possibleTargets) { - MageObject targetObject = game.getObject(targetId); - if (targetObject != null) { - for (String choose2 : choices) { - String[] targetList = choose2.split("\\^"); - boolean targetFound = false; - for (String targetName : targetList) { + for (String choose2 : choices) { + String[] targetList = choose2.split("\\^"); + boolean targetFound = false; + for (String targetName : targetList) { + for (UUID targetId : possibleTargets) { + MageObject targetObject = game.getObject(targetId); + if (targetObject != null) { if (targetObject.getName().equals(targetName)) { List alreadyTargetted = target.getTargets(); if (t.canTarget(targetObject.getId(), game)) { diff --git a/Mage.Tests/src/test/java/org/mage/test/serverside/base/CardTestCommanderDuelBase.java b/Mage.Tests/src/test/java/org/mage/test/serverside/base/CardTestCommanderDuelBase.java index c31449aa0e8..df244f549d7 100644 --- a/Mage.Tests/src/test/java/org/mage/test/serverside/base/CardTestCommanderDuelBase.java +++ b/Mage.Tests/src/test/java/org/mage/test/serverside/base/CardTestCommanderDuelBase.java @@ -42,12 +42,18 @@ import org.mage.test.serverside.base.impl.CardTestPlayerAPIImpl; public abstract class CardTestCommanderDuelBase extends CardTestPlayerAPIImpl { + public CardTestCommanderDuelBase() { + super(); + this.deckNameA = "CommanderDuel.dck"; + this.deckNameB = "CommanderDuel.dck"; + } + @Override protected Game createNewGameAndPlayers() throws GameException, FileNotFoundException { Game game = new CommanderDuel(MultiplayerAttackOption.LEFT, RangeOfInfluence.ONE, 0, 40); - playerA = createPlayer(game, playerA, "PlayerA","CommanderDuel.dck"); - playerB = createPlayer(game, playerB, "PlayerB","CommanderDuel.dck"); + playerA = createPlayer(game, playerA, "PlayerA",deckNameA); + playerB = createPlayer(game, playerB, "PlayerB",deckNameB); return game; } diff --git a/Mage.Tests/src/test/java/org/mage/test/serverside/base/CardTestPlayerBase.java b/Mage.Tests/src/test/java/org/mage/test/serverside/base/CardTestPlayerBase.java index e3435c3d3f4..5c92e590068 100644 --- a/Mage.Tests/src/test/java/org/mage/test/serverside/base/CardTestPlayerBase.java +++ b/Mage.Tests/src/test/java/org/mage/test/serverside/base/CardTestPlayerBase.java @@ -15,12 +15,17 @@ import org.mage.test.serverside.base.impl.CardTestPlayerAPIImpl; */ public abstract class CardTestPlayerBase extends CardTestPlayerAPIImpl { + public CardTestPlayerBase() { + deckNameA = "RB Aggro.dck"; + deckNameB = "RB Aggro.dck"; + } + @Override protected Game createNewGameAndPlayers() throws GameException, FileNotFoundException { Game game = new TwoPlayerDuel(MultiplayerAttackOption.LEFT, RangeOfInfluence.ONE, 0, 20); - playerA = createPlayer(game, playerA, "PlayerA"); - playerB = createPlayer(game, playerB, "PlayerB"); + playerA = createPlayer(game, playerA, "PlayerA", deckNameA); + playerB = createPlayer(game, playerB, "PlayerB", deckNameB); return game; } diff --git a/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java b/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java index dc059ca7cf6..8b910600cb8 100644 --- a/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java +++ b/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java @@ -44,6 +44,9 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement protected GameOptions gameOptions; + protected String deckNameA; + protected String deckNameB; + protected enum ExpectedType { TURN_NUMBER, RESULT, @@ -1009,6 +1012,14 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement player.addTarget("targetPlayer="+targetPlayer.getName()); } + public void setDecknamePlayerA(String deckname) { + deckNameA = deckname; + } + + public void setDecknamePlayerB(String deckname) { + deckNameB = deckname; + } + protected void skipInitShuffling() { gameOptions.skipInitShuffling = true; } diff --git a/Mage.Updater/pom.xml b/Mage.Updater/pom.xml index 62b47116dc5..296591999f9 100644 --- a/Mage.Updater/pom.xml +++ b/Mage.Updater/pom.xml @@ -5,7 +5,7 @@ mage-root org.mage - 1.4.0 + 1.4.1 4.0.0 diff --git a/Mage/pom.xml b/Mage/pom.xml index b29479975df..a7336af347f 100644 --- a/Mage/pom.xml +++ b/Mage/pom.xml @@ -7,7 +7,7 @@ org.mage mage-root - 1.4.0 + 1.4.1 mage diff --git a/Mage/src/mage/abilities/AbilityImpl.java b/Mage/src/mage/abilities/AbilityImpl.java index f9847aa8b7e..c7bbd061e53 100644 --- a/Mage/src/mage/abilities/AbilityImpl.java +++ b/Mage/src/mage/abilities/AbilityImpl.java @@ -247,7 +247,7 @@ public abstract class AbilityImpl implements Ability { return false; } game.applyEffects(); - + /* 20130201 - 601.2b * If the spell is modal the player announces the mode choice (see rule 700.2). */ @@ -299,7 +299,7 @@ public abstract class AbilityImpl implements Ability { // A player can't apply two alternative methods of casting or two alternative costs to a single spell. if (!activateAlternateOrAdditionalCosts(sourceObject, noMana, controller, game)){ if (getAbilityType().equals(AbilityType.SPELL) - && ((SpellAbility) this).getSpellAbilityType().equals(SpellAbilityType.LAND_ALTERNATE)) { + && ((SpellAbility) this).getSpellAbilityType().equals(SpellAbilityType.FACE_DOWN_CREATURE)) { return false; } } diff --git a/Mage/src/mage/abilities/common/AttacksEachCombatStaticAbility.java b/Mage/src/mage/abilities/common/AttacksEachCombatStaticAbility.java new file mode 100644 index 00000000000..adb4be894b1 --- /dev/null +++ b/Mage/src/mage/abilities/common/AttacksEachCombatStaticAbility.java @@ -0,0 +1,33 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.abilities.common; + +import mage.abilities.StaticAbility; +import mage.abilities.effects.common.combat.AttacksIfAbleSourceEffect; +import mage.constants.Duration; +import mage.constants.Zone; + +/** + * + * @author LevelX2 + */ + +public class AttacksEachCombatStaticAbility extends StaticAbility { + + public AttacksEachCombatStaticAbility() { + super(Zone.BATTLEFIELD, new AttacksIfAbleSourceEffect(Duration.WhileOnBattlefield, true)); + } + + public AttacksEachCombatStaticAbility(AttacksEachCombatStaticAbility ability) { + super(ability); + } + + @Override + public AttacksEachCombatStaticAbility copy() { + return new AttacksEachCombatStaticAbility(this); + } + +} diff --git a/Mage/src/mage/abilities/common/AttacksEachTurnStaticAbility.java b/Mage/src/mage/abilities/common/AttacksEachTurnStaticAbility.java index 19951542b6a..7e5d27f7cd4 100644 --- a/Mage/src/mage/abilities/common/AttacksEachTurnStaticAbility.java +++ b/Mage/src/mage/abilities/common/AttacksEachTurnStaticAbility.java @@ -32,6 +32,7 @@ import mage.constants.Duration; import mage.constants.Zone; import mage.abilities.StaticAbility; import mage.abilities.effects.common.combat.AttacksIfAbleSourceEffect; +import mage.watchers.common.AttackedThisTurnWatcher; /** * @@ -41,6 +42,7 @@ public class AttacksEachTurnStaticAbility extends StaticAbility { public AttacksEachTurnStaticAbility() { super(Zone.BATTLEFIELD, new AttacksIfAbleSourceEffect(Duration.WhileOnBattlefield)); + addWatcher(new AttackedThisTurnWatcher()); } public AttacksEachTurnStaticAbility(AttacksEachTurnStaticAbility ability) { diff --git a/Mage/src/mage/abilities/effects/ContinuousEffect.java b/Mage/src/mage/abilities/effects/ContinuousEffect.java index 6f925dc48f6..5f6987ab47c 100644 --- a/Mage/src/mage/abilities/effects/ContinuousEffect.java +++ b/Mage/src/mage/abilities/effects/ContinuousEffect.java @@ -61,4 +61,7 @@ public interface ContinuousEffect extends Effect { void newId(); @Override ContinuousEffect copy(); + + boolean isTemporary(); + void setTemporary(boolean temporary); } diff --git a/Mage/src/mage/abilities/effects/ContinuousEffectImpl.java b/Mage/src/mage/abilities/effects/ContinuousEffectImpl.java index ce4342d5b6a..a3603203321 100644 --- a/Mage/src/mage/abilities/effects/ContinuousEffectImpl.java +++ b/Mage/src/mage/abilities/effects/ContinuousEffectImpl.java @@ -68,7 +68,8 @@ public abstract class ContinuousEffectImpl extends EffectImpl implements Continu protected boolean discarded = false; // for manual effect discard protected boolean affectedObjectsSet = false; protected List affectedObjectList = new ArrayList<>(); - + protected boolean temporary = false; + // until your next turn protected int startingTurn; protected UUID startingControllerId; @@ -96,6 +97,7 @@ public abstract class ContinuousEffectImpl extends EffectImpl implements Continu this.discarded = effect.discarded; this.affectedObjectsSet = effect.affectedObjectsSet; this.affectedObjectList.addAll(effect.affectedObjectList); + this.temporary = effect.temporary; this.startingTurn = effect.startingTurn; this.startingControllerId = effect.startingControllerId; } @@ -234,4 +236,18 @@ public abstract class ContinuousEffectImpl extends EffectImpl implements Continu return affectedObjectList; } + /** + * Returns the status if the effect is temporary added to the ContinuousEffects + * @return + */ + @Override + public boolean isTemporary() { + return temporary; + } + + @Override + public void setTemporary(boolean temporary) { + this.temporary = temporary; + } + } diff --git a/Mage/src/mage/abilities/effects/ContinuousEffects.java b/Mage/src/mage/abilities/effects/ContinuousEffects.java index 0b2c1fbe43b..9cc59829286 100644 --- a/Mage/src/mage/abilities/effects/ContinuousEffects.java +++ b/Mage/src/mage/abilities/effects/ContinuousEffects.java @@ -939,6 +939,7 @@ public class ContinuousEffects implements Serializable { */ public void addEffect(ContinuousEffect effect, UUID sourceId, Ability source) { if (!(source instanceof MageSingleton)) { // because MageSingletons may never be removed by removing the temporary effecs they are not added to the temporaryEffects to prevent this + effect.setTemporary(true); Set abilities = temporaryEffects.get(effect); if (abilities == null) { abilities = new HashSet<>(); diff --git a/Mage/src/mage/abilities/effects/common/CopyEffect.java b/Mage/src/mage/abilities/effects/common/CopyEffect.java index bbb1d6ba0ba..9d1194fda2a 100644 --- a/Mage/src/mage/abilities/effects/common/CopyEffect.java +++ b/Mage/src/mage/abilities/effects/common/CopyEffect.java @@ -40,6 +40,7 @@ import mage.constants.Duration; import mage.constants.Layer; import mage.constants.Outcome; import mage.constants.SubLayer; +import mage.constants.Zone; import mage.game.Game; import mage.game.permanent.Permanent; import mage.game.permanent.PermanentCard; @@ -56,6 +57,7 @@ public class CopyEffect extends ContinuousEffectImpl { * Object we copy from */ private MageObject target; + private UUID sourceId; private ApplyToPermanent applier; @@ -65,7 +67,7 @@ public class CopyEffect extends ContinuousEffectImpl { public CopyEffect(Duration duration, MageObject target, UUID sourceId) { super(duration, Layer.CopyEffects_1, SubLayer.NA, Outcome.BecomeCreature); - this.target = target; + this.target = target; this.sourceId = sourceId; } @@ -79,23 +81,24 @@ public class CopyEffect extends ContinuousEffectImpl { @Override public void init(Ability source, Game game) { super.init(source, game); - if (affectedObjectsSet) { - affectedObjectList.add(new MageObjectReference(sourceId, game)); + if (!(target instanceof Permanent) && (target instanceof Card)) { + this.target = new PermanentCard((Card)target, source.getControllerId(), game); } + affectedObjectList.add(new MageObjectReference(getSourceId(), game)); } @Override public boolean apply(Game game, Ability source) { - Permanent permanent; - if (affectedObjectsSet) { - permanent = affectedObjectList.get(0).getPermanent(game); - } else { - permanent = game.getPermanent(this.sourceId); - } + Permanent permanent = affectedObjectList.get(0).getPermanent(game); if (permanent == null) { - discard(); - return false; + permanent = (Permanent) game.getLastKnownInformation(getSourceId(), Zone.BATTLEFIELD, source.getSourceObjectZoneChangeCounter()); + // As long as the permanent is still in the LKI continue to copy to get triggered abilities to TriggeredAbilites for dies events. + if (permanent == null) { + discard(); + return false; + } } + permanent.setCopy(true); permanent.setName(target.getName()); permanent.getColor(game).setColor(target.getColor(game)); permanent.getManaCost().clear(); @@ -134,9 +137,7 @@ public class CopyEffect extends ContinuousEffectImpl { } else if (target instanceof PermanentToken || target instanceof Card) { permanent.setCardNumber(((Card) target).getCardNumber()); permanent.setExpansionSetCode(((Card) target).getExpansionSetCode()); - } - - permanent.setCopy(true); + } return true; } diff --git a/Mage/src/mage/abilities/effects/common/combat/AttacksIfAbleSourceEffect.java b/Mage/src/mage/abilities/effects/common/combat/AttacksIfAbleSourceEffect.java index 104d3bdfe04..4390a891a11 100644 --- a/Mage/src/mage/abilities/effects/common/combat/AttacksIfAbleSourceEffect.java +++ b/Mage/src/mage/abilities/effects/common/combat/AttacksIfAbleSourceEffect.java @@ -33,6 +33,7 @@ import mage.abilities.Ability; import mage.abilities.effects.RequirementEffect; import mage.game.Game; import mage.game.permanent.Permanent; +import mage.watchers.common.AttackedThisTurnWatcher; /** * @@ -40,18 +41,25 @@ import mage.game.permanent.Permanent; */ public class AttacksIfAbleSourceEffect extends RequirementEffect { + boolean eachCombat; + public AttacksIfAbleSourceEffect(Duration duration) { + this(duration, false); + } + + public AttacksIfAbleSourceEffect(Duration duration, boolean eachCombat) { super(duration); + this.eachCombat = eachCombat; if (this.duration == Duration.EndOfTurn) { - staticText = "{this} attacks this turn if able"; - } - else { - staticText = "{this} attacks each turn if able"; + staticText = "{this} attacks " + (eachCombat ? "each combat" :"this turn") + " if able"; + } else { + staticText = "{this} attacks each " + (eachCombat ? "combat" :"turn") + " if able"; } } public AttacksIfAbleSourceEffect(final AttacksIfAbleSourceEffect effect) { super(effect); + this.eachCombat = effect.eachCombat; } @Override @@ -61,7 +69,14 @@ public class AttacksIfAbleSourceEffect extends RequirementEffect { @Override public boolean applies(Permanent permanent, Ability source, Game game) { - return permanent.getId().equals(source.getSourceId()); + if (permanent.getId().equals(source.getSourceId())) { + if (eachCombat) { + return true; + } + AttackedThisTurnWatcher watcher = (AttackedThisTurnWatcher)game.getState().getWatchers().get("AttackedThisTurn"); + return watcher != null && !watcher.getAttackedThisTurnCreatures().contains(permanent.getId()); + } + return false; } @Override diff --git a/Mage/src/mage/abilities/effects/common/continuous/SetPowerToughnessSourceEffect.java b/Mage/src/mage/abilities/effects/common/continuous/SetPowerToughnessSourceEffect.java index 7d60332c1d3..add455f4b14 100644 --- a/Mage/src/mage/abilities/effects/common/continuous/SetPowerToughnessSourceEffect.java +++ b/Mage/src/mage/abilities/effects/common/continuous/SetPowerToughnessSourceEffect.java @@ -36,8 +36,8 @@ import mage.constants.Duration; import mage.constants.Layer; import mage.constants.Outcome; import mage.constants.SubLayer; -import mage.constants.Zone; import mage.game.Game; +import mage.game.permanent.Permanent; /** * @@ -76,12 +76,16 @@ public class SetPowerToughnessSourceEffect extends ContinuousEffectImpl { @Override public boolean apply(Game game, Ability source) { - MageObject mageObject = game.getObject(source.getSourceId()); + MageObject mageObject = game.getObject(source.getSourceId()); if (mageObject == null) { if (duration.equals(Duration.Custom)) { discard(); } return false; + } else if (isTemporary()) { // it's somehow w + if (!(mageObject instanceof Permanent)) { + return false; + } } if (amount != null) { int value = amount.calculate(game, source, this); diff --git a/Mage/src/mage/abilities/effects/common/counter/ProliferateEffect.java b/Mage/src/mage/abilities/effects/common/counter/ProliferateEffect.java index 363012453c2..b85e47bf840 100644 --- a/Mage/src/mage/abilities/effects/common/counter/ProliferateEffect.java +++ b/Mage/src/mage/abilities/effects/common/counter/ProliferateEffect.java @@ -87,7 +87,7 @@ public class ProliferateEffect extends OneShotEffect { choices.add(counter.getName()); } choice.setChoices(choices); - choice.setMessage("Choose a counter to proliferate (" + permanent.getName() + ")"); + choice.setMessage("Choose a counter to proliferate (" + permanent.getIdName() + ")"); controller.choose(Outcome.Benefit, choice, game); for (Counter counter : permanent.getCounters().values()) { if (counter.getName().equals(choice.getChoice())) { diff --git a/Mage/src/mage/cards/CardImpl.java b/Mage/src/mage/cards/CardImpl.java index b656ae3bf29..8f9f4ee18a6 100644 --- a/Mage/src/mage/cards/CardImpl.java +++ b/Mage/src/mage/cards/CardImpl.java @@ -359,6 +359,12 @@ public abstract class CardImpl extends MageObjectImpl implements Card { break; case STACK: StackObject stackObject = game.getStack().getSpell(getId()); + if (stackObject == null && (this instanceof SplitCard)) { // handle if half od Split cast is on the stack + stackObject = game.getStack().getSpell(((SplitCard)this).getLeftHalfCard().getId()); + if (stackObject == null) { + stackObject = game.getStack().getSpell(((SplitCard)this).getRightHalfCard().getId()); + } + } if (stackObject != null) { game.getStack().remove(stackObject); } diff --git a/Mage/src/mage/cards/repository/CardRepository.java b/Mage/src/mage/cards/repository/CardRepository.java index c9ae81aa612..6cfd22889bb 100644 --- a/Mage/src/mage/cards/repository/CardRepository.java +++ b/Mage/src/mage/cards/repository/CardRepository.java @@ -58,9 +58,9 @@ public enum CardRepository { private static final String JDBC_URL = "jdbc:h2:file:./db/cards.h2;AUTO_SERVER=TRUE"; private static final String VERSION_ENTITY_NAME = "card"; // raise this if db structure was changed - private static final long CARD_DB_VERSION = 38; + private static final long CARD_DB_VERSION = 39; // raise this if new cards were added to the server - private static final long CARD_CONTENT_VERSION = 17; + private static final long CARD_CONTENT_VERSION = 19; private final Random random = new Random(); private Dao cardDao; diff --git a/Mage/src/mage/cards/repository/ExpansionRepository.java b/Mage/src/mage/cards/repository/ExpansionRepository.java index 5fb202231b4..6f2e118bec5 100644 --- a/Mage/src/mage/cards/repository/ExpansionRepository.java +++ b/Mage/src/mage/cards/repository/ExpansionRepository.java @@ -26,8 +26,8 @@ public enum ExpansionRepository { private static final String JDBC_URL = "jdbc:h2:file:./db/cards.h2;AUTO_SERVER=TRUE"; private static final String VERSION_ENTITY_NAME = "expansion"; - private static final long EXPANSION_DB_VERSION = 4; - private static final long EXPANSION_CONTENT_VERSION = 7; + private static final long EXPANSION_DB_VERSION = 5; + private static final long EXPANSION_CONTENT_VERSION = 8; private Dao expansionDao; diff --git a/Mage/src/mage/constants/SpellAbilityType.java b/Mage/src/mage/constants/SpellAbilityType.java index 70af522434f..881fdf06a6c 100644 --- a/Mage/src/mage/constants/SpellAbilityType.java +++ b/Mage/src/mage/constants/SpellAbilityType.java @@ -7,7 +7,7 @@ package mage.constants; public enum SpellAbilityType { BASE("Basic SpellAbility"), BASE_ALTERNATE("Basic SpellAbility Alternate"), // used for Overload, Flashback to know they must be handled as Alternate casting costs - LAND_ALTERNATE("Basic SpellAbility Alternate Land"), // used for Lands with Morph to cast as Face Down creature + FACE_DOWN_CREATURE("Face down creature"), // used for Lands with Morph to cast as Face Down creature SPLIT("Split SpellAbility"), SPLIT_FUSED("Split SpellAbility"), SPLIT_LEFT("LeftSplit SpellAbility"), diff --git a/Mage/src/mage/game/CardAttribute.java b/Mage/src/mage/game/CardAttribute.java index 95b4659ab7d..49cbf8dce27 100644 --- a/Mage/src/mage/game/CardAttribute.java +++ b/Mage/src/mage/game/CardAttribute.java @@ -21,6 +21,14 @@ public class CardAttribute implements Serializable { public CardAttribute(Card card) { color = card.getColor(null).copy(); } + + public CardAttribute(CardAttribute cardAttribute) { + this.color = cardAttribute.color; + } + + public CardAttribute copy() { + return new CardAttribute(this); + } public ObjectColor getColor() { return color; diff --git a/Mage/src/mage/game/Game.java b/Mage/src/mage/game/Game.java index 3743aae59c4..40c78f0512f 100644 --- a/Mage/src/mage/game/Game.java +++ b/Mage/src/mage/game/Game.java @@ -253,7 +253,7 @@ public interface Game extends MageItem, Serializable { Card copyCard(Card cardToCopy, Ability source, UUID newController); void addTriggeredAbility(TriggeredAbility ability); - void addDelayedTriggeredAbility(DelayedTriggeredAbility delayedAbility); + UUID addDelayedTriggeredAbility(DelayedTriggeredAbility delayedAbility); void applyEffects(); boolean checkStateAndTriggered(); void playPriority(UUID activePlayerId, boolean resuming); diff --git a/Mage/src/mage/game/GameImpl.java b/Mage/src/mage/game/GameImpl.java index 23561b34258..505bfa8c0ff 100644 --- a/Mage/src/mage/game/GameImpl.java +++ b/Mage/src/mage/game/GameImpl.java @@ -1383,11 +1383,12 @@ public abstract class GameImpl implements Game, Serializable { } @Override - public void addDelayedTriggeredAbility(DelayedTriggeredAbility delayedAbility) { + public UUID addDelayedTriggeredAbility(DelayedTriggeredAbility delayedAbility) { DelayedTriggeredAbility newAbility = delayedAbility.copy(); newAbility.newId(); newAbility.init(this); state.addDelayedTriggeredAbility(newAbility); + return newAbility.getId(); } /** diff --git a/Mage/src/mage/game/GameState.java b/Mage/src/mage/game/GameState.java index ebfdc555a19..83236ef4e69 100644 --- a/Mage/src/mage/game/GameState.java +++ b/Mage/src/mage/game/GameState.java @@ -171,6 +171,9 @@ public class GameState implements Serializable, Copyable { for (Map.Entry entry: state.cardState.entrySet()) { cardState.put(entry.getKey(), entry.getValue().copy()); } + for (Map.Entry entry: state.cardAttribute.entrySet()) { + cardAttribute.put(entry.getKey(), entry.getValue().copy()); + } this.zoneChangeCounter.putAll(state.zoneChangeCounter); this.copiedCards.putAll(state.copiedCards); this.permanentOrderNumber = state.permanentOrderNumber; @@ -208,6 +211,7 @@ public class GameState implements Serializable, Copyable { this.zones = state.zones; this.simultaneousEvents = state.simultaneousEvents; this.cardState = state.cardState; + this.cardAttribute = state.cardAttribute; this.zoneChangeCounter = state.zoneChangeCounter; this.copiedCards = state.copiedCards; this.permanentOrderNumber = state.permanentOrderNumber; diff --git a/Mage/src/mage/game/stack/Spell.java b/Mage/src/mage/game/stack/Spell.java index bbb1ef01d8f..2ae5dd56c79 100644 --- a/Mage/src/mage/game/stack/Spell.java +++ b/Mage/src/mage/game/stack/Spell.java @@ -372,6 +372,11 @@ public class Spell extends StackObjImpl implements Card { @Override public List getCardType() { + if (this.getSpellAbility().getSpellAbilityType().equals(SpellAbilityType.FACE_DOWN_CREATURE)) { + List cardTypes = new ArrayList<>(); + cardTypes.add(CardType.CREATURE); + return cardTypes; + } if (this.getSpellAbility() instanceof BestowAbility) { List cardTypes = new ArrayList<>(); cardTypes.addAll(card.getCardType()); diff --git a/Mage/src/mage/players/PlayerImpl.java b/Mage/src/mage/players/PlayerImpl.java index a9fb708017f..732fe47137e 100644 --- a/Mage/src/mage/players/PlayerImpl.java +++ b/Mage/src/mage/players/PlayerImpl.java @@ -209,21 +209,20 @@ public abstract class PlayerImpl implements Player, Serializable { protected Set playersUnderYourControl = new HashSet<>(); protected Set usersAllowedToSeeHandCards = new HashSet<>(); - protected boolean requestsAllowedToSeeHandCards = true; protected List attachments = new ArrayList<>(); protected boolean topCardRevealed = false; // 800.4i When a player leaves the game, any continuous effects with durations that last until that player's next turn - // or until a specific point in that turn will last until that turn would have begun. + // or until a specific point in that turn will last until that turn would have begun. // They neither expire immediately nor last indefinitely. protected boolean reachedNextTurnAfterLeaving = false; // indicates that the spell with the set sourceId can be cast with an alternate mana costs (can also be no mana costs) protected UUID castSourceIdWithAlternateMana; protected ManaCosts castSourceIdManaCosts; - + // indicates that the player is in mana payment phase protected boolean payManaMode = false; @@ -369,7 +368,7 @@ public abstract class PlayerImpl implements Player, Serializable { this.canPaySacrificeCost = player.canPaySacrificeCost(); this.loseByZeroOrLessLife = player.canLoseByZeroOrLessLife(); this.canPlayCardsFromGraveyard = player.canPlayCardsFromGraveyard(); - this.alternativeSourceCosts.addAll(player.getAlternativeSourceCosts()); + this.alternativeSourceCosts.addAll(player.getAlternativeSourceCosts()); this.topCardRevealed = player.isTopCardRevealed(); this.playersUnderYourControl.clear(); @@ -444,7 +443,7 @@ public abstract class PlayerImpl implements Player, Serializable { this.payManaMode = false; this.setLife(game.getLife(), game); this.setReachedNextTurnAfterLeaving(false); - + this.castSourceIdWithAlternateMana = null; this.castSourceIdManaCosts = null; } @@ -575,7 +574,7 @@ public abstract class PlayerImpl implements Player, Serializable { /** * returns true if the player has the control itself - false if the player is controlled by another player - * @return + * @return */ @Override public boolean isGameUnderControl() { @@ -704,8 +703,10 @@ public abstract class PlayerImpl implements Player, Serializable { if (random) { for (int i = 0; i < amount; i++) { Card card = this.getHand().getRandom(game); - discardedCards.add(card); - discard(card, source, game); + if(card != null) { + discardedCards.add(card); + discard(card, source, game); + } } } else { TargetDiscard target = new TargetDiscard(amount, amount, new FilterCard(CardUtil.numberToText(amount, "a") + " card" + (amount > 1 ? "s" : "")), playerId); @@ -802,7 +803,7 @@ public abstract class PlayerImpl implements Player, Serializable { attachedToPlayer.removeAttachment(permanent, game); } } - + } if (permanent.getPairedCard() != null) { Permanent pairedCard = game.getPermanent(permanent.getPairedCard()); @@ -876,7 +877,7 @@ public abstract class PlayerImpl implements Player, Serializable { while (isInGame() && cards.size() > 1) { this.choose(Outcome.Neutral, cards, target, game); UUID targetObjectId = target.getFirstTarget(); - cards.remove(targetObjectId); + cards.remove(targetObjectId); moveObjectToLibrary(targetObjectId, source.getSourceId(), game, true, false); target.clearChosen(); } @@ -917,7 +918,7 @@ public abstract class PlayerImpl implements Player, Serializable { return castSourceIdManaCosts; } - + @Override public boolean isInPayManaMode() { return payManaMode; @@ -947,7 +948,7 @@ public abstract class PlayerImpl implements Player, Serializable { spellAbility.getManaCosts().add(alternateCosts.copy()); spellAbility.getManaCostsToPay().clear(); spellAbility.getManaCostsToPay().add(alternateCosts.copy()); - } + } } setCastSourceIdWithAlternateMana(null, null); if (spell.activate(game, noMana)) { @@ -987,7 +988,7 @@ public abstract class PlayerImpl implements Player, Serializable { } } if (found) { - SpellAbility spellAbility = new SpellAbility(null, "", game.getState().getZone(card.getId()), SpellAbilityType.LAND_ALTERNATE); + SpellAbility spellAbility = new SpellAbility(null, "", game.getState().getZone(card.getId()), SpellAbilityType.FACE_DOWN_CREATURE); spellAbility.setControllerId(this.getId()); spellAbility.setSourceId(card.getId()); if (cast(spellAbility, game, false)) { @@ -1528,7 +1529,7 @@ public abstract class PlayerImpl implements Player, Serializable { @Override public String getLogName() { - return GameLog.getColoredPlayerName(name); + return GameLog.getColoredPlayerName(name); } @Override @@ -1669,11 +1670,11 @@ public abstract class PlayerImpl implements Player, Serializable { sourceControllerId = ((Spell) source).getControllerId(); } else if (source instanceof Card) { sourceAbilities = ((Card) source).getAbilities(game); - sourceControllerId = ((Card) source).getOwnerId(); + sourceControllerId = ((Card) source).getOwnerId(); } else if (source instanceof CommandObject){ sourceControllerId = ((CommandObject) source).getControllerId(); sourceAbilities = ((CommandObject) source).getAbilities(); - } + } } else { sourceAbilities = ((Permanent) source).getAbilities(game); sourceControllerId = ((Permanent) source).getControllerId(); @@ -2426,7 +2427,7 @@ public abstract class PlayerImpl implements Player, Serializable { if (game.getContinuousEffects().asThough(card.getId(), AsThoughEffectType.PLAY_FROM_NON_HAND_ZONE, this.getId(), game)) { for (Ability ability : card.getAbilities()) { if (ability.getZone().match(Zone.HAND)) { - ability.setControllerId(this.getId()); // controller must be set for case owner != caster + ability.setControllerId(this.getId()); // controller must be set for case owner != caster if (ability instanceof ActivatedAbility) { if (((ActivatedAbility) ability).canActivate(playerId, game)) { playable.add(ability); @@ -2537,7 +2538,7 @@ public abstract class PlayerImpl implements Player, Serializable { * @return */ private boolean shouldSkipGettingPlayable(Game game) { - if (game.getStep() == null) { // happens at the start of the game + if (game.getStep() == null) { // happens at the start of the game return true; } for (Entry phaseStep : silentPhaseSteps.entrySet()) { @@ -2838,19 +2839,31 @@ public abstract class PlayerImpl implements Player, Serializable { @Override public boolean moveCards(Cards cards, Zone fromZone, Zone toZone, Ability source, Game game) { ArrayList cardList = new ArrayList<>(); - cardList.addAll(cards.getCards(game)); + for (UUID cardId: cards) { + if (fromZone.equals(Zone.BATTLEFIELD)) { + Permanent permanent = game.getPermanent(cardId); + if (permanent != null) { + cardList.add(permanent); + } + } else { + Card card = game.getCard(cardId); + if (card != null) { + cardList.add(card); + } + } + } return moveCards(cardList, fromZone, toZone, source, game); } - + @Override public boolean moveCards(Card card, Zone fromZone, Zone toZone, Ability source, Game game) { ArrayList cardList = new ArrayList<>(); if (card != null) { cardList.add(card); } - return moveCards(cardList, fromZone, toZone, source, game); + return moveCards(cardList, fromZone, toZone, source, game); } - + @Override public boolean moveCards(List cards, Zone fromZone, Zone toZone, Ability source, Game game) { if (cards.isEmpty()) { @@ -2858,13 +2871,13 @@ public abstract class PlayerImpl implements Player, Serializable { } game.fireEvent(new ZoneChangeGroupEvent(cards, source == null ? null : source.getSourceId(), this.getId(), fromZone, toZone)); switch(toZone) { - case EXILED: + case EXILED: boolean result = false; for(Card card: cards) { result |= moveCardToExileWithInfo(card, null, "", source == null ? null : source.getSourceId(), game, fromZone, true); } - return result; - case GRAVEYARD: + return result; + case GRAVEYARD: return moveCardsToGraveyardWithInfo(cards, source, game, fromZone); case HAND: result = false; @@ -2874,9 +2887,9 @@ public abstract class PlayerImpl implements Player, Serializable { return result; default: throw new UnsupportedOperationException("to Zone not supported yet"); - } + } } - + @Override public boolean moveCardToHandWithInfo(Card card, UUID sourceId, Game game, Zone fromZone) { return this.moveCardToHandWithInfo(card, sourceId, game, fromZone, true); @@ -2898,7 +2911,7 @@ public abstract class PlayerImpl implements Player, Serializable { default: sb.append(fromZone != null ? new StringBuilder(" from ").append(fromZone.toString().toLowerCase(Locale.ENGLISH)).append(" ") : ""); break; - } + } sb.append(card.getOwnerId().equals(this.getId()) ? "into his or her hand" : "into its owner's hand"); game.informPlayers(sb.toString()); } @@ -2906,10 +2919,10 @@ public abstract class PlayerImpl implements Player, Serializable { } return result; } - + @Override public boolean moveCardsToGraveyardWithInfo(List allCards, Ability source, Game game, Zone fromZone) { - boolean result = true; + boolean result = true; UUID sourceId = source == null ? null : source.getSourceId(); while (!allCards.isEmpty()) { // identify cards from one owner @@ -2934,19 +2947,21 @@ public abstract class PlayerImpl implements Player, Serializable { if (choosingPlayer == null) { continue; } - boolean chooseOrder = true; - if (cards.size() > 2) { - chooseOrder = choosingPlayer.chooseUse(Outcome.Neutral, "Would you like to choose the order the cards go to graveyard?", game); + boolean chooseOrder = false; + if (userData.askMoveToGraveOrder()) { + if (cards.size() > 3) { + chooseOrder = choosingPlayer.chooseUse(Outcome.Neutral, "Would you like to choose the order the cards go to graveyard?", game); + } } if (chooseOrder) { TargetCard target = new TargetCard(fromZone, new FilterCard("card to put on the top of your graveyard (last one chosen will be topmost)")); target.setRequired(true); while (choosingPlayer.isInGame() && cards.size() > 1) { choosingPlayer.chooseTarget(Outcome.Neutral, cards, target, source, game); - UUID targetObjectId = target.getFirstTarget(); + UUID targetObjectId = target.getFirstTarget(); Card card = cards.get(targetObjectId, game); - cards.remove(targetObjectId); - if (card != null) { + cards.remove(targetObjectId); + if (card != null) { result &= choosingPlayer.moveCardToGraveyardWithInfo(card, sourceId, game, fromZone); } target.clearChosen(); @@ -2959,11 +2974,11 @@ public abstract class PlayerImpl implements Player, Serializable { result &= choosingPlayer.moveCardToGraveyardWithInfo(card, sourceId, game, fromZone); } } - } + } } return result; } - + @Override public boolean moveCardToGraveyardWithInfo(Card card, UUID sourceId, Game game, Zone fromZone) { boolean result = false; @@ -3045,7 +3060,7 @@ public abstract class PlayerImpl implements Player, Serializable { public boolean putOntoBattlefieldWithInfo(Card card, Game game, Zone fromZone, UUID sourceId, boolean tapped) { return this.putOntoBattlefieldWithInfo(card, game, fromZone, sourceId, tapped, false); } - + @Override public boolean putOntoBattlefieldWithInfo(Card card, Game game, Zone fromZone, UUID sourceId, boolean tapped, boolean facedown) { boolean result = false; @@ -3109,7 +3124,7 @@ public abstract class PlayerImpl implements Player, Serializable { @Override public boolean isRequestToShowHandCardsAllowed() { - return userData.allowRequestShowHandCards(); + return userData.isAllowRequestShowHandCards(); } @Override diff --git a/Mage/src/mage/players/net/UserData.java b/Mage/src/mage/players/net/UserData.java index 72823bd53ea..101325ec660 100644 --- a/Mage/src/mage/players/net/UserData.java +++ b/Mage/src/mage/players/net/UserData.java @@ -16,10 +16,11 @@ public class UserData implements Serializable { protected boolean confirmEmptyManaPool; protected UserSkipPrioritySteps userSkipPrioritySteps; protected String flagName; + protected boolean askMoveToGraveOrder; public UserData(UserGroup userGroup, int avatarId, boolean showAbilityPickerForced, boolean allowRequestShowHandCards, boolean confirmEmptyManaPool, UserSkipPrioritySteps userSkipPrioritySteps, - String flagName) { + String flagName, boolean askMoveToGraveOrder) { this.groupId = userGroup.getGroupId(); this.avatarId = avatarId; this.showAbilityPickerForced = showAbilityPickerForced; @@ -27,6 +28,7 @@ public class UserData implements Serializable { this.userSkipPrioritySteps = userSkipPrioritySteps; this.confirmEmptyManaPool = confirmEmptyManaPool; this.flagName = flagName; + this.askMoveToGraveOrder = askMoveToGraveOrder; } public void setGroupId(int groupId) { @@ -49,20 +51,16 @@ public class UserData implements Serializable { return showAbilityPickerForced; } - public boolean isAllowRequestShowHandCards() { - return allowRequestShowHandCards; - } - public void setShowAbilityPickerForced(boolean showAbilityPickerForced) { this.showAbilityPickerForced = showAbilityPickerForced; } - public void setAllowRequestShowHandCards(boolean allowRequestShowHandCards) { - this.allowRequestShowHandCards = allowRequestShowHandCards; + public boolean isAllowRequestShowHandCards() { + return allowRequestShowHandCards; } - public boolean allowRequestShowHandCards() { - return allowRequestShowHandCards; + public void setAllowRequestShowHandCards(boolean allowRequestShowHandCards) { + this.allowRequestShowHandCards = allowRequestShowHandCards; } public UserSkipPrioritySteps getUserSkipPrioritySteps() { @@ -84,5 +82,13 @@ public class UserData implements Serializable { public String getFlagName() { return flagName; } + + public boolean askMoveToGraveOrder() { + return askMoveToGraveOrder; + } + + public void setAskMoveToGraveOrder(boolean askMoveToGraveOrder) { + this.askMoveToGraveOrder = askMoveToGraveOrder; + } } diff --git a/Mage/src/mage/watchers/common/AttackedThisTurnWatcher.java b/Mage/src/mage/watchers/common/AttackedThisTurnWatcher.java index be9dac03561..febd9d3eaa7 100644 --- a/Mage/src/mage/watchers/common/AttackedThisTurnWatcher.java +++ b/Mage/src/mage/watchers/common/AttackedThisTurnWatcher.java @@ -40,6 +40,7 @@ import mage.watchers.Watcher; */ public class AttackedThisTurnWatcher extends Watcher { + // TODO: use MageObjectReference instead of UUID public Set attackedThisTurnCreatures = new HashSet<>(); public AttackedThisTurnWatcher() { diff --git a/Utils/mtg-cards-data.txt b/Utils/mtg-cards-data.txt index d5fe33b6dd9..3ae82c3d2eb 100644 --- a/Utils/mtg-cards-data.txt +++ b/Utils/mtg-cards-data.txt @@ -25522,71 +25522,71 @@ Garruk, Apex Predator|Media Inserts|104|Special|{5}{B}{G}|Planeswalker - Garruk| Shamanic Revelation|Media Inserts|105|Special|{2}{G}{G}|Sorcery|||Draw a card for each creature you control.$Ferocious - You gain 4 life for each creature you control with power 4 or greater.| Ojutai's Command|Media Inserts|106|Special|{2}{W}{U}|Instant|||Choose two - Return target creature card with converted mana cost 2 or less from your graveyard to the battlefield; or You gain 4 life; or Counter target creature spell; or Draw a card.| Sultai|Media Inserts|999|Special|{{U}{B}{G}|Legendary Creature - Placeholder|2|2|| -Wood Elves|WPN Gateway|1|Special|{2}{G}|Creature — Elf Scout|1|1|When Wood Elves enters the battlefield, search your library for a Forest card and put that card onto the battlefield. Then shuffle your library.| -Icatian Javelineers|WPN Gateway|2|Special|{W}|Creature — Human Soldier|1|1|Icatian Javelineers enters the battlefield with a javelin counter on it.${T}, Remove a javelin counter from Icatian Javelineers: Icatian Javelineers deals 1 damage to target creature or player.| +Wood Elves|WPN Gateway|1|Special|{2}{G}|Creature — Elf Scout|1|1|When Wood Elves enters the battlefield, search your library for a Forest card and put that card onto the battlefield. Then shuffle your library.| +Icatian Javelineers|WPN Gateway|2|Special|{W}|Creature — Human Soldier|1|1|Icatian Javelineers enters the battlefield with a javelin counter on it.${T}, Remove a javelin counter from Icatian Javelineers: Icatian Javelineers deals 1 damage to target creature or player.| Fiery Temper|WPN Gateway|3|Special|{1}{R}{R}|Instant|||Fiery Temper deals 3 damage to target creature or player.$Madness {R} (If you discard this card, you may cast it for its madness cost instead of putting it into your graveyard.)| Boomerang|WPN Gateway|4|Special|{U}{U}|Instant|||Return target permanent to its owner's hand.| -Calciderm|WPN Gateway|5|Special|{2}{W}{W}|Creature — Beast|5|5|Shroud (This creature can't be the target of spells or abilities.)$Vanishing 4 (This permanent enters the battlefield with four time counters on it. At the beginning of your upkeep, remove a time counter from it. When the last is removed, sacrifice it.)| -Reckless Wurm|WPN Gateway|6|Special|{3}{R}{R}|Creature — Wurm|4|4|Trample$Madness {2}{R} (If you discard this card, you may cast it for its madness cost instead of putting it into your graveyard.)| -Yixlid Jailer|WPN Gateway|7|Special|{1}{B}|Creature — Zombie Wizard|2|1|Cards in graveyards lose all abilities.| +Calciderm|WPN Gateway|5|Special|{2}{W}{W}|Creature — Beast|5|5|Shroud (This creature can't be the target of spells or abilities.)$Vanishing 4 (This permanent enters the battlefield with four time counters on it. At the beginning of your upkeep, remove a time counter from it. When the last is removed, sacrifice it.)| +Reckless Wurm|WPN Gateway|6|Special|{3}{R}{R}|Creature — Wurm|4|4|Trample$Madness {2}{R} (If you discard this card, you may cast it for its madness cost instead of putting it into your graveyard.)| +Yixlid Jailer|WPN Gateway|7|Special|{1}{B}|Creature — Zombie Wizard|2|1|Cards in graveyards lose all abilities.| Zoetic Cavern|WPN Gateway|8|Special||Land|||{T}: Add {1} to your mana pool.$Morph {2} (You may cast this card face down as a 2/2 creature for {3}. Turn it face up any time for its morph cost.)| -Llanowar Elves|WPN Gateway|9|Special|{G}|Creature — Elf Druid|1|1|{T}: Add {G} to your mana pool.| -Mogg Fanatic|WPN Gateway|10|Special|{R}|Creature — Goblin|1|1|Sacrifice Mogg Fanatic: Mogg Fanatic deals 1 damage to target creature or player.| +Llanowar Elves|WPN Gateway|9|Special|{G}|Creature — Elf Druid|1|1|{T}: Add {G} to your mana pool.| +Mogg Fanatic|WPN Gateway|10|Special|{R}|Creature — Goblin|1|1|Sacrifice Mogg Fanatic: Mogg Fanatic deals 1 damage to target creature or player.| Mind Stone|WPN Gateway|11|Special|{2}|Artifact|||{T}: Add {1} to your mana pool.${1}, {T}, Sacrifice Mind Stone: Draw a card.| -Dauntless Dourbark|WPN Gateway|12|Special|{3}{G}|Creature — Treefolk Warrior|*|*|Dauntless Dourbark's power and toughness are each equal to the number of Forests you control plus the number of Treefolk you control.$Dauntless Dourbark has trample as long as you control another Treefolk.| +Dauntless Dourbark|WPN Gateway|12|Special|{3}{G}|Creature — Treefolk Warrior|*|*|Dauntless Dourbark's power and toughness are each equal to the number of Forests you control plus the number of Treefolk you control.$Dauntless Dourbark has trample as long as you control another Treefolk.| Lava Axe|WPN Gateway|13|Special|{4}{R}|Sorcery|||Lava Axe deals 5 damage to target player.| -Cenn's Tactician|WPN Gateway|14|Special|{W}|Creature — Kithkin Soldier|1|1|{W}, {T}: Put a +1/+1 counter on target Soldier creature.$Each creature you control with a +1/+1 counter on it can block an additional creature.| -Oona's Blackguard|WPN Gateway|15|Special|{1}{B}|Creature — Faerie Rogue|1|1|Flying$Each other Rogue creature you control enters the battlefield with an additional +1/+1 counter on it.$Whenever a creature you control with a +1/+1 counter on it deals combat damage to a player, that player discards a card.| -Gravedigger|WPN Gateway|16|Special|{3}{B}|Creature — Zombie|2|2|When Gravedigger enters the battlefield, you may return target creature card from your graveyard to your hand.| -Boggart Ram-Gang|WPN Gateway|17|Special|{RG}{RG}{RG}|Creature — Goblin Warrior|3|3|Haste$Wither (This deals damage to creatures in the form of -1/-1 counters.)| -Wilt-Leaf Cavaliers|WPN Gateway|18|Special|{GW}{GW}{GW}|Creature — Elf Knight|3|4|Vigilance| -Duergar Hedge-Mage|WPN Gateway|19|Special|{2}{RW}|Creature — Dwarf Shaman|2|2|When Duergar Hedge-Mage enters the battlefield, if you control two or more Mountains, you may destroy target artifact.$When Duergar Hedge-Mage enters the battlefield, if you control two or more Plains, you may destroy target enchantment.| -Selkie Hedge-Mage|WPN Gateway|20|Special|{2}{GU}|Creature — Merfolk Wizard|2|2|When Selkie Hedge-Mage enters the battlefield, if you control two or more Forests, you may gain 3 life.$When Selkie Hedge-Mage enters the battlefield, if you control two or more Islands, you may return target tapped creature to its owner's hand.| -Sprouting Thrinax|WPN Gateway|21|Special|{B}{R}{G}|Creature — Lizard|3|3|When Sprouting Thrinax dies, put three 1/1 green Saproling creature tokens onto the battlefield.| -Woolly Thoctar|WPN Gateway|22|Special|{W}{R}{G}|Creature — Beast|5|4|| +Cenn's Tactician|WPN Gateway|14|Special|{W}|Creature — Kithkin Soldier|1|1|{W}, {T}: Put a +1/+1 counter on target Soldier creature.$Each creature you control with a +1/+1 counter on it can block an additional creature.| +Oona's Blackguard|WPN Gateway|15|Special|{1}{B}|Creature — Faerie Rogue|1|1|Flying$Each other Rogue creature you control enters the battlefield with an additional +1/+1 counter on it.$Whenever a creature you control with a +1/+1 counter on it deals combat damage to a player, that player discards a card.| +Gravedigger|WPN Gateway|16|Special|{3}{B}|Creature — Zombie|2|2|When Gravedigger enters the battlefield, you may return target creature card from your graveyard to your hand.| +Boggart Ram-Gang|WPN Gateway|17|Special|{RG}{RG}{RG}|Creature — Goblin Warrior|3|3|Haste$Wither (This deals damage to creatures in the form of -1/-1 counters.)| +Wilt-Leaf Cavaliers|WPN Gateway|18|Special|{GW}{GW}{GW}|Creature — Elf Knight|3|4|Vigilance| +Duergar Hedge-Mage|WPN Gateway|19|Special|{2}{RW}|Creature — Dwarf Shaman|2|2|When Duergar Hedge-Mage enters the battlefield, if you control two or more Mountains, you may destroy target artifact.$When Duergar Hedge-Mage enters the battlefield, if you control two or more Plains, you may destroy target enchantment.| +Selkie Hedge-Mage|WPN Gateway|20|Special|{2}{GU}|Creature — Merfolk Wizard|2|2|When Selkie Hedge-Mage enters the battlefield, if you control two or more Forests, you may gain 3 life.$When Selkie Hedge-Mage enters the battlefield, if you control two or more Islands, you may return target tapped creature to its owner's hand.| +Sprouting Thrinax|WPN Gateway|21|Special|{B}{R}{G}|Creature — Lizard|3|3|When Sprouting Thrinax dies, put three 1/1 green Saproling creature tokens onto the battlefield.| +Woolly Thoctar|WPN Gateway|22|Special|{W}{R}{G}|Creature — Beast|5|4|| Path to Exile|WPN Gateway|24|Special|{W}|Instant|||Exile target creature. Its controller may search his or her library for a basic land card, put that card onto the battlefield tapped, then shuffle his or her library.| -Hellspark Elemental|WPN Gateway|25|Special|{1}{R}|Creature — Elemental|3|1|Trample, haste$At the beginning of the end step, sacrifice Hellspark Elemental.$Unearth {1}{R} ({1}{R}: Return this card from your graveyard to the battlefield. It gains haste. Exile it at the beginning of the next end step or if it would leave the battlefield. Unearth only as a sorcery.)| -Marisi's Twinclaws|WPN Gateway|26|Special|{2}{RW}{G}|Creature — Cat Warrior|2|4|Double strike| +Hellspark Elemental|WPN Gateway|25|Special|{1}{R}|Creature — Elemental|3|1|Trample, haste$At the beginning of the end step, sacrifice Hellspark Elemental.$Unearth {1}{R} ({1}{R}: Return this card from your graveyard to the battlefield. It gains haste. Exile it at the beginning of the next end step or if it would leave the battlefield. Unearth only as a sorcery.)| +Marisi's Twinclaws|WPN Gateway|26|Special|{2}{RW}{G}|Creature — Cat Warrior|2|4|Double strike| Slave of Bolas|WPN Gateway|27|Special|{3}{UR}{B}|Sorcery|||Gain control of target creature. Untap that creature. It gains haste until end of turn. Sacrifice it at the beginning of the next end step.| -Mycoid Shepherd|WPN Gateway|28|Special|{1}{W}{G}{G}|Creature — Fungus|5|4|Whenever Mycoid Shepherd or another creature you control with power 5 or greater dies, you may gain 5 life.| -Naya Sojourners|WPN Gateway|29|Special|{2}{W}{R}{G}|Creature — Elf Shaman|5|3|When you cycle Naya Sojourners or it dies, you may put a +1/+1 counter on target creature.$Cycling {2}{G} ({2}{G}, Discard this card: Draw a card.)| -Mind Control|WPN Gateway|30|Special|{3}{U}{U}|Enchantment — Aura|||Enchant creature$You control enchanted creature.| +Mycoid Shepherd|WPN Gateway|28|Special|{1}{W}{G}{G}|Creature — Fungus|5|4|Whenever Mycoid Shepherd or another creature you control with power 5 or greater dies, you may gain 5 life.| +Naya Sojourners|WPN Gateway|29|Special|{2}{W}{R}{G}|Creature — Elf Shaman|5|3|When you cycle Naya Sojourners or it dies, you may put a +1/+1 counter on target creature.$Cycling {2}{G} ({2}{G}, Discard this card: Draw a card.)| +Mind Control|WPN Gateway|30|Special|{3}{U}{U}|Enchantment — Aura|||Enchant creature$You control enchanted creature.| Rise from the Grave|WPN Gateway|31|Special|{4}{B}|Sorcery|||Put target creature card from a graveyard onto the battlefield under your control. That creature is a black Zombie in addition to its other colors and types.| -Kor Duelist|WPN Gateway|32|Special|{W}|Creature — Kor Soldier|1|1|As long as Kor Duelist is equipped, it has double strike. (It deals both first-strike and regular combat damage.)| -Vampire Nighthawk|WPN Gateway|33|Special|{1}{B}{B}|Creature — Vampire Shaman|2|3|Flying$Deathtouch (Any amount of damage this deals to a creature is enough to destroy it.)$Lifelink (Damage dealt by this creature also causes you to gain that much life.)| -Nissa's Chosen|WPN Gateway|34|Special|{G}{G}|Creature — Elf Warrior|2|3|If Nissa's Chosen would die, put it on the bottom of its owner's library instead.| -Emeria Angel|WPN Gateway|35|Special|{2}{W}{W}|Creature — Angel|3|3|Flying$Landfall — Whenever a land enters the battlefield under your control, you may put a 1/1 white Bird creature token with flying onto the battlefield.| -Kor Firewalker|WPN Gateway|36|Special|{W}{W}|Creature — Kor Soldier|2|2|Protection from red$Whenever a player casts a red spell, you may gain 1 life.| -Leatherback Baloth|WPN Gateway|37|Special|{G}{G}{G}|Creature — Beast|4|5|| -Hada Freeblade|WPN Gateway|38|Special|{W}|Creature — Human Soldier Ally|0|1|Whenever Hada Freeblade or another Ally enters the battlefield under your control, you may put a +1/+1 counter on Hada Freeblade.| -Kalastria Highborn|WPN Gateway|39|Special|{B}{B}|Creature — Vampire Shaman|2|2|Whenever Kalastria Highborn or another Vampire you control dies, you may pay {B}. If you do, target player loses 2 life and you gain 2 life.| +Kor Duelist|WPN Gateway|32|Special|{W}|Creature — Kor Soldier|1|1|As long as Kor Duelist is equipped, it has double strike. (It deals both first-strike and regular combat damage.)| +Vampire Nighthawk|WPN Gateway|33|Special|{1}{B}{B}|Creature — Vampire Shaman|2|3|Flying$Deathtouch (Any amount of damage this deals to a creature is enough to destroy it.)$Lifelink (Damage dealt by this creature also causes you to gain that much life.)| +Nissa's Chosen|WPN Gateway|34|Special|{G}{G}|Creature — Elf Warrior|2|3|If Nissa's Chosen would die, put it on the bottom of its owner's library instead.| +Emeria Angel|WPN Gateway|35|Special|{2}{W}{W}|Creature — Angel|3|3|Flying$Landfall — Whenever a land enters the battlefield under your control, you may put a 1/1 white Bird creature token with flying onto the battlefield.| +Kor Firewalker|WPN Gateway|36|Special|{W}{W}|Creature — Kor Soldier|2|2|Protection from red$Whenever a player casts a red spell, you may gain 1 life.| +Leatherback Baloth|WPN Gateway|37|Special|{G}{G}{G}|Creature — Beast|4|5|| +Hada Freeblade|WPN Gateway|38|Special|{W}|Creature — Human Soldier Ally|0|1|Whenever Hada Freeblade or another Ally enters the battlefield under your control, you may put a +1/+1 counter on Hada Freeblade.| +Kalastria Highborn|WPN Gateway|39|Special|{B}{B}|Creature — Vampire Shaman|2|2|Whenever Kalastria Highborn or another Vampire you control dies, you may pay {B}. If you do, target player loses 2 life and you gain 2 life.| Syphon Mind|WPN Gateway|40|Special|{3}{B}|Sorcery|||Each other player discards a card. You draw a card for each card discarded this way.| -Pathrazer of Ulamog|WPN Gateway|46|Special|{11}|Creature — Eldrazi|9|9|Annihilator 3 (Whenever this creature attacks, defending player sacrifices three permanents.)$Pathrazer of Ulamog can't be blocked except by three or more creatures.| +Pathrazer of Ulamog|WPN Gateway|46|Special|{11}|Creature — Eldrazi|9|9|Annihilator 3 (Whenever this creature attacks, defending player sacrifices three permanents.)$Pathrazer of Ulamog can't be blocked except by three or more creatures.| Curse of Wizardry|WPN Gateway|47|Special|{2}{B}{B}|Enchantment|||As Curse of Wizardry enters the battlefield, choose a color.$Whenever a player casts a spell of the chosen color, that player loses 1 life.| Staggershock|WPN Gateway|48|Special|{2}{R}|Instant|||Staggershock deals 2 damage to target creature or player.$Rebound (If you cast this spell from your hand, exile it as it resolves. At the beginning of your next upkeep, you may cast this card from exile without paying its mana cost.)| -Deathless Angel|WPN Gateway|49|Special|{4}{W}{W}|Creature — Angel|5|7|Flying${W}{W}: Target creature gains indestructible until end of turn.| +Deathless Angel|WPN Gateway|49|Special|{4}{W}{W}|Creature — Angel|5|7|Flying${W}{W}: Target creature gains indestructible until end of turn.| Fling|WPN Gateway|50|Special|{1}{R}|Instant|||As an additional cost to cast Fling, sacrifice a creature.$Fling deals damage equal to the sacrificed creature's power to target creature or player.| -Sylvan Ranger|WPN Gateway|51|Special|{1}{G}|Creature — Elf Scout|1|1|When Sylvan Ranger enters the battlefield, you may search your library for a basic land card, reveal it, put it into your hand, then shuffle your library.| -Plague Stinger|WPN Gateway|59|Special|{1}{B}|Creature — Insect Horror|1|1|Flying$Infect (This creature deals damage to creatures in the form of -1/-1 counters and to players in the form of poison counters.)| +Sylvan Ranger|WPN Gateway|51|Special|{1}{G}|Creature — Elf Scout|1|1|When Sylvan Ranger enters the battlefield, you may search your library for a basic land card, reveal it, put it into your hand, then shuffle your library.| +Plague Stinger|WPN Gateway|59|Special|{1}{B}|Creature — Insect Horror|1|1|Flying$Infect (This creature deals damage to creatures in the form of -1/-1 counters and to players in the form of poison counters.)| Golem's Heart|WPN Gateway|60|Special|{2}|Artifact|||Whenever a player casts an artifact spell, you may gain 1 life.| -Skinrender|WPN Gateway|63|Special|{2}{B}{B}|Creature — Zombie|3|3|When Skinrender enters the battlefield, put three -1/-1 counters on target creature.| +Skinrender|WPN Gateway|63|Special|{2}{B}{B}|Creature — Zombie|3|3|When Skinrender enters the battlefield, put three -1/-1 counters on target creature.| Master's Call|WPN Gateway|64|Special|{2}{W}|Instant|||Put two 1/1 colorless Myr artifact creature tokens onto the battlefield.| -Plague Myr|WPN Gateway|65|Special|{2}|Artifact Creature — Myr|1|1|Infect (This creature deals damage to creatures in the form of -1/-1 counters and to players in the form of poison counters.)${T}: Add {1} to your mana pool.| -Signal Pest|WPN Gateway|66|Special|{1}|Artifact Creature — Pest|0|1|Battle cry (Whenever this creature attacks, each other attacking creature gets +1/+0 until end of turn.)$Signal Pest can't be blocked except by creatures with flying or reach.| +Plague Myr|WPN Gateway|65|Special|{2}|Artifact Creature — Myr|1|1|Infect (This creature deals damage to creatures in the form of -1/-1 counters and to players in the form of poison counters.)${T}: Add {1} to your mana pool.| +Signal Pest|WPN Gateway|66|Special|{1}|Artifact Creature — Pest|0|1|Battle cry (Whenever this creature attacks, each other attacking creature gets +1/+0 until end of turn.)$Signal Pest can't be blocked except by creatures with flying or reach.| Fling|WPN Gateway|69|Special|{1}{R}|Instant|||As an additional cost to cast Fling, sacrifice a creature.$Fling deals damage equal to the sacrificed creature's power to target creature or player.| -Sylvan Ranger|WPN Gateway|70|Special|{1}{G}|Creature — Elf Scout|1|1|When Sylvan Ranger enters the battlefield, you may search your library for a basic land card, reveal it, put it into your hand, then shuffle your library.| -Vault Skirge|WPN Gateway|71|Special|{1}{BP}|Artifact Creature — Imp|1|1|({BP} can be paid with either {B} or 2 life.)$Flying$Lifelink (Damage dealt by this creature also causes you to gain that much life.)| -Maul Splicer|WPN Gateway|72|Special|{6}{G}|Creature — Human Artificer|1|1|When Maul Splicer enters the battlefield, put two 3/3 colorless Golem artifact creature tokens onto the battlefield.$Golem creatures you control have trample.| +Sylvan Ranger|WPN Gateway|70|Special|{1}{G}|Creature — Elf Scout|1|1|When Sylvan Ranger enters the battlefield, you may search your library for a basic land card, reveal it, put it into your hand, then shuffle your library.| +Vault Skirge|WPN Gateway|71|Special|{1}{BP}|Artifact Creature — Imp|1|1|({BP} can be paid with either {B} or 2 life.)$Flying$Lifelink (Damage dealt by this creature also causes you to gain that much life.)| +Maul Splicer|WPN Gateway|72|Special|{6}{G}|Creature — Human Artificer|1|1|When Maul Splicer enters the battlefield, put two 3/3 colorless Golem artifact creature tokens onto the battlefield.$Golem creatures you control have trample.| Shrine of Burning Rage|WPN Gateway|73|Special|{2}|Artifact|||At the beginning of your upkeep or whenever you cast a red spell, put a charge counter on Shrine of Burning Rage.${3}, {T}, Sacrifice Shrine of Burning Rage: Shrine of Burning Rage deals damage equal to the number of charge counters on it to target creature or player.| -Tormented Soul|WPN Gateway|76|Special|{B}|Creature — Spirit|1|1|Tormented Soul can't block and can't be blocked.| -Auramancer|WPN Gateway|77|Special|{2}{W}|Creature — Human Wizard|2|2|When Auramancer enters the battlefield, you may return target enchantment card from your graveyard to your hand.| +Tormented Soul|WPN Gateway|76|Special|{B}|Creature — Spirit|1|1|Tormented Soul can't block and can't be blocked.| +Auramancer|WPN Gateway|77|Special|{2}{W}|Creature — Human Wizard|2|2|When Auramancer enters the battlefield, you may return target enchantment card from your graveyard to your hand.| Circle of Flame|WPN Gateway|78|Special|{1}{R}|Enchantment|||Whenever a creature without flying attacks you or a planeswalker you control, Circle of Flame deals 1 damage to that creature.| -Gather the Townsfolk|WPN Gateway|79|Special|{1}{W}|Sorcery|||Put two 1/1 white Human creature tokens onto the battlefield.$Fateful hour — If you have 5 or less life, put five of those tokens onto the battlefield instead.| -Curse of the Bloody Tome|WPN Gateway|80|Special|{2}{U}|Enchantment — Aura Curse|||Enchant player$At the beginning of enchanted player's upkeep, that player puts the top two cards of his or her library into his or her graveyard.| -Curse of Thirst|WPN Gateway|81|Special|{4}{B}|Enchantment — Aura Curse|||Enchant player$At the beginning of enchanted player's upkeep, Curse of Thirst deals damage to that player equal to the number of Curses attached to him or her.| -Nearheath Stalker|WPN Gateway|82|Special|{4}{R}|Creature — Vampire Rogue|4|1|Undying (When this creature dies, if it had no +1/+1 counters on it, return it to the battlefield under its owner's control with a +1/+1 counter on it.)| -Bloodcrazed Neonate|WPN Gateway|83|Special|{1}{R}|Creature — Vampire|2|1|Bloodcrazed Neonate attacks each turn if able.$Whenever Bloodcrazed Neonate deals combat damage to a player, put a +1/+1 counter on it.| -Boneyard Wurm|WPN Gateway|84|Special|{1}{G}|Creature — Wurm|*|*|Boneyard Wurm's power and toughness are each equal to the number of creature cards in your graveyard.| +Gather the Townsfolk|WPN Gateway|79|Special|{1}{W}|Sorcery|||Put two 1/1 white Human creature tokens onto the battlefield.$Fateful hour — If you have 5 or less life, put five of those tokens onto the battlefield instead.| +Curse of the Bloody Tome|WPN Gateway|80|Special|{2}{U}|Enchantment — Aura Curse|||Enchant player$At the beginning of enchanted player's upkeep, that player puts the top two cards of his or her library into his or her graveyard.| +Curse of Thirst|WPN Gateway|81|Special|{4}{B}|Enchantment — Aura Curse|||Enchant player$At the beginning of enchanted player's upkeep, Curse of Thirst deals damage to that player equal to the number of Curses attached to him or her.| +Nearheath Stalker|WPN Gateway|82|Special|{4}{R}|Creature — Vampire Rogue|4|1|Undying (When this creature dies, if it had no +1/+1 counters on it, return it to the battlefield under its owner's control with a +1/+1 counter on it.)| +Bloodcrazed Neonate|WPN Gateway|83|Special|{1}{R}|Creature — Vampire|2|1|Bloodcrazed Neonate attacks each turn if able.$Whenever Bloodcrazed Neonate deals combat damage to a player, put a +1/+1 counter on it.| +Boneyard Wurm|WPN Gateway|84|Special|{1}{G}|Creature — Wurm|*|*|Boneyard Wurm's power and toughness are each equal to the number of creature cards in your graveyard.| Dirtcowl Wurm|Prerelease Events|1|Special|{4}{G}|Creature - Wurm|3|4|Whenever an opponent plays a land, put a +1/+1 counter on Dirtcowl Wurm.| Revenant|Prerelease Events|2|Special|{4}{B}|Creature - Spirit|*|*|Flying$Revenant's power and toughness are each equal to the number of creature cards in your graveyard.| Monstrous Hount|Prerelease Events|3|Special|{3}{R}|Creature - Hound|4|4|Monstrous Hound can't attack unless you control more lands than defending player.$Monstrous Hound can't block unless you control more lands than attacking player.| @@ -25601,7 +25601,7 @@ Avatar of Hope|Prerelease Events|11|Special|{6}{W}{W}|Creature - Avatar|4|9|If y Raging Kavu|Prerelease Events|12|Special|{4}{1}{R}{G}|Creature - Kavu|3|1|Flash$Haste| Questing Phelddagrif|Prerelease Events|13|Special|{1}{W}{U}{G}|Creature - Phelddagrif|4|4|{G}: Questing Phelddagrif gets +1/+1 until end of turn. Target opponent puts a 1/1 green Hippo creature token onto the battlefield.${W}: Questing Phelddagrif gains protection from black and from red until end of turn. Target opponent gains 2 life.${U}: Questing Phelddagrif gains flying until end of turn. Target opponent may draw a card.| Fungal Shambler|Prerelease Events|14|Special|{4}{U}{B}{G}|Creature - Fungus Beast|6|4|Trample$Whenever Fungal Shambler deals damage to an opponent, you draw a card and that opponent discards a card.| -Stone-Tongue Baselisk|Prerelease Events|15|Special|{4}{G}{G}{G}|Creature - Basilisk|4|5|Whenever Stone-Tongue Basilisk deals combat damage to a creature, destroy that creature at end of combat.$Threshold — As long as seven or more cards are in your graveyard, all creatures able to block Stone-Tongue Basilisk do so.| +Stone-Tongue Baselisk|Prerelease Events|15|Special|{4}{G}{G}{G}|Creature - Basilisk|4|5|Whenever Stone-Tongue Basilisk deals combat damage to a creature, destroy that creature at end of combat.$Threshold — As long as seven or more cards are in your graveyard, all creatures able to block Stone-Tongue Basilisk do so.| Laquatus's Champion|Prerelease Events|16|Special|{4}{B}{B}|Creature - Nightmare Horror|6|3|When Laquatus's Champion enters the battlefield, target player loses 6 life.$When Laquatus's Champion leaves the battlefield, that player gains 6 life.${B}: Regenerate Laquatus's Champion.| Glory|Prerelease Events|17|Special|{{3}{W}{W}|Creature - Incarnation|3|3|Flying${2}{W}: Choose a color. Creatures you control gain protection from the chosen color until end of turn. Activate this ability only if Glory is in your graveyard.| Silent Specter|Prerelease Events|18|Special|{4}{B}{B}|Creature - Specter|4|4|Flying$Whenever Silent Specter deals combat damage to a player, that player discards two cards.$Morph {3}{B}{B} (You may cast this card face down as a 2/2 creature for {3}. Turn it face up any time for its morph cost.)| @@ -25617,9 +25617,9 @@ Gleancrawler|Prerelease Events|27|Special|{3}{BG}{BG}{BG}|Creature - Insect Horr Djinn Illuminatus|Prerelease Events|28|Special|{5}{UR}{UR}|Creature - Djinn|3|5|({U/R} can be paid with either {U} or {R}.)$Flying$Each instant and sorcery spell you cast has replicate. The replicate cost is equal to its mana cost. (When you cast it, copy it for each time you paid its replicate cost. You may choose new targets for the copies.)| Avatar of Discord|Prerelease Events|29|Special|{BR}{BR}{BR}|Creature - Avatar|5|3|({B/R} can be paid with either {B} or {R}.)$Flying$When Avatar of Discord enters the battlefield, sacrifice it unless you discard two cards.| Allosaurus Rider|Prerelease Events|30|Special|{5}{G}{G}|Creature - Elf Warrior|1+*|1+*|You may exile two green cards from your hand rather than pay Allosaurus Rider's mana cost.$Allosaurus Rider's power and toughness are each equal to 1 plus the number of lands you control.| -Lotus Bloom|Prerelease Events|31|Special||Artifact|||Suspend 3�{0} (Rather than cast this card from your hand, pay {0} and exile it with three time counters on it. At the beginning of your upkeep, remove a time counter. When the last is removed, cast it without paying its mana cost.)${T}, Sacrifice Lotus Bloom: Add three mana of any one color to your mana pool. +Lotus Bloom|Prerelease Events|31|Special||Artifact|||Suspend 3�{0} (Rather than cast this card from your hand, pay {0} and exile it with three time counters on it. At the beginning of your upkeep, remove a time counter. When the last is removed, cast it without paying its mana cost.)${T}, Sacrifice Lotus Bloom: Add three mana of any one color to your mana pool. Oros, the Avenger|Prerelease Events|32|Special|{3}{W}{B}{R}|Legendary Creature - Dragon|6|6|Flying$Whenever Oros, the Avenger deals combat damage to a player, you may pay {2}{W}. If you do, Oros deals 3 damage to each nonwhite creature.| -Korlash, Heir to Blackblade|Prerelease Events|33|Special|{2}{B}{B}|Legendary Creature - Zombie Warrior|*|*|Korlash, Heir to Blackblade's power and toughness are each equal to the number of Swamps you control.${1}{B}: Regenerate Korlash.$Grandeur — Discard another card named Korlash, Heir to Blackblade: Search your library for up to two Swamp cards, put them onto the battlefield tapped, then shuffle your library.| +Korlash, Heir to Blackblade|Prerelease Events|33|Special|{2}{B}{B}|Legendary Creature - Zombie Warrior|*|*|Korlash, Heir to Blackblade's power and toughness are each equal to the number of Swamps you control.${1}{B}: Regenerate Korlash.$Grandeur — Discard another card named Korlash, Heir to Blackblade: Search your library for up to two Swamp cards, put them onto the battlefield tapped, then shuffle your library.| Wren's Run Packmaster|Prerelease Events|34|Special|{3}{G}|Creature - Elf Warrior|5|5|Champion an Elf (When this creature enters the battlefield, sacrifice it unless you exile another Elf you control. When this creature leaves the battlefield, that card returns to the battlefield.)${2}{G}: Put a 2/2 green Wolf creature token onto the battlefield.$Wolves you control have deathtouch.| Door of Destinies|Prerelease Events|35|Special|{4}|Artifact|||As Door of Destinies enters the battlefield, choose a creature type.$Whenever you cast a spell of the chosen type, put a charge counter on Door of Destinies.$Creatures you control of the chosen type get +1/+1 for each charge counter on Door of Destinies.| Demigod of Revenge|Prerelease Events|36|Special|{BR}{BR}{BR}{BR}{BR}|Creature - Spirit Avatar|5|4|Flying$Haste$When you cast Demigod of Revenge, return all cards named Demigod of Revenge from your graveyard to the battlefield.| @@ -25628,7 +25628,7 @@ Ajani Vengeant|Prerelease Events|38|Special|{2}{W}{R}|Planeswalker - Ajani|||+1: Malfegor|Prerelease Events|39|Special|{2}{B}{B}{R}{R}|Legendary Creature - Demon Dragon|6|6|Flying$When Malfegor enters the battlefield, discard your hand. Each opponent sacrifices a creature for each card discarded this way.| Dragon Broodmother|Prerelease Events|40|Special|{2}{R}{R}{R}{G}|Creature - Dragon|4|4|Flying$At the beginning of each upkeep, put a 1/1 red and green Dragon creature token with flying and devour 2 onto the battlefield. (As the token enters the battlefield, you may sacrifice any number of creatures. It enters the battlefield with twice that many +1/+1 counters on it.)| Vampire Nocturnus|Prerelease Events|41|Special|{1}{B}{B}{B}|Creature - Vampire|3|3|Play with the top card of your library revealed.$As long as the top card of your library is black, Vampire Nocturnus and other Vampire creatures you control get +2/+1 and have flying.| -Rampaging Baloths|Prerelease Events|42|Special|{4}{G}{G}|Creature - Beast|6|6|Trample$Landfall — Whenever a land enters the battlefield under your control, you may put a 4/4 green Beast creature token onto the battlefield.| +Rampaging Baloths|Prerelease Events|42|Special|{4}{G}{G}|Creature - Beast|6|6|Trample$Landfall — Whenever a land enters the battlefield under your control, you may put a 4/4 green Beast creature token onto the battlefield.| Comet Storm|Prerelease Events|43|Special|{X}{R}{R}|Instant|||Multikicker {1} (You may pay an additional {1} any number of times as you cast this spell.)$Choose target creature or player, then choose another target creature or player for each time Comet Storm was kicked. Comet Storm deals X damage to each of them.| Emrakul, the Aeons Torn|Prerelease Events|44|Special|{15}|Legendary Creature - Eldrazi|15|15|Emrakul, the Aeons Torn can't be countered.$When you cast Emrakul, take an extra turn after this one.$Flying, protection from colored spells, annihilator 6$When Emrakul is put into a graveyard from anywhere, its owner shuffles his or her graveyard into his or her library.| Sun Titan|Prerelease Events|45|Special|{4}{W}{W}|Creature - Giant|6|6|Vigilance$Whenever Sun Titan enters the battlefield or attacks, you may return target permanent card with converted mana cost 3 or less from your graveyard to the battlefield.| @@ -25651,7 +25651,7 @@ Grove of the Guardian|Prerelease Events|59|Special||Land|||{T}: Add {1} to your Consuming Aberration|Prerelease Events|60|Special|{3}{U}{B}|Creature - Horror|*|*|Consuming Aberration's power and toughness are each equal to the number of cards in your opponents' graveyards.$Whenever you cast a spell, each opponent reveals cards from the top of his or her library until he or she reveals a land card, then puts those cards into his or her graveyard.| Fathom Mage|Prerelease Events|61|Special|{2}{U}{G}|Creature - Human Wizard|1|1|Evolve (Whenever a creature enters the battlefield under your control, if that creature has greater power or toughness than this creature, put a +1/+1 counter on this creature.)$Whenever a +1/+1 counter is placed on Fathom Mage, you may draw a card.| Foundry Champion|Prerelease Events|62|Special|{4}{W}{R}|Creature - Elemental Soldier|4|4When Foundry Champion enters the battlefield, it deals damage to target creature or player equal to the number of creatures you control.${R}: Foundry Champion gets +1/+0 until end of turn.${W}: Foundry Champion gets +0/+1 until end of turn.| -Rubblehulk|Prerelease Events|63|Special|{4}{R}{G}|Creature - Elemental|*|*|Rubblehulk's power and toughness are each equal to the number of lands you control.$Bloodrush — {1}{R}{G}, Discard Rubblehulk: Target attacking creature gets +X/+X until end of turn, where X is the number of lands you control.| +Rubblehulk|Prerelease Events|63|Special|{4}{R}{G}|Creature - Elemental|*|*|Rubblehulk's power and toughness are each equal to the number of lands you control.$Bloodrush — {1}{R}{G}, Discard Rubblehulk: Target attacking creature gets +X/+X until end of turn, where X is the number of lands you control.| Treasury Thrull|Prerelease Events|64|Special|{4}{W}{B}|Creature - Thrull|4|4|Extort (Whenever you cast a spell, you may pay {WB}. If you do, each opponent loses 1 life and you gain that much life.)$Whenever Treasury Thrull attacks, you may return target artifact, creature, or enchantment card from your graveyard to your hand.| Maze's End|Prerelease Events|65|Special||Land|||Maze's End enters the battlefield tapped.${T}: Add {1} to your mana pool.${3}, {T}, Return Maze's End to its owner's hand: Search your library for a Gate card, put it onto the battlefield, then shuffle your library. If you control ten or more Gates with different names, you win the game.| Plains|Prerelease Events|66|Special||Basic Land - Plains|||({T}: Add {W} to your mana pool.)| @@ -25660,15 +25660,15 @@ Celestial Archon|Prerelease Events|68|Special|{3}{W}{W}|Enchantment Creature - A Shipbreaker Kraken|Prerelease Events|69|Special|{4}{U}{U}|Creature - Kraken|6|6|{6}{U}{U}: Monstrosity 4. (If this creature isn't monstrous, put four +1/+1 counters on it and it becomes monstrous.)$When Shipbreaker Kraken becomes monstrous, tap up to four target creatures. Those creatures don't untap during their controllers' untap steps for as long as you control Shipbreaker Kraken.| Abhorrent Overlord|Prerelease Events|70|Special|{5}{B}{B}|Creature - Demon|6|6|Flying$When Abhorrent Overlord enters the battlefield, put a number of 1/1 black Harpy creature tokens with flying onto the battlefield equal to your devotion to black. (Each {B} in the mana costs of permanents you control counts toward your devotion to black.)$At the beginning of your upkeep, sacrifice a creature.| Ember Swallower|Prerelease Events|71|Special|{2}{R}{R}|Creature - Elemental|4|5|{5}{R}{R}: Monstrosity 3. (If this creature isn't monstrous, put three +1/+1 counters on it and it becomes monstrous.)$When Ember Swallower becomes monstrous, each player sacrifices three lands.| -Anthousa, Setessan Hero|Prerelease Events|72|Special|{3}{G}{G}|Legendary Creature - Human Warrior|4|5|Heroic — Whenever you cast a spell that targets Anthousa, Setessan Hero, up to three target lands you control each become 2/2 Warrior creatures until end of turn. They're still lands.| +Anthousa, Setessan Hero|Prerelease Events|72|Special|{3}{G}{G}|Legendary Creature - Human Warrior|4|5|Heroic — Whenever you cast a spell that targets Anthousa, Setessan Hero, up to three target lands you control each become 2/2 Warrior creatures until end of turn. They're still lands.| Silent Sentinel|Prerelease Events|73|Special|{5}{W}{W}|Creature - Archon|4|6|Flying$Whenever Silent Sentinel attacks, you may return target enchantment card from your graveyard to the battlefield.| -Arbiter of the Ideal|Prerelease Events|74|Special|{4}{U}{U}|Creature - Sphinx|4|5|Flying$Inspired — Whenever Arbiter of the Ideal becomes untapped, reveal the top card of your library. If it's an artifact, creature, or land card, you may put it onto the battlefield with a manifestation counter on it. That permanent is an enchantment in addition to its other types.| +Arbiter of the Ideal|Prerelease Events|74|Special|{4}{U}{U}|Creature - Sphinx|4|5|Flying$Inspired — Whenever Arbiter of the Ideal becomes untapped, reveal the top card of your library. If it's an artifact, creature, or land card, you may put it onto the battlefield with a manifestation counter on it. That permanent is an enchantment in addition to its other types.| Eater of Hope|Prerelease Events|75|Special|{5}{B}{B}|Creature - Demon|6|4|Flying${B}, Sacrifice another creature: Regenerate Eater of Hope.${2}{B}, Sacrifice two other creatures: Destroy target creature.| Forgestoker Dragon|Prerelease Events|76|Special|{4}{R}{R}|Creature - Dragon|5|4|Flying${1}{R}: Forgestoker Dragon deals 1 damage to target creature. That creature can't block this combat. Activate this ability only if Forgestoker Dragon is attacking.| Nessian Wilds Ravager|Prerelease Events|77|Special|{4}{G}{G}|Creature - Hydra|6|6|Tribute 6 (As this creature enters the battlefield, an opponent of your choice may place six +1/+1 counters on it.)$When Nessian Wilds Ravager enters the battlefield, if tribute wasn't paid, you may have Nessian Wilds Ravager fight another target creature. (Each deals damage equal to its power to the other.)| -Dawnbringer Charioteers|Prerelease Events|78|Special|{2}{W}{W}|Creature - Human Soldier|2|4|Flying, lifelink$Heroic — Whenever you cast a spell that targets Dawnbringer Charioteers, put a +1/+1 counter on Dawnbringer Charioteers.| +Dawnbringer Charioteers|Prerelease Events|78|Special|{2}{W}{W}|Creature - Human Soldier|2|4|Flying, lifelink$Heroic — Whenever you cast a spell that targets Dawnbringer Charioteers, put a +1/+1 counter on Dawnbringer Charioteers.| Scourge of Fleets|Prerelease Events|79|Special|{5}{U}{U}|Creature - Kraken|6|6|When Scourge of Fleets enters the battlefield, return each creature your opponents control with toughness X or less to its owner's hand, where X is the number of Islands you control.| -Doomwake Giant|Prerelease Events|80|Special|{4}{B}|Enchantment Creature - Giant|4|6|Constellation — Whenever Doomwake Giant or another enchantment enters the battlefield under your control, creatures your opponents control get -1/-1 until end of turn.| +Doomwake Giant|Prerelease Events|80|Special|{4}{B}|Enchantment Creature - Giant|4|6|Constellation — Whenever Doomwake Giant or another enchantment enters the battlefield under your control, creatures your opponents control get -1/-1 until end of turn.| Spawn of Thraxes|Prerelease Events|81|Special|{5}{R}{R}|Creature - Dragon|5|5|Flying$When Spawn of Thraxes enters the battlefield, it deals damage to target creature or player equal to the number of Mountains you control.| Heroes' Bane|Prerelease Events|82|Special|{3}{G}{G}|Creature - Hydra|0|0|Heroes' Bane enters the battlefield with four +1/+1 counters on it.${2}{G}{G}: Put X +1/+1 counters on Heroes' Bane, where X is its power.| Resolute Archangel|Prerelease Events|83|Special|{5}{W}{W}|Creature - Angel|4|4|Flying$When Resolute Archangel enters the battlefield, if your life total is less than your starting life total, it becomes equal to your starting life total.| @@ -26018,7 +26018,7 @@ Thrive|Modern Masters 2015 Edition|166|C|{X}{G}|Sorcery|||Put a +1/+1 counter on Tukatongue Thallid|Modern Masters 2015 Edition|167|C|{G}|Creature - Fungus|1|1|When Tukatongue Thallid dies, put a 1/1 green Saproling creature token onto the battlefield.| Vines of Vastwood|Modern Masters 2015 Edition|168|C|{G}|Instant|||Kicker {G} (You may pay an additional {G} as you cast this spell.)$Target creature can't be the target of spells or abilities your opponents control this turn. If Vines of Vastwood was kicked, that creature gets +4/+4 until end of turn.| Wolfbriar Elemental|Modern Masters 2015 Edition|169|R|{2}{G}{G}|Creature - Elemental|4|4|Multikicker {G} (You may pay an additional {G} any number of times as you cast this spell.)$When Wolfbriar Elemental enters the battlefield, put a 2/2 green Wolf creature token onto the battlefield for each time it was kicked.| -Fortify|Modern Masters 2015 Edition|17|C|{2}{W}|Instant|||Choose one -$• Creatures you control get +2/+0 until end of turn.$• Creatures you control get +0/+2 until end of turn.| +Fortify|Modern Masters 2015 Edition|17|C|{2}{W}|Instant|||Choose one -$• Creatures you control get +2/+0 until end of turn.$• Creatures you control get +0/+2 until end of turn.| Agony Warp|Modern Masters 2015 Edition|170|U|{U}{B}|Instant|||Target creature gets -3/-0 until end of turn.$Target creature gets -0/-3 until end of turn.| Apocalypse Hydra|Modern Masters 2015 Edition|171|R|{X}{R}{G}|Creature - Hydra|0|0|Apocalypse Hydra enters the battlefield with X +1/+1 counters on it. If X is 5 or more, it enters the battlefield with an additional X +1/+1 counters on it.${1}{R}, Remove a +1/+1 counter from Apocalypse Hydra: Apocalypse Hydra deals 1 damage to target creature or player.| Boros Swiftblade|Modern Masters 2015 Edition|172|U|{R}{W}|Creature - Human Soldier|1|2|Double strike| @@ -26127,7 +26127,7 @@ Karn Liberated|Modern Masters 2015 Edition|4|M|{7}|Planeswalker - Karn|||+4: Tar Air Servant|Modern Masters 2015 Edition|40|U|{4}{U}|Creature - Elemental|4|3|Flying${2}{U}: Tap target creature with flying.| Argent Sphinx|Modern Masters 2015 Edition|41|R|{2}{U}{U}|Creature - Sphinx|4|3|Flying$Metalcraft - {U}: Exile Argent Sphinx. Return it to the battlefield under your control at the beginning of the next end step. Activate this ability only if you control three or more artifacts.| Cloud Elemental|Modern Masters 2015 Edition|42|C|{2}{U}|Creature - Elemental|2|3|Flying$Cloud Elemental can block only creatures with flying.| -Cryptic Command|Modern Masters 2015 Edition|43|R|{1}{U}{U}{U}|Instant|||Choose two -$• Counter target spell.$• Return target permanent to its owner's hand.$• Tap all creatures your opponents control.$• Draw a card.| +Cryptic Command|Modern Masters 2015 Edition|43|R|{1}{U}{U}{U}|Instant|||Choose two -$• Counter target spell.$• Return target permanent to its owner's hand.$• Tap all creatures your opponents control.$• Draw a card.| Faerie Mechanist|Modern Masters 2015 Edition|44|C|{3}{U}|Artifact Creature - Faerie Artificer|2|2|Flying$When Faerie Mechanist enters the battlefield, look at the top three cards of your library. You may reveal an artifact card from among them and put it into your hand. Put the rest on the bottom of your library in any order.| Flashfreeze|Modern Masters 2015 Edition|45|U|{1}{U}|Instant|||Counter target red or green spell.| Guile|Modern Masters 2015 Edition|46|R|{3}{U}{U}{U}|Creature - Elemental Incarnation|6|6|Guile can't be blocked except by three or more creatures.$If a spell or ability you control would counter a spell, instead exile that spell and you may play that card without paying its mana cost.$When Guile is put into a graveyard from anywhere, shuffle it into its owner's library.| @@ -26179,7 +26179,7 @@ Nameless Inversion|Modern Masters 2015 Edition|87|C|{1}{B}|Tribal Instant - Shap Necroskitter|Modern Masters 2015 Edition|88|R|{1}{B}{B}|Creature - Elemental|1|4|Wither (This deals damage to creatures in the form of -1/-1 counters.)$Whenever a creature an opponent controls with a -1/-1 counter on it dies, you may return that card to the battlefield under your control.| Plagued Rusalka|Modern Masters 2015 Edition|89|C|{B}|Creature - Spirit|1|1|{B}, Sacrifice a creature: Target creature gets -1/-1 until end of turn.| Arrest|Modern Masters 2015 Edition|9|C|{2}{W}|Enchantment - Aura|||Enchant creature$Enchanted creature can't attack or block, and its activated abilities can't be activated.| -Profane Command|Modern Masters 2015 Edition|90|R|{X}{B}{B}|Sorcery|||Choose two -$• Target player loses X life.$• Return target creature card with converted mana cost X or less from your graveyard to the battlefield.$• Target creature gets -X/-X until end of turn.$• Up to X target creatures gain fear until end of turn. (They can't be blocked except by artifact creatures and/or black creatures.)| +Profane Command|Modern Masters 2015 Edition|90|R|{X}{B}{B}|Sorcery|||Choose two -$• Target player loses X life.$• Return target creature card with converted mana cost X or less from your graveyard to the battlefield.$• Target creature gets -X/-X until end of turn.$• Up to X target creatures gain fear until end of turn. (They can't be blocked except by artifact creatures and/or black creatures.)| Puppeteer Clique|Modern Masters 2015 Edition|91|R|{3}{B}{B}|Creature - Faerie Wizard|3|2|Flying$When Puppeteer Clique enters the battlefield, put target creature card from an opponent's graveyard onto the battlefield under your control. It gains haste. At the beginning of your next end step, exile it.$Persist (When this creature dies, if it had no -1/-1 counters on it, return it to the battlefield under its owner's control with a -1/-1 counter on it.)| Reassembling Skeleton|Modern Masters 2015 Edition|92|U|{1}{B}|Creature - Skeleton Warrior|1|1|{1}{B}: Return Reassembling Skeleton from your graveyard to the battlefield tapped.| Scavenger Drake|Modern Masters 2015 Edition|93|U|{3}{B}|Creature - Drake|1|1|Flying$Whenever another creature dies, you may put a +1/+1 counter on Scavenger Drake.| @@ -26189,8 +26189,78 @@ Sickle Ripper|Modern Masters 2015 Edition|96|C|{1}{B}|Creature - Elemental Warri Sign in Blood|Modern Masters 2015 Edition|97|C|{B}{B}|Sorcery|||Target player draws two cards and loses 2 life.| Spread the Sickness|Modern Masters 2015 Edition|98|U|{4}{B}|Sorcery|||Destroy target creature, then proliferate. (You choose any number of permanents and/or players with counters on them, then give each another counter of a kind already there.)| Surgical Extraction|Modern Masters 2015 Edition|99|R|{BP}|Instant|||({BP} can be paid with either {B} or 2 life.)$Choose target card in a graveyard other than a basic land card. Search its owner's graveyard, hand, and library for any number of cards with the same name as that card and exile them. Then that player shuffles his or her library.| -Liliana, Heretical Healer|Magic Origins|106|M|{1}{B}{B}|Legendary Creature - Human Cleric|2|3|Lifelink$Whenever another nontoken creature you control dies, exile Liliana, Heretical Healer, then return her to the battlefield transformed under her owner's control. If you do, put a 2/2 black Zombie creature token onto the battlefield.| -Liliana, Defiant Necromancer|Magic Origins|106|M||Planeswalker - Liliana|||+2: Each player discards a card.$-X: Return target nonlegendary creature card with converted mana cost X from your graveyard to the battlefield.$-8: You get an emble with "Whenever a creature dies, return it to the battlefield under your control at the beginning of the next end step."| +Charging Griffin|Magic Origins|?|C|{3}{W}{3}{W}|Creature - Griffin|2|22|2|Flying$Whenever Charging Griffin attacks, it gets +1/+1 until end of turn.$Flying$Whenever Charging Griffin attacks, it gets +1/+1 until end of turn.| +Mighty Leap|Magic Origins|?|C|{1}{W}{1}{W}|Instant|||Target creature gets +2/+2 and gains flying until end of turn.$Target creature gets +2/+2 and gains flying until end of turn.| +Yoked Ox|Magic Origins|?|C|{W}{W}|Creature - Ox|0|40|4|| +Akroan Jailer|Magic Origins|1|C|{W}|Creature - Human Soldier|1|1|{2}{W}, {T}: Tap target creature.| +Grasp of the Hieromancer|Magic Origins|15|C|{1}{W}|Enchantment - Aura|||Enchant creature$Enchanted creature gets +1/+1 and has "Whenever this creature attacks, tap target creature defending player controls."| +Heavy Infantry|Magic Origins|18|C|{4}{W}|Creature - Human Soldier|3|4|When Heavy Infantry enters the battlefield, tap target creature an opponent controls.| +Hixus, Prison Warden|Magic Origins|19|R|{3}{W}{W}{3}{W}{W}|Legendary Creature - Human Soldier|4|44|4|Flash$Whenever a creature deals combat damage to you, if Hixus, Prison Warden entered the battlefield this turn, exile that creature until Hixus leaves the battlefield.$Flash$Whenever a creature deals combat damage to you, if Hixus, Prison Warden entered the battlefield this turn, exile that creature until Hixus leaves the battlefield.| +Sentinel of the Eternal Watch|Magic Origins|30|U|{5}{W}|Creature - Giant Soldier|4|6|Vigilance (Attacking doesn't cause this creature to tap.)$At the beginning of combat on each opponent's turn, tap target creature that player controls.| +Valor in Akros|Magic Origins|39|U|{3}{W}|Enchantment|||Whenever a creature enters the battlefield under your control, creatures you control get +1/+1 until end of turn.| +Aegis Angel|Magic Origins|273|R|{4}{W}{W}{4}{W}{W}|Creature - Angel|5|55|5|Flying$When Aegis Angel enters the battlefield, another target permanent gains indestructible for as long as you control Aegis Angel.$Flying$When Aegis Angel enters the battlefield, another target permanent gains indestructible for as long as you control Aegis Angel.| +Divine Verdict|Magic Origins|274|C|{3}{W}{3}{W}|Instant|||Destroy target attacking or blocking creature.$Destroy target attacking or blocking creature.| +Eagle of the Watch|Magic Origins|275|C|{2}{W}|Creature - Bird|2|1|Flying, vigilance| +Serra Angel|Magic Origins|276|U|{3}{W}{W}{3}{W}{W}|Creature - Angel|4|44|4|Flying$Vigilance$Flying$Vigilance| +Claustrophobia|Magic Origins|?|C|{1}{U}{U}{1}{U}{U}|Enchantment - Aura|||$Enchant creature$When Claustrophobia enters the battlefield, tap enchanted creature.$Enchanted creature doesn't untap during its controller's untap step.$Enchant creature$When Claustrophobia enters the battlefield, tap enchanted creature.$Enchanted creature doesn't untap during its controller's untap step.| +Disperse|Magic Origins|?|C|{1}{U}{1}{U}|Instant|||Return target nonland permanent to its owner's hand.$Return target nonland permanent to its owner's hand.| +Maritime Guard|Magic Origins|?|C|{1}{U}{1}{U}|Creature - Merfolk Soldier|1|31|3|| +Scrapskin Drake|Magic Origins|?|C|{2}{U}{2}{U}|Creature - Zombie Drake|2|32|3|Flying$Scrapskin Drake can block only creatures with flying.$Flying$Scrapskin Drake can block only creatures with flying.| +Tower Geist|Magic Origins|?|U|{3}{U}{3}{U}|Creature - Spirit|2|22|2|Flying$When Tower Geist enters the battlefield, look at the top two cards of your library. Put one of them into your hand and the other into your graveyard.$Flying$When Tower Geist enters the battlefield, look at the top two cards of your library. Put one of them into your hand and the other into your graveyard.| +Hydrolash|Magic Origins|59|U|{2}{U}|Instant|||Attacking creatures get -2/-0 until end of turn.$Draw a card.| +Jhessian Thief|Magic Origins|62|U|{2}{U}|Creature - Human Rogue|1|3|Prowess (Whenever you cast a noncreature spell, this creature gets +1/+1 until end of turn.)$Whenever Jhessian Thief deals combat damage to a player, draw a card.| +Ringwarden Owl|Magic Origins|068|C|{3}{U}{U}|Creature - Bird|3|3|Flying (This creature can't be blocked except by creatures with flying or reach.)$Prowess (Whenever you cast a noncreature spell, this creature gets +1/+1 until end of turn.)| +Separatist Voidmage|Magic Origins|72|C|{3}{U}|Creature - Human Wizard|2|2|When Separatist Voidmage enters the battlefield, you may return target creature to its owner's hand.| +Into the Void|Magic Origins|277|U|{3}{U}{3}{U}|Sorcery|||Return up to two target creatures to their owners' hands.$Return up to two target creatures to their owners' hands.| +Mahamoti Djinn|Magic Origins|278|R|{4}{U}{U}{4}{U}{U}|Creature - Djinn|5|65|6|Flying$Flying| +Weave Fate|Magic Origins|279|C|{3}{U}{3}{U}|Instant|||Draw two cards.$Draw two cards.| +Catacomb Slug|Magic Origins|?|C|{4}{B}{4}{B}|Creature - Slug|2|62|6|| +Cruel Revival|Magic Origins|?|C|{4}{B}{4}{B}|Instant|||Destroy target non-Zombie creature. It can't be regenerated. Return up to one target Zombie card from your graveyard to your hand.$Destroy target non-Zombie creature. It can't be regenerated. Return up to one target Zombie card from your graveyard to your hand.| +Weight of the Underworld|Magic Origins|?|C|{3}{B}{3}{B}|Enchantment - Aura|||Enchant creature$Enchanted creature gets -3/-2.$Enchant creature$Enchanted creature gets -3/-2.| +Deadbridge Shaman|Magic Origins|91|C|{2}{B}|Creature - Elf Shaman|3|1|When Deadbridge Shaman dies, target opponent discards a card.| +Eyeblight Assassin|Magic Origins|95|C|{2}{B}|Creature - Elf Assassin|2|2|When Eyeblight Assassin enters the battlefield, target creature an opponent controls gets -1/-1 until end of turn.| +Liliana, Defiant Necromancer|Magic Origins|106|M||Planeswalker - Liliana|3|+2: Each player discards a card.$-X: Return target nonlegendary creature with converted mana cost X from your graveyard to the battlefield.$-8: You get an emblem with "Whenever a creature you control dies, return it to the battlefield under your control at the beginning of the next end step."| +Liliana, Heretical Healer|Magic Origins|106|M|{1}{B}{B}|Legendary Creature - Human Cleric|2|3|Lifelink$Whenever another nontoken creature you control dies, exile Liliana Heretical Healer, then return her to the battlefield transformed under her owner's control. If you do, put a 2/2 black Zombie creature token onto the battlefield.| +Malakir Cullblade|Magic Origins|108|U|{1}{B}|Creature - Vampire Warrior|1|1|Whenever a creature an opponent controls dies, put a +1/+1 counter on Malakir Cullblade.| +Rabid Bloodsucker|Magic Origins|113|C|{4}{B}|Creature - Vampire|3|2|Flying$When Rabid Bloodsucker enters the battlefield, each player loses 2 life.| +Reave Soul|Magic Origins|115|C|{1}{B}|Sorcery|||Destroy target creature with power 3 or less.| +Shambling Ghoul|Magic Origins|119|C|{1}{B}|Creature - Zombie|2|3|Shambling Ghoul enters the battlefield tapped.| +Flesh to Dust|Magic Origins|280|C|{3}{B}{B}{3}{B}{B}|Instant|||Destroy target creature. It can't be regenerated.$Destroy target creature. It can't be regenerated.| +Mind Rot|Magic Origins|281|C|{2}{B}{2}{B}|Sorcery|||Target player discards two cards.$Target player discards two cards.| +Nightmare|Magic Origins|282|R|{5}{B}{5}{B}|Creature - Nightmare Horse|0|00|0|Flying$Nightmare's power and toughness are each equal to the number of Swamps you control.$Flying$Nightmare's power and toughness are each equal to the number of Swamps you control.| +Sengir Vampire|Magic Origins|283|U|{3}{B}{B}{3}{B}{B}|Creature - Vampire|4|44|4|Flying$Whenever a creature dealt damage by Sengir Vampire this turn dies, put a +1/+1 counter on Sengir Vampire.$Flying$Whenever a creature dealt damage by Sengir Vampire this turn dies, put a +1/+1 counter on Sengir Vampire.| +Act of Treason|Magic Origins|?|C|{2}{R}{2}{R}|Sorcery|||Gain control of target creature until end of turn. Untap that creature. It gains haste until end of turn.$Gain control of target creature until end of turn. Untap that creature. It gains haste until end of turn.| +Chandra's Fury|Magic Origins|?|C|{4}{R}{4}{R}|Instant|||Chandra's Fury deals 4 damage to target player and 1 damage to each creature that player controls.$Chandra's Fury deals 4 damage to target player and 1 damage to each creature that player controls.| +Cobblebrute|Magic Origins|?|C|{3}{R}{3}{R}|Creature - Elemental|5|25|2|| +Fiery Conclusion|Magic Origins|?|C|{1}{R}{1}{R}|Instant|||As an additional cost to cast Fiery Conclusion, sacrifice a creature.$Fiery Conclusion deals 5 damage to target creature.$As an additional cost to cast Fiery Conclusion, sacrifice a creature.$Fiery Conclusion deals 5 damage to target creature.| +Titan's Strength|Magic Origins|?|C|{R}{R}|Instant|||Target creature gets +3/+1 until end of turn. Scry 1.$Target creature gets +3/+1 until end of turn. Scry 1.| +Avaricious Dragon|Magic Origins|131|M|{2}{R}{R}|Creature - Dragon|4|4|Flying$At the beginning of your draw step, draw an additional card.$At the beginning of your end step, discard your hand.| +Bellows Lizard|Magic Origins|132|C|{R}{R}|Creature - Lizard|1|11|1|{1}{R}: Bellows Lizard gets +1/+0 until end of turn.${1}{R}: Bellows Lizard gets +1/+0 until end of turn.| +Boggart Brute|Magic Origins|133|C|{2}{R}|Creature - Goblin Warrior|3|2|Menace (This creature can't be blocked except by two or more creatures.)| +Enthralling Victor|Magic Origins|142|U|{3}{R}|Creature - Human Warrior|3|2|When Enthralling Victor enters the battlefield, gain control of target creature an opponent controls with power 2 or less until end of turn. Untap that creature. It gains haste until end of turn.| +Lightning Javelin|Magic Origins|153|C|{3}{R}|Sorcery|||Lightning Javelin deals 3 damage to target creature or player. Scry 1.| +Seismic Elemental|Magic Origins|161|U|{3}{R}{R}|Creature - Elemental|4|4|When Seismic Elemental enters the battlefield, creatures without flying can't block this turn.| +Subterranean Scout|Magic Origins|164|C|{1}{R}|Creature - Goblin Scout|2|1|When Subterranean Scout enters the battlefield, target creature with power 2 or less can't be blocked this turn.| +Volcanic Rambler|Magic Origins|167|C|{5}{R}|Creature - Elemental|6|4|{2}{R}: Volcanic Rambler deals 1 damage to target player.| +Fiery Hellhound|Magic Origins|284|C|{1}{R}{R}{1}{R}{R}|Creature - Elemental Hound|2|22|2|{R}: Fiery Hellhound gets +1/+0 until end of turn.${R}: Fiery Hellhound gets +1/+0 until end of turn.| +Shivan Dragon|Magic Origins|285|R|{4}{R}{R}{4}{R}{R}|Creature - Dragon|5|55|5|Flying${R}: Shivan Dragon gets +1/+0 until end of turn.$Flying${R}: Shivan Dragon gets +1/+0 until end of turn.| +Elvish Visionary|Magic Origins|?|C|{1}{G}{1}{G}|Creature - Elf Shaman|1|11|1|When Elvish Visionary enters the battlefield, draw a card.$When Elvish Visionary enters the battlefield, draw a card.| +Leaf Gilder|Magic Origins|?|C|{1}{G}{1}{G}|Creature - Elf Druid|2|12|1|{T}: Add {G} to your mana pool.${T}: Add {G} to your mana pool.| +Titanic Growth|Magic Origins|?|C|{1}{G}{1}{G}|Instant|||Target creature gets +4/+4 until end of turn.$Target creature gets +4/+4 until end of turn.| +Vastwood Gorger|Magic Origins|?|C|{5}{G}{5}{G}|Creature - Wurm|5|65|6|| +Yeva's Forcemage|Magic Origins|?|C|{2}{G}{2}{G}|Creature - Elf Shaman|2|22|2|When Yeva's Forcemage enters the battlefield, target creature gets +2/+2 until end of turn.$When Yeva's Forcemage enters the battlefield, target creature gets +2/+2 until end of turn.| +Conclave Naturalists|Magic Origins|171|U|{4}{G}|Creature - Dryad|4|4|When Conclave Naturalists enters the battlefield, you may destroy target artifact or enchantment.| +Hitchclaw Recluse|Magic Origins|181|C|{2}{G}|Creature - Spider|1|4|Reach| +Joraga Invocation|Magic Origins|183|U|{4}{G}{G}|Sorcery|||Each creature you control gets +3/+3 until end of turn and must be blocked this turn if able.| +Mantle of Webs|Magic Origins|187|C|{1}{G}|Enchantment - Aura|||Enchant Creature$Enchanted creature gets +1/+3 and has reach.| +Plummet|Magic Origins|286|C|{1}{G}{1}{G}|Instant|||Destroy target creature with flying.$Destroy target creature with flying.| +Prized Unicorn|Magic Origins|287|U|{3}{G}{3}{G}|Creature - Unicorn|2|22|2|All creatures able to block Prized Unicorn do so.$All creatures able to block Prized Unicorn do so.| +Terra Stomper|Magic Origins|288|R|{3}{G}{G}{G}{3}{G}{G}{G}|Creature - Beast|8|88|8|Terra Stomper can't be countered.$Trample$Terra Stomper can't be countered.$Trample| +Meteorite|Magic Origins|?|U|{5}{5}|Artifact|||When Meteorite enters the battlefield, it deals 2 damage to target creature or player.${T}: Add one mana of any color to your mana pool.$When Meteorite enters the battlefield, it deals 2 damage to target creature or player.${T}: Add one mana of any color to your mana pool.| +Gold-Forged Sentinel|Magic Origins|?|U|{6}{6}|Artifact Creature - Chimera|4|44|4|Flying$Flying| +Runed Servitor|Magic Origins|?|U|{2}{2}|Artifact Creature - Construct|2|22|2|When Runed Servitor dies, each player draws a card.$When Runed Servitor dies, each player draws a card.| +Jayemdae Tome|Magic Origins|?|U|{4}{4}|Artifact|||{4}, {T}: Draw a card.${4}, {T}: Draw a card.| +Veteran's Sidearm|Magic Origins|242|C|{2}|Artifact - Equipment|||Equipped creature gets +1/+1.$Equip {1}| Ambush Commander|Duel Decks: Anthology, Elves vs. Goblins|1|R|{3}{G}{G}|Creature - Elf|2|2|Forests you control are 1/1 green Elf creatures that are still lands.${1}{G}, Sacrifice an Elf: Target creature gets +3/+3 until end of turn.| Lys Alana Huntmaster|Duel Decks: Anthology, Elves vs. Goblins|10|C|{2}{G}{G}|Creature - Elf Warrior|3|3|Whenever you cast an Elf spell, you may put a 1/1 green Elf Warrior creature token onto the battlefield.| Stonewood Invoker|Duel Decks: Anthology, Elves vs. Goblins|11|C|{1}{G}|Creature - Elf Mutant|2|2|{7}{G}: Stonewood Invoker gets +5/+5 until end of turn.| @@ -26486,7 +26556,7 @@ Surrakar Banisher|Duel Decks: Elspeth vs. Kiora|43|C|{4}{U}|Creature - Surrakar| Whelming Wave|Duel Decks: Elspeth vs. Kiora|44|R|{2}{U}{U}|Sorcery|||Return all creatures to their owners' hands except for Krakens, Leviathans, Octopuses, and Serpents.| Explore|Duel Decks: Elspeth vs. Kiora|45|C|{1}{G}|Sorcery|||You may play an additional land this turn.$Draw a card.| Explosive Vegetation|Duel Decks: Elspeth vs. Kiora|46|U|{3}{G}|Sorcery|||Search your library for up to two basic land cards and put them onto the battlefield tapped. Then shuffle your library.| -Grazing Gladehart|Duel Decks: Elspeth vs. Kiora|47|C|{2}{G}|Creature - Antelope|2|2|Landfall — Whenever a land enters the battlefield under your control, you may gain 2 life.| +Grazing Gladehart|Duel Decks: Elspeth vs. Kiora|47|C|{2}{G}|Creature - Antelope|2|2|Landfall — Whenever a land enters the battlefield under your control, you may gain 2 life.| Nessian Asp|Duel Decks: Elspeth vs. Kiora|48|C|{4}{G}|Creature - Snake|4|5|Reach${6}{G}: Monstrosity 4. (If this creature isn't monstrous, put four +1/+1 counters on it and it becomes monstrous.)| Netcaster Spider|Duel Decks: Elspeth vs. Kiora|49|C|{2}{G}|Creature - Spider|2|3|Reach (This creature can block creatures with flying.)$Whenever Netcaster Spider blocks a creature with flying, Netcaster Spider gets +2/+0 until end of turn.| Time to Feed|Duel Decks: Elspeth vs. Kiora|50|C|{2}{G}|Sorcery|||Choose target creature an opponent controls. When that creature dies this turn, you gain 3 life. Target creature you control fights that creature. (Each deals damage equal to its power to the other.)| @@ -26557,7 +26627,7 @@ Day of Judgment|Magic Player Rewards|49|Special|{2}{W}{W}|Sorcery|||Destroy all Brave the Elements|Magic Player Rewards|50|Special|{W}|Instant|||Choose a color. White creatures you control gain protection from the chosen color until end of turn.| Doom Blade|Magic Player Rewards|51|Special|{1}{B}|Instant|||Destroy target nonblack creature.| Treasure Hunt|Magic Player Rewards|52|Special|{1}{U}|Sorcery|||Reveal cards from the top of your library until you reveal a nonland card, then put all cards revealed this way into your hand.| -Searing Blaze|Magic Player Rewards|53|Special|{R}{R}|Instant|||Searing Blaze deals 1 damage to target player and 1 damage to target creature that player controls.$Landfall — If you had a land enter the battlefield under your control this turn, Searing Blaze deals 3 damage to that player and 3 damage to that creature instead.| +Searing Blaze|Magic Player Rewards|53|Special|{R}{R}|Instant|||Searing Blaze deals 1 damage to target player and 1 damage to target creature that player controls.$Landfall — If you had a land enter the battlefield under your control this turn, Searing Blaze deals 3 damage to that player and 3 damage to that creature instead.| Angelic Blessing|Tempest Remastered|1|C|{2}{W}|Sorcery|||Target creature gets +3/+3 and gains flying until end of turn.| Angelic Protector|Tempest Remastered|2|U|{3}{W}|Creature - Angel|2|2|Flying$Whenever Angelic Protector becomes the target of a spell or ability, Angelic Protector gets +0/+3 until end of turn.| Anoint|Tempest Remastered|3|C|{W}|Instant|||Buyback {3} (You may pay an additional {3} as you cast this spell. If you do, put this card into your hand as it resolves.)$Prevent the next 3 damage that would be dealt to target creature this turn.| diff --git a/Utils/release/getting_implemented_cards.txt b/Utils/release/getting_implemented_cards.txt index 6ef99fa38e8..203bc260828 100644 --- a/Utils/release/getting_implemented_cards.txt +++ b/Utils/release/getting_implemented_cards.txt @@ -131,6 +131,12 @@ git log e8b2e01cd465f6a8ced2c83ec52a698ee093baa4..HEAD --diff-filter=A --name-st since 1.4.0.v2 git log eb96b08dfac3de4f78403d6f23e41ce8d41ece6f..HEAD --diff-filter=A --name-status | sed -ne "s/^A[^u]Mage.Sets\/src\/mage\/sets\///p" | sort > added_cards.txt +since 1.4.1.v0 +git log 7a54d5364c9789ce2c3ef2c3eb4df7e0e0cde0cf..HEAD --diff-filter=A --name-status | sed -ne "s/^A[^u]Mage.Sets\/src\/mage\/sets\///p" | sort > added_cards.txt + +since 1.4.1.v1 +git log 3e9b4cfb7c22d363755d28f5ff1de351f6b7123c..HEAD --diff-filter=A --name-status | sed -ne "s/^A[^u]Mage.Sets\/src\/mage\/sets\///p" | sort > added_cards.txt + 3. Copy added_cards.txt to trunk\Utils folder 4. Run script: > perl extract_in_wiki_format.perl diff --git a/pom.xml b/pom.xml index c0468ace043..3eb73e58206 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ org.mage mage-root - 1.4.0 + 1.4.1 pom Mage Root Mage Root POM @@ -83,7 +83,7 @@ - 1.4.0 + 1.4.1 UTF-8