renamed isNeedToNextPhase => !mayPlayerHavePriority (would let understand the code better)
@inputControl: setInputInterrupt and setInput add to resolveStack and common Stack
@inputControl: updateInput => getActualInput
Inlined some static methods called from phaseHandler
PhaseType: index is not a field, yet the order is set by a list initialized statically
GetLabelForPhase - moved to VField from PhaseUtil
Game has a method to determine the next player who takes turn/priority after the given one.
- Up to 8 fields can be used
- Up to 4 hands can be used
- Multiplayer submenu added in home screen
Please delete your old match_preferred.xml layout; old match layouts are invalid.
*Added "AnyChosenColor","AllChosenColor" properties.
*Added TwoColors parameter to AF_ChooseColor.
*Added AILogic "MostProminentDualInComputerDeck" to AF_ChooseColor
*Fixed Stack cards getting added twice/thrice to list from Player.getAllCards().
*Added method to GuiChoose that lets you limit min/max options to choose.
change of card build pipeline, (getCard returned the same instance, so they return void now)
CardList: further removal of special methods
NameChanger: the change routine never needed the complicated generator.
Removed T... syntax from GuiUtils chooseNNN functions (cause one might be called with cardlist parameter as a single choice option)
Rmeoved SpellAbilityList.java - noone used it, and no special code in that class seen.
- Stacked "CARDNAME can block an additional creature" keywords will only display 1 description with the number of additional creatures it can block (eg CARDNAME can block an additional 3 creatures.)
*Allowed multiple ETBReplacements
*Removed a bunch of debug output
*Added "ETB" parameter to AF_Tap, letting it tap stuff no matter where it is if it certifies that it's an etb replacement.
*Fixed Remote Farm
*Added ActiveZones parameter to replacement effects to let replacement effects function wherever.
*Converted clones to ETBReplacement
*Added Essence of the Wild
*CardCharacteristics now copy ReplacementEffects
*ReplacementEffects now copy alot more stuff.
*Divvied up Replacement Effect running into layers
*Moved stuff common between Trigger and ReplacementEffect to TriggerReplacementBase
*Let AF_Tap tap cards on the stack in order to work with ETBReplacement.
*Converted Remote Farm to ETBReplacement.
- Cleaned up Divine Reckoning
- Added an optional parameter "ChoiceTitle" to ChooseCard to allow more descriptive title prompts for the choice dialogue box.
Added SVar:Targeting:Dies to relevant creatures.
Added SVar to Clone and Phantasmal Image so AI will not cast these spells when there are no creatures to copy.
Removed Add/Remove 4-of.
Relabeled As Buy/Sell.
Added credits counter.
Added Max Selling Percentage and Price.
Fixed labels and buttons to return to normal for regular deck editor.
- Added to AbilityFactoryEffect: EffectOwner, Duration$UntilHostLeavesPlay, and RememberEffect.
- Added exception to Card.java so that Effect cards can be counted when remembered
- Simplified Tree of Redemption's script logistics
Note: We should probably remove the references to RememberToughness, I didn't get a chance to track those down.
Note: Need a mechanism to choose the card to copy in GameAction.changeZone (actual problem is - the function won't await user's input - it wants to return right then). That would make Clones ETB correctly from any location.
- Added the ability to remember and recall integer values. This is needed for cards like Tree of Redemption where the referenced value might change. It currently only supports RememberToughness, but it can be referenced easily for other values. To recall the value, use SVar:X:Number$RememberedValue.
- DamageAll can now set the damage source with DamageSource param
- EachDamage now handles Remembered defined cards
- DamageAll and EachDamage support StackDescription param now
xCount now supports EquippedCardManaCost.
Added the code block to support "SetAsKicked" to mark nonPermanent kicked spells from the script line. Will start converting soon.
Added Crown of Awe
Added Crown of Fury
Added Crown of Suspicion
Added Crown of Vigor
isValid supports "sharesColorWith Enchanted" where Enchanted is same as the defined type so will find an aura sacrificed as a cost.
Added "CARDNAME can't be equipped." keyword and corrected some "CARDNAME can't be enchanted." implementation. They cards can now be targeted human, although attachment will fail with a relevant log message.
Small change to ChooseNumber to make Min/Max read SVars.
Small change to ChooseNumber to allow different titles for the list block to expand its uses slightly.
Changed title of choice list for Ashling's Prerogative
new prefix for sealed magic product images (to store them in a different folder)
removed CardList.allAll(Array) and matching ctor, added addAll(Iterable<Card>) - in most cases of usage list was converted to array and while added to cardlist it was added to underlying list again.
Predicates for edition's legality in formats moved to CardEdition, so that global references in FormatUtils were eliminated
FileSection now trims its tree keys too, editions are parsed by FileSection class
One can read values from KeyValue lines via FileSection class (it parses by itself and provides a default value for bad parses)
CustomLimited is more related to limited games and its moved to game.limited package
*Added AICheckSVar hints to Obstinate Familiar.
*Added the ability to get at Replaced-variables the same way as triggered-variables.
*Let ReplacementEffects be secondary (same as for triggers).
Easy accessors added FView and FControl to various components throughout UI.
Mishmash of methods in "Display" interface attached as appropriate to singletons.
AllZone updated to remove display and one or two others in favor of singletons, for future deprecation.
Some renaming for consistency.
Skins folder moved out of "images", which will be deprecated soon.
FControl refactored to reuse single instance of each UI state.
FPanels now support background textures and foreground images.
FPanels now have a stretch foreground image option.
FPanels now have optional hover and select behavior.
Slight performance improvement over previous FPanel versions (paintComponent trimmed down).
Made some small fixes to the rebel skin's sprite that might have caused mana symbol problems.
Replaced the low resolution card state icons in the default sprite_icons with higher res ones.
Skin enums sub-categorized to allow clearer access.
Default coordinates added to skin enums, so declaration and positioning happen simultaneously (in one place).
Removed old icons.
*Corrected cards that replace damage dealt with the same damage in a different amount. (Fixes Divine Presence + Sword of X and Y)
Akki Lavarunner // Tok-Tok Volcano Born
Curse of Bloodletting
Divine Presence
Furnace of Rath
Gratuitous Violence
Lashknife Barrier
1) preserve original card picture on battlefield
2) verified basic auras behave as expected when changeing creatures
3) little fix in stack description (was printing "null")
Thread safety issues addressed for all Start buttons.
Further optimizations made to listeners and architecture in constructed, sealed, draft, and quest.
*Added "Moved" as a replacable event. Will look further towards replacing the "exile instead of graveyard" type keywords.
*All this to add to the DKA branch:that horrible horrible card, Grafdigger's Cage.
- All symbols now included in sprite (but not accessible yet)
- Default symbols will load if preferred skin does not have that symbol
- Phase color swatch added (also not accessed yet)
- All skins updated to reflect this
Moved keyboard shortcut setting UI into home screen.
Implemented on-the-fly detach/reattach for modified shortcuts.
Put shortcuts into a top-level scope, not only for match UI.
header_text=/*\n * Forge\: Play Magic\: the Gathering.\n * Copyright (C) 2011 Nate\n *\n * This program is free software\: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n * \n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n * \n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http\://www.gnu.org/licenses/>.\n */
header_text=/*\n * Forge\: Play Magic\: the Gathering.\n * Copyright (C) 2011 Forge Team\n *\n * This program is free software\: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n * \n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n * \n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http\://www.gnu.org/licenses/>.\n */
(Quest icons used created by Teekatas, from his Legendora set http://raindropmemory.deviantart.com)
(Quest icons used created by Teekatas, from his Legendora set http://raindropmemory.deviantart.com)
9919 cards in total.
11492 cards in total.
A new branch was created for supporting "Produced$ Any" in mana abilities (Issue 266). Some other bugs/problems with paying mana costs were uncovered and fixed. This work was recently merged into the main trunk.
Some large scale changes are being made to the code at this time and this portion of the project is not yet finished. The Forge snapshot builds should be considered unstable. Most people will want to play the last beta rather then help test the new snapshot builds for the next seveal weeks.
A new Scriptable Replacement Effects system has been recently added to the SVN. The structure is very similar to Triggers (So there's currently a little code duplication), there is a Handler class, a base class for Replacement effects and subclasses for each event that can be replaced.
--
The new damage dialog now uses the new UI.
Several people have noticed a crash report stating that "Buffers have not been created". We hope to have this fixed in the near future. It has been pointed out that:
We have decided to increase the version number to 1.3 as there were some substantial changes and improvements made in recent weeks. In the recent past we had some improvements made to the draft, sealed deck and quest modes.
"Parts of Swing use EventQueue by themselves, this means your Swing code executes in main thread part executes in EDT and as Swing isn't thread safe this leads to elusive errors like this. One of the reasons of this error is that the frame might not be fully constructed before buffers are created -> race condition between the threads."
This version includes quest mode sets unlocks, an 'enforced format quest', and custom formats. A new Gauntlet mode has been added. A new multiplayer mode has also been added. You should be able to play against multiple AI opponents at this time. You should note that the current Archenemy mode does not use Schemes at this time.
Several people have noticed forge slowing down after playing a number of matches without quitting forge in between the matches that are played. The new UI may be involved somehow. We also hope to have this figured out and fixed in the near future. Please be patient in the meanwhile. A recent fix was implemented that should improve the slowdown problem somewhat.
A lot of things are planned for this new multiplayer mode and it will take time to finish. Please enjoy what we have at this time and be patient. :)
A lot of time and effort have gone into fixing the memory leak problems that were recently noticed and reported to the dev team. Doublestrike and Slapshot deserve our applause and we are very thankful. People should be able to now play long multi match sessions without noticing slow downs and pauses.
Since Multiplayer is so new, not all cards will be 100% compatible right away as we expand scripting to handle multiple players.
The older match layout files are incompatible with the new multiplayer mode. The original match_default.xml, match_preferred.xml and the match_preferred.xml saved to a different name files have to go and can no longer be used. You can keep your editor_preferred.xml file. But you will have to setup your match view panels using the new match_default.xml file.
The Forge archive includes a readme.txt file and we ask that you spend a few minutes reading this file as it contains some information that may prove usefull. We do tend to update this file at times and you should quickly read this file and look for new information for each and every new release. Thank you.
Some people reported that the new targeting arcs are not being redrawn when the target moves to another area. This is a work in progress and we hope to fix it at some point in the future. If this happens, you should try turning the targeting arcs to off and then back on again.
We have changed the archival format used for the Forge distributions from ".zip" to ".tar.bz2". There are utilities for Windows, Mac OS and the various *nix's that can be usedto decompress these ".tar.bz2" archives. We recommend that you decompress the Forge archive into a new and unused folder.
Several people have asked if it is still possible to resize (change the width) of the columns in the deck editors. In version 1.2.15 the mouse cursor would not change. This has been fixed in later versions.
--
On several occasions people have noticed that the forge deck editor and/or quest mode card shop would not open or display. We have also received reports that some of the tabs/panels in the deck editor are missing. Try deleting the file named "editor_preferred.xml" which is found in the "res/layouts" folder. This should force forge to then use the "editor_default.xml" file instead.
Several people have noticed that the cards displayed on the battlefield will fail to be displayed when the number of cards on the battlefield increases. Maximizing the human panel can help to re-display the cards.
Some time was spent turning the static ETB triggers into the proper ETB replacement effects they should be, mainly to interact correctly with eachother. This work is not yet finished. As a result there is currently some inconsistencies with "Enters the battlefield with counters" (Not incredibly noticeable).
It seems like the front face of double faced cards aren't triggering properly, but the back face and single faced cards are.
A recent contribution to the code base should fix some of the bugs that people noticed with cloning type abilities. At this time there are two remaining issues that we hope will be addressed in the near future.
1. Leave play triggers don't work correct for clones.
2. Copies of cards that setup Zone Change triggers via addComesIntoPlayCommand and addLeavesPlayCommand will not function correctly.
We are now using a different system for our snapshot and beta releases. Unfortunately, this new system builds a jar file which does not accurately display the SVN revision number.
Forge may not be fully java 7 compatible at this time. We recommend that people downgrade to java 6.
--
The Forge archive includes a readme.txt file and we ask that you spend a few minutes reading this file as it contains some information that may prove useful. We do tend to update this file at times and you should quickly read this file and look for new information for each and every new release. Thank you.
The archive format used for the Forge distribution is ".tar.bz2". There are utilities for Windows, Mac OS and the various *nix's that can be used to extract/decompress these ".tar.bz2" archives. We recommend that you extract/decompress the Forge archive into a new and unused folder.
Some people use the Windows application 7zip. This utility can be found at http://www.7-zip.org/download.html. Mac users can double click on the archive and the application Archive Utility will launch and extract the archive. Mac users do not need to download a separate utility.
Fixes/Features:
Fixes/Features:
- Cleared out the changes.txt file, is ready for new material.
- Added keyboard shortcuts for Alpha Strike and Targeting Overlay
- A few CheckStyle fixes.
- Added experimental 'limited Quest mode'. If selected, it will impose format-based restrictions on the available cards during the game. Current exceptions: theme decks in spell stores (deliberate). enemy decks (more in-format enemy decks would be needed first).
- Issue 266: Creating branch for changes for supporting "Produced$ Any" in mana abilities
- Divided by 0 check for DivideEvenly.
- Issue 266: added to manamorphose to produce any mana branch
- Re-added the code for Guild Feud.
- Issue 266: update isBasic method of AbilityMana to account for any mana
- Fixed Tablet of the Guilds.
- Renamed the Ore Gorger card txt file as it had an unneeded space character.
- newGame routine
- Issue 266: significantly reworked logic in payManaCost to account for mana sources that produce any color and several other bugs
- eliminating global references to getXXXXplayer
- Issue 266: modified City of Brass, Glimmervoid, and Mox Opal to use "Produced$ Any"
- CardListUtil => CardLists (as they call Collections class)
- Issue 266: merged trunk:12895-12901 revisions into branch
- missing files?
- Issue 266: modified to account for lands that use "Produced$ Any"
- Player: isPlayer was duplicating equals method
- Issue 266: modified to allow reflected mana to interact with any color sources
- CardLists may accept any iterable<card> for filtering
- Issue 266: removed getManaProduced overrides from spells and drawbacks
- warnings
- Warren Instigator was missing the Berseker type
- GetOrderChoices will now show the reference card when it first pops up.
- use constants to show Tabber tabs instead of just using raw numbers everywhere.
- PlayerZone empty class removed
- Fixing Description of Skyrider Trainee
- PlayerZoneComesIntoPlay is now PlayerZoneBattlefield
- if things on the stack have a sourceCard of some kind of land, make sure the stack has a color (brownish; also used for artifacts). This would be for things like the triggered ability of City of Brass.
- PlayerZone is R/O Iterable on its cards
- Added a fluff piece to the changes.txt file.
- ante code no longer depends on get*Player
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- Aggregates.min
- fix ability cost of Flame Elemental (thanks squee1968)
- CardFactoryUtil uses player Aggregates
- fix missing subability of Green Sun's Zenith (thanks squee1968)
- Multizone support in AF_ChangeZone (removed target recheck that shouldn't be necessary)
- gave Soaratmi Savant Flying (thanks squee1968)
- Cleared out the changes.txt file, now ready for new material.
- restored the functionality to show Stack cards in Card Picture/Detail when moused over. This functionality was present in 1.1.8, but was removed in 1.2.0 due to a bug. I confirmed the bug was also present in 1.1.8, so we are no worse off than we were before and there have been complaints on the forum about this in the 1.2.0 UI.
- in DigUntil resolve, game cannot continue if revealed is empty. This is fixed.
- add 10E SetInfo to Counsel of the Soratami
- Issue 266: add color choice logic for future use by AI
- fix typo in Tourach's Gate
- Issue 266: changed sorting of mana sources to account of any color mana
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- Issue 266: add logic to make ManaNeededToAvoidNegativeEffect mana a mandatory part of the cost for the AI
- Removing hardcoded references to Mana Pool as a card.
- Converted City of Brass, Glimmervoid, and Mox Opal to use "Any" mana keyword. Added Manamorphose
- Added scriptable Replacement Effects. The system and syntax is very similar to the trigger system.For examples see the cards below or the forge.card.replacement package.
- Converted to script:
Benevolent Unicorn
Boon Reflection
Divine Presence
Dralnu, Lich Lord
Fire Servant
Forethought Amulet
Furnace of Rath
Gratuitous Violence
Lashknife Barrier
Lichentrope
Phytohydra
Pyromancer's Swath
Sulfuric Vapors
Sulfuric Vortex
- Corrected name of Akki Lavarunner / Tok-Tok, Volcano Born
- Added a fluff piece to the changes.txt file.
- Checkstyle.
- Coldsteel Heart is now a Snow Artifact.
- convert cards to any mana keyword (A-B)
- convert cards to any mana keyword (C-F)
- convert cards to any mana keyword (G-K)
- convert cards to any mana keyword (L-M)
- convert cards to any mana keyword (N-R)
- Fixed Remember syntax for Wormfang Behemoth.
- Make sure to actually run replacement effect checks for creature damage.
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- Consolidated ReplacementEffect.matchesValid() and Trigger.matchesValid() (Exactly the same method) into AllZoneUtil.matchesValid().
- Fixed description for Vigor.
- CheckStyle.
- CheckStyle.
- Updated Furnace Dragon and Iname as One to check for 'cast from hand' restriction.
- Ran Oracle and set info scripts.
- CheckStyle.
- checkstyle
- checkstyle
- Add package javadoc
- Meet George. George is a base class for Triggers and ReplacementEffects. George is content with his job.
- convert cards to any mana keyword (S-T)
- convert cards to any mana keyword (U-Z)
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- fix an observer leak on InputControl
- checkstyle and javadoc fixes
- PMD fixes
- Added CheckThirdSVar and CheckFourthSVar and accompanying parameters to StaticAbility.
- Added the recent commit logs to changes.txt.
- Added the recent commit logs to changes.txt.
- Checkstyle: Removed trailing spaces from new CheckSVars
- Fixed Tariel, Reckoner of Souls.
- Fixed type of Norn's Annex.
- GuiChoose.getOrderChoice is properly parameterized now
- newGame: observers update before matchState was changed lead to new hanging thread creation
- Fixed AI for Jarad's Orders.
- Copies of the Copies of Pack Rat will now have all the abilities of Pack Rat.
- Fixed Death's Presence.
- uncommented the ping functionality from FModel (yesterday site was down ping took too much time)
- Test NET_CONN no longer should slowdown the main thread
- Removed Braids progress monitor (unused)
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- Fixed Minion Reflector.
- Fixed undoBlockingAssignment.
- GUI - remove anything that was checking the unused Constant.Runtime.OLDGUI
- TreeProperties: removed unused functionality, moved the remaining class to forge.util
- little javadoc fixes in DeckEditorDraft
- Gauntlet Mode has landed.
- delte the GuiDisplay class. It is no longer used.
- get****Player methods are depreacated. Do not use them in new code.
- fix the Observers leak on MagicStack
- Exile zone marked as containing hidden information
- Stack Instance not resetting Paid Hash before setting new one
- Players have getType method to learn if certain player is AI or human
- gut the OldGuiNewGame class. It now contains only static elements related to preferences and loading dynamic game data (which needs to be moved to a different class)
- GameState stores player list instead of harcoded 2 players
- fix Hurkyl's Recall (looks like the Java code inadvertently got deleted)
- fixing error
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- Removing getXXXXPlayer calls - they mostly refer to AI now, so that I get current AI player from sa activatingPlayer
- delete MenuItemHowToPlay (it is no longer used)
- ChangeZone - removed getComputer/HumanPlayer
- consolidate deleteObservers in a deinitMatch method. Hooked this method up in the WinLoseFrame and QuestWinLoseHandler.
- removed some old code from counters
- update some Magic Numbers to constants
- Players have getAllies/Opponents methods
- delete file GuiHomeScreen.java (it is no longer used)
- Another portion of AI files cleaned from getHuman/ComputerPlayer
- update another Magic Number to constant
- Removing calls to getComputer/Human player. Hope AI is still alive
- move loadDynamicGameData to Main
- The AI will now play lands from the top of the library with Oracle of Mul Daya.
- fix value setting when CardSize radio buttons are selected.
- Fixed AI of Victimize.
- remove references to OldGuiNewGame
- Added SVar:RemAIDeck:True to Chimeric Idol.
- delete OldGuiNewGame
- Another portion of removal of global getters getXXXPlayer
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- this fixes 1st exception from /viewtopic.php?f=52&t=8301
- more magic number converted to constants in ControlAllUI
- Reverted changes made to main.properties in r17383.
- remove unused function in GuiDisplayUtil
- Fixed the AI not playing card draw spells, even when the resulting number of cards in hand is lower than 8 cards (it was not considering losing the card used).
- Fixed Dream Fighter.
- Fixed Graven Dominator.
- Little tweak in gainLifeCanPlayAI.
- Updated evaluateCreature.
- Little tweaks for the Da Vinci decks.
- Fixed two scripts.
- Added some AI checks to make better use of Steel Overseer.
- Added RemAIDeck:True to Orzhov Pontiff.
- ran Oracle and Setinfo scripts
- fixed remove counter trigger on Witherscale Wurm
- Fixed Vodalian Illusionist.
- Fixed Predatory Urge.
- Added the prefix "SVar$" to xCount (formerly only available in AbilityFactory.calculateAmount).
- Fixed another issue with Conclave's Blessing.
- Fixed the discarded list of CostDiscard containing all cards twice if the mode is Self, LastDrawn or Random (the cards are added to the list in doDiscard).
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- Added the options "LifeYouLostThisTurn" and "LifeOppLostThisTurn" to xCount.
- Added four missing set infos.
- Converted the replacement ability of Lich to script.
- add a Storm counter to the Players panel
- Fix Furnace of Rath
- Added Undying keyword.
- Added Fateful Hour to Count$ (Count$FatefulHour.<Truevalue>.<Falsevalue>) and as a condition to Static Abilities (FatefulHour$ True).
- Added Count$<Your/Opp>StartingLife.
- Added FatefulHour trigger parameter.
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- CheckStyle.
- Minor card text fix for Gibbering Descent.
- Continuous static abilities with "RemoveAllAbilities" will now also remove replacement abilities.
- Ran Oracle and setInfo scripts
- Added Damia, Sage of Stone to relevant section in PhaseUtil.java. (I initially thought the draw skip was Keyworded due to Psychic Possession script)
- Updated two SVars.
- creating branch for Dark Ascension pre-release scripts
- Bugfix: "ghost animation" for cards in hand after starting a new game
- Improved the AI of Echoing Decay.
- Updated some SVars.
- Ran set info script.
- Ran oracle script.
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- Fixed Chancellor of the Dross.
- Fixed Chancellor of the Forge.
- Fixed Chancellor of the Tangle.
- delete unused class ConstantStringHashMap
- javadoc and comment fixes in Upkeep.java
- flesh out javadoc in Untap.java
- flesh out javadoc in EndCombat.java
- Little card script updates.
- Fixed Convoke throwing an error when no creature has been tapped.
- Fixed icon display in player fields for quest and regular match play.
- added EYEBALL to counters enumeration list
- fixing Quest and regular match player avatars. Please be careful to not hard-code Windows-specific things.
- fix some code that was OS-specific in DeckLister.java
- move some code to EndOfTurn and flesh out javadoc in EndOfTurn.java
- adding EnchantedBy check to Player.hasProperty method
- added STRIFE to counters enum list
- updated Daybreak Coronet to use the more general AttachedTo. Removed "AllAurasEnchanting" from CardFactoryUtil.xCount method.
- DKA branch: Updated Falkenrath Aristocrat to use ConditionCheckSVar, and added rarity info to some of the scripts.
- Improved scripts for Ebon Praetor and for Lyzolda, the Blood Witch
- Added wasCastFrom<Zone> card property. It is set when the card is moved to the stack and cleared whenever it is moved anywhere else except from the stack to the battlefield(for Myojins,Phage,Iname, Epochrasite etc...)
- Fixed visual artifacts bug on semi-transparent buttons and panels in home screen.
- Fixed name (Nomad's Assembly -> Nomads' Assembly)
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- Updated two SVars.
- Updated two SVars (main branch).
- Removed Sudden Spoiling because it was not 100% functional.
- CheckStyle.
- Added the Dr Fate 3 deck.
- Made Keldon Marauders more AI friendly.
- Fixed Mishra, Artificer Prodigy.
- Fixed casting cost on Faithless Looting.
- Added a spell description field to the CostChange keyword. Converted a few CostChange cards.
- Refactored ForgePreferences:
1) Output file entries sorted
2) Easier to add/remove prefs
3) Checkstyled and commented
4) LOC halved
- Streamlined old, overly explicit phase toggles in ForgePreferences.
- Small update to ForgePreferences.
- Minor update to ViewField.
- Removed internal padding on card picture in match UI.
- Fixed "no human first turn phase indicator" bug.
- Minor update to keyboard shortcut saving in dock.
- Fixed "must restart for dev mode setting" and similar bugs.
- modifications to allow cards that transform to Auras to attach to a target.
- Moved ability description into keyword for Glowrider and Thorn of Amethyst
- If using Alternate-state scripting to create a non-doublefaced, non-flip card (i.e. Licids), use "AlternateMode:<name of other state>" then use AF_SetState's NewState parameter with that name. This is to avoid things confusing them with actual doublefaced cards.
- Added start button and logo to image sprites in each skin, and updated FSkin and home screen code to match.
- reduce JTextArea instances in ViewTabber
- Run static abilities-check after running static triggers but before regular triggers. Fixes Adaptive Automaton+Champion of the Parish type situations. With thanks to Sloth!
- Let the Deck Editor cope with cards with non-flip, non-doubleface alternate states. (i.e. those damn Licids)
- further reduce JTextArea instances in ViewTabber (for Combat descriptions)
- Minor bugfix in ForgePreferences.
- Bugfix to the bugfix in ForgePreferences.
- Ran oracle script.
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- Fixed AI of Copy Artifact and Sculpting Steel.
- Added a check in checkStateEffects for creatures enchanting something, making them fall off properly. (Licids! *shakes fist*)
- CheckStyle.
- Fixed Wormfang Behemoth.
- Added the player keyword "Skip your draw step." and converted some cards to use it.
- Memory management debugging in ViewTabber: cleared list of JTextAreas in stack panel to prevent pileups.
- udpate guava to 11.0.1 (it has some cache fixes that may affect ImageCache)
- Uploaded quest opponent avatar: Beast. Added to quest-opponent-icons.txt
- Uncommented download link for Tatsumasa, the Dragon's Fang token.
- Updated the deck editor color filter icons.
- try to clean up IMAGE_CACHE at the end of each match. This may help with large memory usage after many matches.
- Fixed bug preventing full texture paint on keyboard shortcuts screen.
- Added Attach Drawback. Removed previous changes for Auras in SetState AF.
- updated Soul Seizer script to Attach drawback
- Updated quest opponent avatar links.
- Added a fluff piece to the changes.txt file.
- Added the Darkseid 3 deck.
- Added the recent commit logs to changes.txt.
- Fixed creatures with Deathtouch destroying creatures and dealing damage afterwards.
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- clean up a Java warning in AFSetState
- remove some debug code related to Observers
- Improved the AI of AF DestroyAll to take permanents with SacMe SVar into account.
- Changed the default value of "ui.card.overlay" to true.
- Added trigger mode "Transformed".
- Hardcoded Sky Swallower will now give away other cards, not self.
- Fixed Undead Alchemist
- Update SubAbility for a few of my favorite cards (SVar= is not needed and has not been needed for a long time.)
- Started adding doTrigger functions to Spell AF's, because canPlayAI is not suited for cases like a spell revealed by a Cascade ability. First AF to test this is AF DealDamage.
- Added the ability to get LKI copies of a certain state. Fixes Unholy Fiend triggering Village Cannibals and maybe more.
- Cards should never be tapped outside the battlefield.
- Added trap type to Arrow Volley Trap
- Added canPlayFromEffectAI function.
- Added the recent commit logs to changes.txt.
- Added canPlayFromEffectAI to AF Pump.
- Little fix for Cascade.
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- Added canPlayFromEffectAI to AF Draw and Discard.
- Removed the hardcoded cascade ability of Bituminous Blast.
- Changed Ripple to use canPlayFromEffectAI.
- Changed Fungus Sliver to grant a trigger instead of a keyword.
- Removed the now unused keyword it used to grant.
- Temporarily fixing infinite loop in AF Pump, not sure if this is what it should do though.
- Fixed Equilibrium.
- CheckStyle.
- Added the function playSpellAbilityWithoutPayingManaCost to ComputerUtil.
- Fixed the AI part of Cascade and Ripple skipping payment of non mana costs.
- fixed problem with Any color mana abilities added through continuous effects e.g. Gemhide Sliver
- Internalized win/lose frame into match UI using overlay.
- Fixed icons display for mana overlay setting. Now, icons and counters will show all the time, but title, p/t, and casting cost is toggle-able.
- Performance enhancement: fonts used in UI are now pre-derived once in skin.
- Updated the AffectedZone of some continuous static abilities.
- Added canPlayFromEffectAI to AF Destroy.
- Cleanup.
- Cleanup.
- Changed "removed" to "exiled" for consistency
- Morph spells will now truly be cast face down.
- Minor fix to comments in ControlDetail.
- Converted Lodestone Bauble to script.
- removal of another hundred of calls to global getPlayer
- avoid possible OoB exception
- Bugfix: Math.round produced OoB on random deck generation for quick gauntlets, now Math.floor.
- Cleaning up some sealed deck AI for non basic lands
- Move the GameFormatQuest to the proper place in class hierarchy, removed outside references.
- Made sure that certain methods of GameFormatQuest return immutable objects too.
- Simplified the predicates in QuestUtilCards.java.
- Spell shop no longer sells snow-covered lands if enforcing a format that doesn't contain snow-covered land sets (Ice Age, Coldsnap).
- Booster pack choice now shows more verbose set names; tiny cleanup
- as asked in /forum/viewtopic.php?f=52&t=8312
- Updated the quest deck Doc Holiday 1 with Ixidron.
- The challenge rewards now honor the persistent format if enforced.
- Fixed devSetupGameState().
- 30 less global calls for special player
- Removed chooseTargetAI and related stuff.
- Removed an unnecessary import added automatically by the over-zealous Eclipse.
- Small update to FButton.
- Small fix to FButton.
- SVN difficulties...fixed now.
- Standardizing home screen appearance: Sanctioned submenu (all)
- Standardizing home screen appearance: Gauntlet submenu (all)
- 1 call less
- Standardizing home screen appearance: Quest submenu (all)
- remove warnings, use FileUtil to read text files
- Renamed TableModel to less confusing EditorTableModel.
- Added the recent commit logs to changes.txt.
- Bugfix: "Double-click for decklist" crash on random generated decks (colors and themes).
- Further standardized messages and font sizes.
- A little checkstyle.
- removed NameChanger.java
- removed warnings,
- remoevd AllZone.getXXXplayer calls
- add a check to ignore .svn directories
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- Added counter to input area to indicate match #x out of y.
- Converted Isochron Scepter and three other cards to use AF Play instead of AF Copy.
- Null pointer fix.
- Fixed casting cost of Slum Reaper.
- remove SVar= from SubAbility (Z cards)
- Added the option "DifferentNames" to AF ChangeZone.
- remove SVar= from SubAbility (Y cards)
- 100 warnings remain
- remove SVar= from SubAbility (U-V cards)
- 20 global calls less (80 to go)
- remove SVar= from SubAbility (W cards)
- Converted Soulshift to a macro script.
- Added a GameLoss replacement effect.
- QuestController moved to FModel,
- Added YouDrewThisTurn and OppDrewThisTurn to xCount.
- AllZone.getPlayersInGame() inlined as gameState.getPlayers
- Forgot to add Lich's Mirror script.
- Cleanup.
- Enabled multiple copies of Cascade on a spell.
- Added "SVar:HasCombatEffect:TRUE" to some cards.
- Updated some SVars.
- Temporary fix so QuestController is instantiated when it's first requested, instead of when FModel is, since that's too early
- little cleanup in GenerateThemeDeck.java
- Minor fix for quest saves tooltip
- Little fix
- Gussied up damage assignment dialog.
- Fixed cancel button layout bug.
- Added a GU morph opponent: Jesse James 1.
- Small fix to winlose layout.
- Fixed Skullbriar, the Walking Grave.
- Small update to FSkin font derivations.
- You may edit quest decks now
- fixed ManaCost.isColor() to return true when comparing any size colorless mana cost to a type of "1"
- Fixed a logic error in chooseLandsToPlay.
- fix Crash with Qasali Ambusher
- Restored resizing cursor on resizeable panels.
- Refactored anyChoice to expressChoice. Added logic to make automatic color choices for "Any" keyword mana sources.
- Resolved NPE on "Remove 4" button, if no card in current deck.
- remove SVar= from SubAbility (T cards)
- Added a fluff piece to the changes.txt file.
- remove SVar= from SubAbility (S cards)
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- remove SVar= from SubAbility (Q-R cards)
- Consolidated all home screen deck generation and retrieval lists into forge.deck.DeckgenUtil (only affects Gauntlet mode and Constructed).
- remove SVar= from SubAbility (P cards)
- A wee bit o' checkstyle.
- remove SVar= from SubAbility (O cards)
- Removed persistent cards on new game start from battlefield and hand.
- remove SVar= from SubAbility (A cards)
- Cleanup: removed savePrefs and loadPrefs methods from model.
- remove SVar= from SubAbility (B cards)
- Random deck generation will once again differentiate between human and computer decks.
- remove SVar= from SubAbility (C cards)
- Fixed cards with multiple landwalk abilities.
- remove SVar= from SubAbility (D cards)
- Fixed Molten Influence.
- remove SVar= from SubAbility (E cards)
- Improvement for LimitedDeck AI so that less random cards are added when not enough on-color cards can be found.
- remove SVar= from SubAbility (F cards)
- Added combat attacking/blocking to targeting arcs.
- remove SVar= from SubAbility (G cards)
- applyContinuousAbility will now set the source card.
- remove SVar= from SubAbility (H-I cards)
- Added getStaticEffects() to StaticEffects.
- remove SVar= from SubAbility (J-L cards)
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- remove SVar= from SubAbility (M cards)
- Fixed matchesValidSA.
- remove SVar= from SubAbility (N cards)
- Fixed controllerChangeZoneCorrection sending cards on the stack to Nirvana.
- Small Checkstyle fix
- Performance improvements of the ReplacementHandler.
- remove support for SVar= string in SubAbility. It has not been required for a long time, and now, is no longer supported. All card files have been updated.
- Fixed Perish the Thought shuffling.
- Fixed font on storm label.
- Added the quest opponents Gollum 2 and 3 (thanks to Nordos).
- Changed QuestMatchState to MatchState (since it has no quest-specific information).
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- Renamed ManaSymbols to more accurate CardFaceSymbols.
- CbxFormat and CbxPrecon enablers were the wrong way around in # 17425.
- Fixed makeGangBlocks in ComputerUtilBlock.
- Cleanup, updates and little fixes.
- Converted Dunerider Outlaw and Whirling Dervish to script.
- Converted Contested War Zone to script.
- Fixed Restoration Angel.
- Added AI support for mass -X/-0 pump spells.
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- Reverted Exile zone to a public zone and not a hidden one (see Rule 400.2).
- Cleanup in AF ChangeZone.
- Added the quest opponent Tombstone 3 (thanks to Nordos).
- Fixed AF Regenerate AI targeting creatures with shroud.
- Fixed Golgari Charm.
- Made some more AF's compatible with charms.
- Improved AI using Detain abilities.
- fixed NPE issue due to activating player not set in replacement effects
- Match UI multiplayer go for takeoff. Please delete your old match_preferred.xml layout; old match layouts are invalid.
1 Up to 8 fields can be used
2 Up to 4 hands can be used
3 Multiplayer submenu added in home screen
- Updated the deck Hermione Granger 3 with RtR cards.
- Added a fluff piece to the changes.txt file.
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- Added a fluff piece to the changes.txt file.
- Fixed possible NPE in SpellPermanent.checkETBEffects
- Fixed AI relying on illegal blocks made with Mogg Flunkies and friends.
- Turned keyword "CARDNAME enters the battlefield tapped." into an ETBReplacement Macro.
- fixed another NPE issue due to activating player not set in replacement effects
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- minor change to last NPE fix
- Fixed Grave Betrayal.
- Updating VAssignDamage to fix all of the rules interactions that were a bit off.
- Fixed Braids, Conjurer Adept.
- Adding game type requirements
- Quests now enforcing game type requirements
- Hooking up Auto and Reset functions in Assign Damage. (I can't quite figure out how to get the alignment of the buttons to work, if some kind soul would like to add it, that'd be great)
- New ExperimentalLabel class with improved aesthetics added. Not in use yet.
- Fixed type of Niv-Mizzet, Dracogenius.
- Constructed submenu aesthetic update complete.
- Improved separation of view/control in new home UI code.
- Deprecated VMainMenu class.
- Renamed CMainMenu to CHomeUI.
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- Unless costs will now also work on subabilities.
- Added the property "SharesColorWith MostProminentColor".
- Fixed some FindBugs reports.
- Added the quest opponent Tweedledum 2 by Nordos.
- Added AI support for Tree of Redemption.
- Fixed Extra Arms.
- Fixed possibility of getting stuck with Sea Drake and only one land.
- Further home menu aesthetic improvements:
* Removed "utilities" menu
* Added "exit forge" and "deck editor" buttons directly to menu panel
* Restored functionality to exit forge button
* Removed forge.gui.home.utilities package
* Removed deprecated VMainMenu.
- Temp fix for vertical sizing (small screens) home menu problem.
- Sealed and Draft now funnel through meetsGameTypeRequirements
- Added experimental new expansion unlocking scheme to limited-format quests. Once per every 100 wins, you get the option of using credits to "unlock" a new set and add it to your enforced format.
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- Fixed a silly brain-fart in my previous commit.
- Added a fluff piece to the changes.txt file.
- Fixed Palace Guard and Tidal Control.
- Fixed Winter Blast.
- The three following unless costs can now be combined with other unless costs: CostPayLife, CostDamage and CostPutCounter.
- Added "Prevent all combat damage that would be dealt to and dealt by CARDNAME." to nonStackingKeywords.
- Aesthetic update to draft submenu.
- Aesthetic update to sealed submenu.
- Updated "directions" blurbs in draft submenu.
- Small antialiasing fix to Blue Marble sprite.
- Fixed Terrifying Presence.
- Sliced 50px off home menu bar.
- Aesthetic update to quest Duels and Challenges screens 70% finished. A few architectural changes were necessary also.
- Checkstyle.
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- Scaled down logo in home menu to better match changed menu width.
- Spells cast with Isochron Scepter can now be kicked (and buybacked, etc.).
- Persist and Undying now use addSimultaneousStackEntry.
- Fixed a problem with spell shop booster generation in limited quest mode.
- Fixed Frostling.
- For public discussion and contributions, created the hotseat branch.
- Current state of hotseat branch
- Restored all observers, lacking some updates befor the game starts.
- Adjusted fields and hand(s) creation. Crashes on endgame
- Clear remembered in Galepowder Mage after returning the flickerd creature
- Scaled down font size in home menu panel.
- Quest Duels and Challenges aesthetic update is complete.
- GameOutcome calculation works
- Freed hordes of testers who were previously stuck inside the quest bazaar, unable to find an exit. A hellish scenario. Time for a break.
- changes from 17550-17560 integrated
- Removed hardcoded players
- last turn passed to GameOutcome
- Added a dialog to allow defining custom quest formats.
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- Decreasing number of global calls to Singletons.getModel().getMatch()
- massively moved static methods from AllZoneUtil to GameState - they must become non-static once (to support multiple games running at a time)
- A huge amount of AllZone static methods was inlined (so that people see how many calls really are there behind AllZone.getXXX, and consider obtaining (for example) GameState value to a local variable)
- GetGameLog inlined
- The AI will now try to avoid letting the human discard cards like Loxodon Smiter.
- The AI will attack a little more aggressively with creatures with a SacMe SVar.
- Added the option of exiling all cards in a zone as a cost.
- The enforced format, if any, now also determines whether your quest starting cardpool contains snow-lands or not.
- You now get the option to unlock new sets after every 50 wins, not 100.
- fixed crash at end of quest match
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- Angel of Serenity will no longer produce a crash when the AI wants to cast it.
- Improvements and cleanup in AF DealDamage AI functions.
- MatchController contains inputControl, subscribes listeners to event by itself
- most of AllZone methods static moved into instances, consider retrieving frequently used values into class fields or local variables
- AllZone is gone. Its members moved to Fmodel while colorchanger went to GameState
- getGameState => getGame
- Stack zone uses its own class Zone (which has no owner obv.)
- passes GameState to phaseHandler, moved player related static calls to player/Player.java
- If player decides to draw, turn is given to his opponent
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- Added Multiplayer support for unless costs (but not multiple humans yet).
- Added "Any Player" support to unless costs.
- Improved AI dealing with Measure of Wickedness.
- Turn counting removed from GameState (cause phaseHandler already did it)
- Inlined some static methods called from phaseHandler
- PhaseType: index is not a field, yet the order is set by a list initialized statically
- GetLabelForPhase - moved to VField from PhaseUtil
- Game has a method to determine the next player who takes turn/priority after the given one.
- IVDoc parametrized so that getLayoutControl method returns a object or right type, won't have to cast from ICDoc
- Converted Stasis to Keyword
- Simplify Yosei a touch
- Avatars on match UI are somewhat working (will take human's icon for every even-numbered player and ai's for odd ones)
- Converted Eon Hub and Gibbering Descent into Keyword
- remove unused var, type casting
- fixing restart issue and hand crash
- games against several AIs can be started now - yet extra AI players cannot be attacked and don't act (though they recieve turns)
- Fixed getSpellCostChange.
- Phase indicators are properly lit when attack/defend cast instants phase begins
- computer should not recieve priority before mulligan
- Sands of Time needs this update
- Fix ante checking for a match win instead of last game win.
- Moved card and player cleanup routines to repective classes
- renamed isNeedToNextPhase => !mayPlayerHavePriority (would let understand the code better)
- @inputControl: setInputInterrupt and setInput add to resolveStack and common Stack
- @inputControl: updateInput => getActualInput
- Fixed Tarzan Description. Advertised as WR, but really is GR.
- Rollback of 17605 that broke everything
- that borken 17605 + changes to skip mechanism
- nextPhase transition according to priority passes
- Targeting overlay mouseover state preferences and dock button enabled.
- Its mechanics still need some work.
- Targeting overlay isn't maturing as I'd hoped. It's now disabled until further notice. Code will remain in place if someone wants to tackle it.
- Bugfix: Editor card panel looking for color from nonexistent game state.
- Renamed various WinLose screens to better reflect their application.
- Small grammar fix on sealed dialog.
- You may plays against several AI opponents now
- InputControl: human will get only one 'declare blockers' prompt in multiplayer games
- GameAction: fix crash when ai player drew miracle card on 1st turn
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- Quest mode: new cards are created for each match (won't see cards with state preserved from old game)
- Moved common AI functions from AbilityFactories to ComputerUtil.
- PlayerStartConditions is ok
- GameNew won't fetch supplier twice
- Lol: archenemy mode against N ai
- correct damage assignment when attacking multiple players at once
- If creature hasn't been assigned any damage in Assign Panel, use the minimum value of Lethal Damage and Remaining Damage.
- Player.getOpponent improved to handle ai vs ai games
- Replace Flameshot second spell with alt cost keyword
- protection from NPEs in getOpponent
- declare blockers works properly
- comment out debug output
- Computer players will also have random icons
- Mini-gauntlet mode a true advancement through rounds has.
- Slightly improved expansion selection algorithm for unlocking + 2 more choices.
- Turned off a debugging function call.
- archenemy: ai opponents will use different decks
- Made the scripts of some cards with "As CARDNAME enters the battlefield, choose an opponent." to be multiplayer compatible.
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- Made more scripts ready for multiplayer.
- Autopass to EOT should not skip the following turn
- add AILogic to any mana choice to avoid crashing
- Added a fluff piece to the changes.txt file.
- Added a fluff piece to the changes.txt file.
- Made more scripts ready for multiplayer.
- Defending Player will now be determined conform to rule 802.2a.
- simplified deck list generation
- restored unlimited hand size
- Fixed AI Logic of AF Mana.
- PhaseHandler isNextTurn(PlayerType) marked as deprecated. (There are many players of same type in a game)
- local player is assigned at beginning of a match instead of being calculated each time.
- removed some hardcoded checks for ai player
- Made more scripts ready for multiplayer.
- r17604 was not merged properly in r17621
- adding some deckhints
- remove unused code
- Renamed a GameFormatQuest method to something more descriptive (to avoid confusion with a more general method).
- PhaseHandler.isNextTurn changed by getNextTurn.equals(ai)
- Combat: removed getDefendingPlayer (there may be multiple defenders per combat)
- More intuitive calculation of "every 50th win" for unlocking new sets.
- Even more intuitive calculation of "every 50th win" for unlocking new sets.
- the most intuitive one
- Made more scripts ready for multiplayer.
- The Provoke keyword is now multiplayer compatible.
- Made more scripts ready for multiplayer.
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- X marks the spot there a GL trigger should be fired
- without this fix GL trigger would be fired multiple times
- less complex
- Made the scripts of some cards with "Whenever a creature attacks you..." to be multiplayer compatible.
- Fixed Konda's Hatamoto.
- Made cards with "CARDNAME can't attack unless defending player controls ..." to be multiplayer compatible.
- Made Landwalk abilities multiplayer compatible.
- Made more scripts ready for multiplayer.
- Fixed logic of the predicate isProtectedFrom.
- Restart button replays the whole match
- Added LosesGame trigger.
- Added trigger to Blood Tyrant and Withengar Unbound (Blood Tyrant still needs it's first trigger corrected)
- Singleton usage.
- removed CombatUtil.canAttack method without specifying attack target
- Copy/Paste error in Blood Tyrant.
- Added "OppCtrl" as a parameter to hasProperty.
- Changed some instances of "YouDontCtrl" to "OppCtrl".
- Changed more instances of "YouDontCtrl" to "OppCtrl".
- setMustAttackEntity - method type set to GameEntity
- Players: defeated players in archenemy won't get turns or priority, their permanents on table won't affect the game
- fix to NPE from players leaving game.
- Trigger handler should check all non-active players
- registered players as r/o list
- to potentially prevent endless loop
- Combat that will return some defender in any case
- DeckChooser from constructed home screen refactored as a component
- You may choose your deck for Archenemy mode
- Achenemy: you have additional 10 lives for each opponent beyond the first one
- Also renamed C- and V- classes
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- Changed more instances of "YouDontCtrl" to "OppCtrl".
- "YouDontCtrl" => "OppCtrl".
- Fixed setinfo of swordshine's cards.
- Fixed AF ChangeZone with the Origin All.
- AI won't have any more fun when the game is over.
- Changed more instances of "YouDontCtrl" to "OppCtrl".
- Fixed OppCtrl.
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- Fixed Gobbling Ooze.
- Fixed Gnat Miser.
- Improved Alternative Cost strings when the cost is 0.
- Removed unnecessary suppressing of tap/untap triggers.
- Fixed a possible NPE in AF Attach.
- Ai won't not think when the game is over
- Improved Bounce AI.
- The AI will no longer clone its own legendary creatures.
- Made the script of Detention Sphere AI friendly.
- Fix Fulgent Distraction crash when looking for Cost that doesn't exist
- Enabled random generation of Mythic Rares in some custom formats (with rarity) when the cardpool contains them and they are not being forced by the NumMythics parameter. Required for RtR Guild Sealed.
- Added the recent commit logs to changes.txt. Preparing for the beta build and release.
- Added the recent commit logs to changes.txt. Preparing for the beta build and release.
- Preparing the changes.txt file for the next beta build and release.
- Preparing the changes.txt file for the next beta build and release.
Added pre-release cards to DKA cardfolder branch:
Beguiler of Wills
Chalice of Life // Chalice of Death
Curse of Thirst
Drogskol Reaver
Faithless Looting
Falkenrath Aristocrat
Gather the Townsfolk
Ghoultree
Gravecrawler
Hunger of the Howlpack
Huntmaster of the Fells // Ravager of the Fells
Increasing Confusion
Increasing Devotion
Jar of Eyeballs
Lambholt Elder // Silverpelt Werewolf
Loyal Cathar // Unhallowed Cathar
Mikaeus, the Unhallowed
Mondronen Shaman // Tovolar's Magehunter
Moonveil Dragon
Nearheath Stalker
Ravenous Demon // Archdemon of Greed
Scorned Villager // Moonscarred Werewolf
Secrets of the Dead
Sorin, Lord of Innistrad
Soul Seizer // Ghastly Haunting
Strangleroot Geist
Thalia, Guardian of Thraben
Thraben Doomsayer
Vorapede
Zombie Apocalypse
Many people helped with this version. A special thank you goes out to them. (Attempted to list names alphabetically):
Many people helped with this version. A special thank you goes out to them. (Attempted to list names alphabetically):
@@ -6,17 +6,25 @@ Once the Forge archive has been decompressed you should then be able to launch F
After downloading and installing a newer version of Forge you may want to move certain files from the older version over to the newer version of Forge. You should maintain your older version of Forge as a back up in case you make a mistake while installing the newer version.
After downloading and installing a newer version of Forge you may want to move certain files from the older version over to the newer version of Forge. You should maintain your older version of Forge as a back up in case you make a mistake while installing the newer version.
1) The /res/pics/ folder contains the card pictures, token pictures (mtg card tokens an quest pet/plant tokens) and the booster package images. Please note that the /res/pics/icons/ folder was moved out of this folder and placed in the /res/images/ folder.
1) The /res/pics/ folder contains the card pictures, icons and token pictures (mtg card tokens and quest pet/plant tokens). Please note that the /res/images/icons/ folder was moved back to the /res/pics/ folder. The forge /res/images/ folder no longer is used as of version 1.2.8.
The /res/images/icons/ folder contains the quest opponent icons, small quest pet/plant icons (non-tokens) and some icons that are used by forge's quest mode. While several of these pictures ship with the forge archive most of them have to be downloaded using the Home screen -> Utilities -> Download Quest Images command.
The /res/pics/icons/ folder contains the quest opponent icons, small quest pet/plant icons (non-tokens) and some icons that are used by forge's quest mode. While several of these pictures ship with the forge archive most of them have to be downloaded using the Home screen -> Utilities -> Download Quest Images command.
2) The /res/decks/ folder contains your deck files. You should copy over the files with the extension ".dck".
2) The /res/pics_product/ folder contains four folders which in turn contain pictures for the booster, fatpacks, precons and tournamentpacks products.
3) The /res/draft/ and the /res/sealed/ folders contains files for the sealed and draft mode. You should copy over your files inside of these folders that end in the extension ".draft" or ".zsealed".
3) The /res/decks/ folder contains your deck files. You should copy over the files with the extension ".dck". In version 1.2.4 and later the /decks/ folder contains 4 subdirectories named constructed, cube, draft and sealed.
4) The /res/quest/ folder contains your questData file. This file includes all of the information for your current quest. You will not be able to continue your quest in a newer version of Forge unless you copy over the file named "questData.dat".
You can place your deck files from an earlier version of Forge into the /res/decks/ folder. When you next launch Forge these decks will be converted to a newer format and will be moved into the proper subdirectory.
5) The Forge root folder contains a preference file named "forge.preferences" and you should also move a copy of this file over to the newer version.
4) The /res/draft/ and the /res/sealed/ folders contains files for the sealed and draft mode. You should copy over your files inside of these folders that end in the extension ".draft" or ".zsealed".
5) The /res/quest/data folder contains your questData files. These files include all of the information for your current quests. You will not be able to continue your quests in a newer version of Forge unless you copy over the your quest data files. These files have a ".dat" extension. You can now have multiple ongoing quests at the same time.
6) The Forge /res/preferences/ folder contains the preference files named "forge.preferences" and "editor.preferences". You should also move a copy of these files over to the newer version. The /res/preferences/ folder was added to version 1.2.8. The main.properties file was also moved to the /res/preferences/ folder.
7) The /res/layouts/ folder contains a file named "match_preferred.xml". This file contains information that forge uses when setting the layout for the battlefield display. The match_default.xml file contains the default layout for the battlefield.
The editor_preferred.xml file contains information that forge uses when setting the layout for the deck editor display. The editor_default.xml file contains the default layout for the deck editor display.
Advanced Updating to a newer version Instructions:
Advanced Updating to a newer version Instructions:
@@ -40,6 +48,14 @@ You can move a copy of your pictures and decks over to the "Forge.app" applicati
Your decks can be placed in the decks folder, your pics can be placed in the pics folder, etc.
Your decks can be placed in the decks folder, your pics can be placed in the pics folder, etc.
If you update your OS to Apple OSX 10.8 Mountain Lion and try to launch a new version of forge that you will likely get a dialog which states "File is damaged and cannot be opened. Please move to trash."
Mountain Lion comes with a new Gatekeeper feature and this is probably blocking your ability to launch this newer version of forge. Visit the link below and follow the instructions. They are fairly long and detailed.
Please note that the issue is most likely caused by Mountain Lion's Gatekeeper feature and it is extremely unlikely that the forge dev team will attempt to get a unique Developer ID from Apple and use it to digitally sign our forge app.
Picture location info:
Picture location info:
@@ -51,6 +67,8 @@ The quest pets archive contains two subdirectories named "icons" and "tokens". P
Your forge game may not come with one or more of these three folders as part of the forge archive. In this case you should use your computer's OS file system to create the proper folders with the correct names and they must be located inside of the /res/pics/ folder.
Your forge game may not come with one or more of these three folders as part of the forge archive. In this case you should use your computer's OS file system to create the proper folders with the correct names and they must be located inside of the /res/pics/ folder.
The in-game downloaders will grab an image for face-down (Morph) cards on the battlefield. To use a custom image, place a "morph.jpg" file in your res/pics/tokens directory.
Launching Forge and Memory Issues:
Launching Forge and Memory Issues:
@@ -67,6 +85,34 @@ If you have a low end machine you may find that the scripts above will prevent j
In this case you can try the following. Remove the background jpg picture from /res/images/ui/ folder. You can try using low quality pictures rather than the high quality pictures. Or you can try removing all of the jpg pictures from the pics folder.
In this case you can try the following. Remove the background jpg picture from /res/images/ui/ folder. You can try using low quality pictures rather than the high quality pictures. Or you can try removing all of the jpg pictures from the pics folder.
Forge failed to launch:
If you're trying to run Forge for the first time, but it doesn't open up, you can try the following to get some output and help yourself/us solve the problem.
1) Open up a terminal
- Under Windows, press Windows+R, type "cmd", hit enter
- Under Linux, you probably know that yourself. Use your distribution's application menu, and search for "terminal" in a group like "utilities".
- Launch the program named "Console.app" which can be found in your /Applications/Utilities/ folder. Highlight the "All Messages" option and click on the "Clear Display" button before launching Forge.
2) Go to the folder where you unpacked Forge
- Windows: Let's say your forge is in D:\Programs\Forge.
- Type "D:", Enter to change to the D: drive.
- Type "cd \Programs\Forge", Enter to change to the directory.
- NOTE: On nonenglish systems, you might have problems due to the poor localization of Windows. Go to the innermost directory you find (worst case is "\"), then "dir", Enter to show all folders in that folder. Search for the one you're probably wanting. For Example the German "Programme" could really be "Program Files" or something like that.
- NOTE: You might have to "quote" directory names with Spaces in them
- Linux: Let's say your forge is in /home/user/Forge
- Type "cd /home/user/Forge", Enter
- NOTE: You might have to "quote" or 'quote' directory names with Spaces in them
- Current versions of Forge no longer include a launcher script for Mac OS, proceed to step three.
3) Run Forge
- On Windows, just type "forge.exe", Enter
- On Linux, just type "forge.sh", Enter
- Launch the Forge application bundle by double clicking on the program named "Forge.app".
Now you will probably see some sort of Error in the console. the first few lines contain a message that might help you. If you can't fix the problem yourself, please take the complete output and report your problem on the Forum.
The Card Pictures disappear when you restart Forge:
The Card Pictures disappear when you restart Forge:
if you're running Windows 7, make sure you're running the program as an admin, otherwise no changes will be made to your system (nothing is saved). In Windows 7, Forge may be happier when run from somewhere in the My Documents structure, (they call them Libraries now???) or from another partition other than C:. The user has little permission to do much on the system drive.
if you're running Windows 7, make sure you're running the program as an admin, otherwise no changes will be made to your system (nothing is saved). In Windows 7, Forge may be happier when run from somewhere in the My Documents structure, (they call them Libraries now???) or from another partition other than C:. The user has little permission to do much on the system drive.
@@ -76,6 +122,8 @@ Java Issues:
Some people that are using an early version of Java 7 under the Windows OS have reported errors that state "Split must have > 2 children". Anyone having this sort of problem should de-install java 7 and install java 6 instead.
Some people that are using an early version of Java 7 under the Windows OS have reported errors that state "Split must have > 2 children". Anyone having this sort of problem should de-install java 7 and install java 6 instead.
Forge requires java 6 and will not run if you have an earlier version of java. You will need to update to java 6.
print("This script requires the text version of Arch's mtg-data to be present.You can download it from slightlymagic.net's forum and either place the text version next to this script or edit this script and provide the path to the file at the top.")
print("This script requires the text version of Arch's mtg-data to be present.You can download it from slightlymagic.net's forum and either place the text version next to this script or edit this script and provide the path to the file at the top.")
Index:11|Set0:MRD|Set1:CHK|Set2:DST|Set3:BOK|Set4:5DN|Set5:SOK|Name:(5-6) Chronicles 06 - Champions of Mirrodin|DraftPacks:3|LandSetCode:9ED|SealedPacks:6
# split line by spaces to see if first token matches a keyword
line=line.rstrip();
p=re.compile('\s\(.*\)$')
line=p.sub('',line)
allKeywords=True
ifline.find('Enchant')!=-1:
print'K:'+line
returnallKeywords
else:
# Multiple keywords could be comma seperated in mtgdata
words=line.split(', ')
fortokeninwords:
iftoken.title()inkeywords:
print'K:'+token.title()
else:
allKeywords=False
returnallKeywords
ifnotos.path.exists(pathToMtgData):
ifnotos.path.exists(pathToMtgData):
print("This script requires the text version of Arch's mtg-data to be present.You can download it from slightlymagic.net's forum and either place the text version next to this script or edit this script and provide the path to the file at the top.")
print("This script requires the text version of Arch's mtg-data to be present.You can download it from slightlymagic.net's forum and either place the text version next to this script or edit this script and provide the path to the file at the top.")
@@ -145,6 +220,7 @@ if not os.path.exists(pathToMtgData) :
sys.exit()
sys.exit()
forgeSets=[]
forgeSets=[]
keyWords=[]
mtgDataCards={}
mtgDataCards={}
setCodes=[]
setCodes=[]
tmpName=""
tmpName=""
@@ -152,6 +228,7 @@ line = ""
# initialize sets supported by Forge
# initialize sets supported by Forge
initSets()
initSets()
initKeywords()
#Parse mtg-data
#Parse mtg-data
mtgdata=open(pathToMtgData,"r")
mtgdata=open(pathToMtgData,"r")
line=mtgdata.readline()
line=mtgdata.readline()
@@ -214,8 +291,6 @@ while line:
# store Card object in hash table
# store Card object in hash table
mtgDataCards[cardName]=card
mtgDataCards[cardName]=card
print'WARNING: Card template contains bogus SetInfo for testing only!!!'
print' Please remove the SetInfo before committing to repository\n'
inputName=raw_input("Enter Card Name: ")
inputName=raw_input("Enter Card Name: ")
inputName=inputName.rstrip()
inputName=inputName.rstrip()
whileinputName!='quit':
whileinputName!='quit':
@@ -225,6 +300,7 @@ while inputName != 'quit' :
cleanName=cleanName.replace("'",'')
cleanName=cleanName.replace("'",'')
cleanName=cleanName.replace(',','')
cleanName=cleanName.replace(',','')
cleanName=cleanName.replace('','_')
cleanName=cleanName.replace('','_')
cleanName=cleanName.replace('-','_')
print'\nName:'+cardData.name
print'\nName:'+cardData.name
print'ManaCost:'+cardData.cost
print'ManaCost:'+cardData.cost
print'Types:'+cardData.types
print'Types:'+cardData.types
@@ -233,10 +309,31 @@ while inputName != 'quit' :
print'PT:'+cardData.pt
print'PT:'+cardData.pt
elifcardData.types.find('Planeswalker')!=-1:
elifcardData.types.find('Planeswalker')!=-1:
print'Loyalty:'+cardData.pt
print'Loyalty:'+cardData.pt
print"\n<Script Start>"
fortextincardData.oracle:
fortextincardData.oracle:
printtext
# do some prescripting
print"<Script End>\n"
tokens=line.split('');
iftext.find("When CARDNAME enters the battlefield")!=-1:
print'SVar:Unleash:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 1 | SpellDescription$ Unleash (You may have this creature enter the battlefield with a +1/+1 counter on it. It can\'t block as long as it has a +1/+1 counter on it.)'
A:SP$ Discard | Cost$ X 1 B Discard<X/Card/card> | ValidTgts$ Opponent | Mode$ RevealYouChoose | NumCards$ X | SpellDescription$ Look at target opponent's hand and choose X cards from it. That player discards those cards.
A:SP$ Discard | Cost$ X 1 B Discard<X/Card/card> | ValidTgts$ Opponent | Mode$ RevealYouChoose | NumCards$ X | References$ X | SpellDescription$ Look at target opponent's hand and choose X cards from it. That player discards those cards.
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.DamagedBy | TriggerZones$ Battlefield | Execute$ TrigGainLife | TriggerDescription$ Whenever a creature dealt damage by CARDNAME this turn dies, you gain life equal to that creature's toughness.
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.DamagedBy | TriggerZones$ Battlefield | Execute$ TrigGainLife | TriggerDescription$ Whenever a creature dealt damage by CARDNAME this turn dies, you gain life equal to that creature's toughness.
SVar:TrigGainLife:AB$ GainLife | Cost$ 0 | Defined$ You | LifeAmount$ X
SVar:TrigGainLife:AB$ GainLife | Cost$ 0 | Defined$ You | LifeAmount$ X | References$ X
T:Mode$ Blocks | ValidCard$ Card.Self | ValidBlocked$ Creature.Green,Creature.White | DelayedTrigger$ DelTrigBlocked | TriggerDescription$ Whenever CARDNAME blocks or becomes blocked by a green or white creature, destroy that creature at end of combat.
T:Mode$ Blocks | ValidCard$ Card.Self | ValidBlocked$ Creature.Green,Creature.White | DelayedTrigger$ DelTrigBlocked | TriggerDescription$ Whenever CARDNAME blocks or becomes blocked by a green or white creature, destroy that creature at end of combat.
T:Mode$ Blocks | ValidCard$ Creature.Green,Creature.White | ValidBlocked$ Card.Self | DelayedTrigger$ DelTrigBlocker | Secondary$ True | TriggerDescription$ Whenever CARDNAME blocks or becomes blocked by a green or white creature, destroy that creature at end of combat.
T:Mode$ Blocks | ValidCard$ Creature.Green,Creature.White | ValidBlocked$ Card.Self | DelayedTrigger$ DelTrigBlocker | Secondary$ True | TriggerDescription$ Whenever CARDNAME blocks or becomes blocked by a green or white creature, destroy that creature at end of combat.
SVar:DelTrigBlocked:Mode$ Phase | Phase$ EndCombat | ValidPlayer$ Each | Execute$ TrigDestroyBlocked | TriggerDescription$ Destroy blocked creature at end of combat.
SVar:DelTrigBlocked:Mode$ Phase | Phase$ EndCombat | ValidPlayer$ Player | Execute$ TrigDestroyBlocked | TriggerDescription$ Destroy blocked creature at end of combat.
SVar:DelTrigBlocker:Mode$ Phase | Phase$ EndCombat | ValidPlayer$ Each | Execute$ TrigDestroyBlocker | TriggerDescription$ Destroy blocking creature at end of combat.
SVar:DelTrigBlocker:Mode$ Phase | Phase$ EndCombat | ValidPlayer$ Player | Execute$ TrigDestroyBlocker | TriggerDescription$ Destroy blocking creature at end of combat.
Oracle:Cumulative upkeep-Put a -1/-1 counter on Aboroth. (At the beginning of your upkeep, put an age counter on this permanent, then sacrifice it unless you pay its upkeep cost for each age counter on it.)
A:SP$ Destroy | Cost$ B G | ValidTgts$ Permanent.nonLand+cmcLE3 | TgtPrompt$ Select target nonland permanent with converted mana cost 3 or less | SpellDescription$ Destroy target nonland permanent with converted mana cost 3 or less.
A:SP$ LoseLife | Cost$ 6 B | ValidTgts$ Player | TgtPrompt$ Select a player | LifeAmount$ 4 | SubAbility$ DBGainLife | SpellDescription$ Target player loses 4 life and you gain 4 life.
A:SP$ LoseLife | Cost$ 6 B | ValidTgts$ Player | TgtPrompt$ Select a player | LifeAmount$ 4 | SubAbility$ DBGainLife | SpellDescription$ Target player loses 4 life and you gain 4 life.
SVar:DBGainLife:DB$GainLife | Defined$ You | LifeAmount$ 4
SVar:DBGainLife:DB$GainLife | Defined$ You | LifeAmount$ 4
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigDestroy | TriggerDescription$ When CARDNAME dies, destroy all creatures blocking or blocked by it. They can't be regenerated.
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigDestroy | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies, destroy all creatures blocking or blocked by it. They can't be regenerated.
A:SP$ GainLife | Cost$ 3 W | LifeAmount$ 5 | SpellDescription$ Choose one - You gain 5 life;
A:SP$ GainLife | Cost$ 3 W | LifeAmount$ 5 | SpellDescription$ Choose one - You gain 5 life;
A:SP$ PreventDamage | Cost$ 3 W | ValidTgts$ Creature | TgtPrompt$ Select target creature | Amount$ 5 | SpellDescription$ or prevent the next 5 damage that would be dealt to target creature this turn.
A:SP$ PreventDamage | Cost$ 3 W | ValidTgts$ Creature | TgtPrompt$ Select target creature | Amount$ 5 | SpellDescription$ or prevent the next 5 damage that would be dealt to target creature this turn.
A:SP$ GainLife | Cost$ 5 W | PrecostDesc$ Entwine | CostDesc$ 2 | LifeAmount$ 5 | SpellDescription$ (Choose both if you pay the entwine cost.) | SubAbility$ DBPreventDamage
A:SP$ GainLife | Cost$ 5 W | PrecostDesc$ Entwine | CostDesc$ 2 | LifeAmount$ 5 | NonBasicSpell$ True | SpellDescription$ (Choose both if you pay the entwine cost.) | SubAbility$ DBPreventDamage
R:Event$ Draw | ActiveZones$ Battlefield | ValidPlayer$ You | ReplaceWith$ AbundantChoice | Optional$ True | Description$ If you would draw a card, you may instead choose land or nonland and reveal cards from the top of your library until you reveal a card of the chosen kind. Put that card into your hand and put all other cards revealed this way on the bottom of your library in any order.
Oracle:If you would draw a card, you may instead choose land or nonland and reveal cards from the top of your library until you reveal a card of the chosen kind. Put that card into your hand and put all other cards revealed this way on the bottom of your library in any order.
A:SP$ Attach | Cost$ G | ValidTgts$ Land | AILogic$ Pump
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ FreeCard | TriggerDescription$ When CARDNAME enters the battlefield, draw a card.
SVar:FreeCard:DB$Draw | Cost$ 0 | Defined$ You | NumCards$ 1
S:Mode$ Continuous | Affected$ Card.EnchantedBy | AddAbility$ AbundantGrowthTap | Description$ Enchanted land has "T: Add one mana of any color to your mana pool."
SVar:AbundantGrowthTap:AB$ Mana | Cost$ T | Produced$ Any | SpellDescription$ Add one mana of any color to your mana pool.
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigSac | TriggerDescription$ When CARDNAME is put into a graveyard from the battlefield, each player sacrifices a creature.
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigSac | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME is put into a graveyard from the battlefield, each player sacrifices a creature.
SVar:TrigSac:AB$Sacrifice | Cost$ 0 | SacValid$ Creature | Defined$ Each
SVar:TrigSac:AB$Sacrifice | Cost$ 0 | SacValid$ Creature | Defined$ Each
A:AB$ DealDamage | Cost$ B T | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ X | SubAbility$ DBTap | SpellDescription$ Tap target creature. CARDNAME deals damage equal to CARDNAME's power to that creature.
A:AB$ DealDamage | Cost$ B T | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumDmg$ X | SubAbility$ DBTap | References$ X | SpellDescription$ Tap target creature. CARDNAME deals damage equal to CARDNAME's power to that creature.
Text:When Academy Rector is put into a graveyard from the battlefield, you may exile it. If you do, search your library for an enchantment card and put that card onto the battlefield. Then shuffle your library.
Text:no text
PT:1/2
PT:1/2
T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Battlefield | Destination$ Graveyard | Execute$ TrigExile | OptionalDecider$ TriggeredCardController | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies, you may exile it. If you do, search your library for an enchantment card and put that card onto the battlefield. Then shuffle your library.
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigChangeZone | TriggerDescription$ When CARDNAME enters the battlefield, you may put an Aura card from your hand onto the battlefield attached to Academy Researchers.
A:SP$ Pump | Cost$ 3 G G | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ +X | NumDef$ +X | SpellDescription$ Target creature gets +X/+X until end of turn, where X is the highest converted mana cost among permanents you control.
A:SP$ Pump | Cost$ 3 G G | ValidTgts$ Creature | TgtPrompt$ Select target creature | NumAtt$ X | NumDef$ X | References$ X | SpellDescription$ Target creature gets +X/+X until end of turn, where X is the highest converted mana cost among permanents you control.
A:SP$ Draw | Cost$ 1 U | Defined$ You | NumCards$ 1 | SubAbility$ DBDraw | SpellDescription$ Draw a card, then draw cards equal to the number of cards named CARDNAME in all graveyards.
A:SP$ Draw | Cost$ 1 U | Defined$ You | NumCards$ 1 | SubAbility$ DBDraw | SpellDescription$ Draw a card, then draw cards equal to the number of cards named CARDNAME in all graveyards.
SVar:DBDraw:DB$Draw | Defined$ You | NumCards$ X
SVar:DBDraw:DB$Draw | Defined$ You | NumCards$ X | References$ X
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDestroy | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may destroy target Equipment.
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigDestroy | OptionalDecider$ You | TriggerDescription$ When CARDNAME enters the battlefield, you may destroy target Equipment.
Oracle:{4}, {T}: Whenever target creature deals combat damage to a non-Wall creature this turn, destroy that non-Wall creature. When the targeted creature leaves the battlefield this turn, sacrifice Acidic Dagger. Activate this ability only before blockers are declared.
Oracle:Deathtouch (Any amount of damage this deals to a creature is enough to destroy it.)\nWhen Acidic Slime enters the battlefield, destroy target artifact, enchantment, or land.
Oracle:Deathtouch (Any amount of damage this deals to a creature is enough to destroy it.)\nWhen Acidic Slime enters the battlefield, destroy target artifact, enchantment, or land.
S:Mode$ Continuous | Affected$ Sliver | AddAbility$ Damage | Description$ All Slivers have "2, Sacrifice this permanent: This permanent deals 2 damage to target creature or player."
S:Mode$ Continuous | Affected$ Sliver | AddAbility$ Damage | Description$ All Slivers have "2, Sacrifice this permanent: This permanent deals 2 damage to target creature or player."
SVar:Damage:AB$DealDamage | Cost$ 2 Sac<1/CARDNAME> | ValidTgts$ Creature,Player | NumDmg$ 2 | TgtPrompt$ Select a target creature or player. | SpellDescription$ CARDNAME deals 2 damage to target creature or player.
SVar:Damage:AB$DealDamage | Cost$ 2 Sac<1/CARDNAME> | Tgt$ TgtCP | NumDmg$ 2 | SpellDescription$ CARDNAME deals 2 damage to target creature or player.
A:SP$ DealDamage | Cost$ 2 R | Defined$ You | NumDmg$ X | SubAbility$ DBDamageOpp | SpellDescription$ CARDNAME deals damage to each player equal to the number of lands he or she controls.
A:SP$ DealDamage | Cost$ 2 R | Defined$ You | NumDmg$ X | SubAbility$ DBDamageOpp | References$ X | SpellDescription$ CARDNAME deals damage to each player equal to the number of lands he or she controls.
SVar:DBDamageOpp:DB$DealDamage | Defined$ Opponent | NumDmg$ Y
SVar:DBDamageOpp:DB$DealDamage | Defined$ Opponent | NumDmg$ Y | References$ Y
A:AB$ DealDamage | Cost$ 1 T | NumDmg$ 1 | ValidTgts$ Creature,Player | TgtPrompt$ Select target creature or player | SubAbility$ SquirrelTokenCtrl | SpellDescription$ CARDNAME deals 1 damage to target creature or player. That creature's controller or that player puts a 1/1 green Squirrel creature token onto the battlefield.
Oracle:{1}, {T}: Acorn Catapult deals 1 damage to target creature or player. That creature's controller or that player puts a 1/1 green Squirrel creature token onto the battlefield.
A:SP$ GainControl | Cost$ 3 PR PR | ValidTgts$ Creature.YouDontCtrl | TgtPrompt$ Select target creature an opponent controls. | LoseControl$ EOT | Untap$ True | AddKWs$ Haste | SpellDescription$ Gain control of target creature an opponent controls until end of turn. Untap that creature. It gains haste until end of turn.
A:SP$ GainControl | Cost$ 3 PR PR | ValidTgts$ Creature.OppCtrl | TgtPrompt$ Select target creature an opponent controls. | LoseControl$ EOT | Untap$ True | AddKWs$ Haste | SpellDescription$ Gain control of target creature an opponent controls until end of turn. Untap that creature. It gains haste until end of turn.
A:SP$ Repeat | Cost$ 3 B B | RepeatSubAbility$ DBDig | RepeatOptional$ True | StackDescription$ Reveal the top card of your library and put that card into your hand. You lose life equal to its converted mana cost. You may repeat this process any number of times. | SpellDescription$ Reveal the top card of your library and put that card into your hand. You lose life equal to its converted mana cost. You may repeat this process any number of times.
Oracle:Reveal the top card of your library and put that card into your hand. You lose life equal to its converted mana cost. You may repeat this process any number of times.
A:AB$ Effect | Cost$ T | Name$ Adarkar Valkyrie Effect | ValidTgts$ Creature.Other | TgtPrompt$ Select target creature other than Adarkar Valkyrie | Triggers$ TrigChangesZone | SVars$ TrigChangeZone | References$ TrigChangesZone,TrigChangeZone | RememberObjects$ Targeted | SpellDescription$ When target creature other than CARDNAME dies this turn, return that card to the battlefield under your control.
SVar:TrigChangesZone:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.IsRemembered | Execute$ TrigChangeZone | TriggerDescription$ If the targeted creature of Adarkar Valkyrie dies this turn, return it to the battlefield and you gain control of it.
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Land.YouCtrl | TriggerZones$ Battlefield | OptionalDecider$ You | Execute$ TrigExile | TriggerDescription$ Landfall - Whenever a land enters the battlefield under your control, you may exile target nonland permanent other than CARDNAME.
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Land.YouCtrl | TriggerZones$ Battlefield | OptionalDecider$ You | Execute$ TrigExile | TriggerDescription$ Landfall - Whenever a land enters the battlefield under your control, you may exile target nonland permanent other than CARDNAME.
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigReturn | TriggerDescription$ When CARDNAME leaves the battlefield, return all cards exiled with it to the battlefield under their owners' control.
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigReturn | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME leaves the battlefield, return all cards exiled with it to the battlefield under their owners' control.
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Land.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ Landfall - Whenever a land enters the battlefield under your control, equipped creature gets +2/+2 until end of turn.
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Land.YouCtrl | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ Landfall - Whenever a land enters the battlefield under your control, equipped creature gets +2/+2 until end of turn.
A:SP$ Dig | Cost$ 2/U 2/U 2/U | DigNum$ 4 | ChangeNum$ 1 | SubAbility$ Dig2 | ConditionCheckSVar$ X | ConditionSVarCompare$ LEY | References$ X,Y | SpellDescription$ Look at the top five cards of your library. If you control more creatures than each other player, put two of those cards into your hand. Otherwise, put one of them into your hand. Then put the rest on the bottom of your library in any order.
Oracle:({2/U} can be paid with any two mana or with {U}. This card's converted mana cost is 6.)\nLook at the top five cards of your library. If you control more creatures than each other player, put two of those cards into your hand. Otherwise, put one of them into your hand. Then put the rest on the bottom of your library in any order.
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPump | TriggerDescription$ When CARDNAME enters the battlefield, another target permanent is indestructible for as long as you control CARDNAME. (Effects that say "destroy" don't destroy that permanent. An indestructible creature can't be destroyed by damage.)
Oracle:Flying\nWhen Aegis Angel enters the battlefield, another target permanent is indestructible for as long as you control Aegis Angel. (Effects that say "destroy" don't destroy that permanent. An indestructible creature can't be destroyed by damage.)
S:Mode$ Continuous | EffectZone$ All | CharacteristicDefining$ True | SetPower$ Y | SetToughness$ Y | References$ Y | Description$ CARDNAME's power and toughness are each equal to the number of cards in your hand.
K:Suspend:X:XCantBe0 X 3 U
T:Mode$ CounterRemoved | ValidCard$ Card.Self | TriggerZones$ Exile | CounterType$ TIME | Execute$ TrigDraw | TriggerDescription$ Whenever a time counter is removed from CARDNAME while it's exiled, draw a card.
SVar:TrigDraw:DB$ Draw | NumCards$ 1 | Defined$ You
Oracle:Aeon Chronicler's power and toughness are each equal to the number of cards in your hand.\nSuspend X-{X}{3}{U}. X can't be 0. (Rather than cast this card from your hand, you may pay {X}{3}{U} and exile it with X 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. It has haste.)\nWhenever a time counter is removed from Aeon Chronicler while it's exiled, draw a card.
A:SP$ Destroy | Cost$ 2 G | ValidTgts$ Creature.withFlying | TgtPrompt$ Select target creature with flying | SubAbility$ NaturalLife | SpellDescription$ Destroy target creature with flying. You gain 2 life
SVar:NaturalLife:DB$GainLife | Defined$ You | LifeAmount$ 2
A:AB$ DealDamage | Cost$ Sac<1/CARDNAME> | ValidTgts$ Creature.withFlying | TgtPrompt$ Select target creature with flying | NumDmg$ X | SpellDescription$ CARDNAME deals damage equal to its power to target creature with flying.
A:AB$ DealDamage | Cost$ Sac<1/CARDNAME> | ValidTgts$ Creature.withFlying | TgtPrompt$ Select target creature with flying | NumDmg$ X | References$ X | SpellDescription$ CARDNAME deals damage equal to its power to target creature with flying.
T:Mode$ SpellCast | ValidCard$ Creature | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ Whenever a player casts a creature spell, that player sacrifices a permanent unless he or she pays 1.
T:Mode$ SpellCast | ValidCard$ Creature | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ Whenever a player casts a creature spell, that player sacrifices a permanent unless he or she pays 1.
A:SP$ ChangeZone | Cost$ 1 U | ValidTgts$ Creature | TargetMin$ 0 | TargetMax$ X | TgtPrompt$ Select target creature | Origin$ Battlefield | Destination$ Hand | SpellDescription$ Return up to X target creatures to their owners' hands, where X is one plus the number of cards named CARDNAME in all graveyards as you cast CARDNAME.
A:SP$ ChangeZone | Cost$ 1 U | ValidTgts$ Creature | TargetMin$ 0 | TargetMax$ X | TgtPrompt$ Select target creature | Origin$ Battlefield | Destination$ Hand | References$ X | SpellDescription$ Return up to X target creatures to their owners' hands, where X is one plus the number of cards named CARDNAME in all graveyards as you cast CARDNAME.
T:Mode$ Blocks | ValidCard$ Card.Self | ValidBlocked$ Creature | DelayedTrigger$ DelayedTrig | TriggerDescription$ Whenever CARDNAME blocks a creature, return that creature to its owner's hand at end of combat.
T:Mode$ Blocks | ValidCard$ Card.Self | ValidBlocked$ Creature | DelayedTrigger$ DelayedTrig | TriggerDescription$ Whenever CARDNAME blocks a creature, return that creature to its owner's hand at end of combat.
SVar:DelayedTrig:Mode$ Phase | Phase$ EndCombat | ValidPlayer$ Each | Execute$ TrigBounce | TriggerDescription$ Return blocked creature to its owner's hand at end of combat.
SVar:DelayedTrig:Mode$ Phase | Phase$ EndCombat | ValidPlayer$ Player | Execute$ TrigBounce | TriggerDescription$ Return blocked creature to its owner's hand at end of combat.
A:SP$ ChangeZone | Cost$ 3 G U | ValidTgts$ Creature | TgtPrompt$ Select target creature | Origin$ Battlefield | Destination$ Hand | SubAbility$ TrigToken | SpellDescription$ Return target creature to its owner's hand. Put X 1/1 green Saproling creature tokens onto the battlefield, where X is that creature's converted mana cost.
A:SP$ ChangeZone | Cost$ 3 G U | ValidTgts$ Creature | TgtPrompt$ Select target creature | Origin$ Battlefield | Destination$ Hand | SubAbility$ TrigToken | SpellDescription$ Return target creature to its owner's hand. Put X 1/1 green Saproling creature tokens onto the battlefield, where X is that creature's converted mana cost.
#X will be the Converted Mana Cost of the target of AEther Mutation
#X will be the Converted Mana Cost of the target of AEther Mutation
SVar:TrigToken:DB$Token | Cost$ 0 | TokenAmount$ X | TokenName$ Saproling | TokenTypes$ Creature,Saproling | TokenOwner$ You | TokenColors$ Green | TokenPower$ 1 | TokenToughness$ 1
SVar:TrigToken:DB$Token | Cost$ 0 | TokenAmount$ X | TokenName$ Saproling | TokenTypes$ Creature,Saproling | TokenOwner$ You | TokenColors$ Green | TokenPower$ 1 | TokenToughness$ 1 | References$ X
A:AB$ ChangeZone | Cost$ T | Origin$ Hand | Destination$ Battlefield | ChangeType$ Creature.cmcEQX+YouCtrl | ChangeNum$ 1 | OptionalDecider$ You | SpellDescription$ You may put a creature card with converted mana cost equal to the number of charge counters on CARDNAME from your hand onto the battlefield.
A:AB$ ChangeZone | Cost$ T | Origin$ Hand | Destination$ Battlefield | ChangeType$ Creature.cmcEQX+YouCtrl | ChangeNum$ 1 | OptionalDecider$ You | References$ X | SpellDescription$ You may put a creature card with converted mana cost equal to the number of charge counters on CARDNAME from your hand onto the battlefield.
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | OptionalDecider$ You | Execute$ TrigPutCounter | TriggerDescription$ At the beginning of your upkeep, you may put a charge counter on CARDNAME.
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | OptionalDecider$ You | Execute$ TrigPutCounter | TriggerDescription$ At the beginning of your upkeep, you may put a charge counter on CARDNAME.
Oracle:When AEthersnipe enters the battlefield, return target nonland permanent to its owner's hand.\nEvoke {1}{U}{U} (You may cast this spell for its evoke cost. If you do, it's sacrificed when it enters the battlefield.)
Oracle:When AEthersnipe enters the battlefield, return target nonland permanent to its owner's hand.\nEvoke {1}{U}{U} (You may cast this spell for its evoke cost. If you do, it's sacrificed when it enters the battlefield.)
T:Mode$Phase | Phase$ Upkeep | WerewolfTransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if no spells were cast last turn, transform CARDNAME.
Oracle:At the beginning of each upkeep, if no spells were cast last turn, transform Afflicted Deserter.
ALTERNATE
Name:Werewolf Ransacker
ManaCost:no cost
Colors:red
Types:Creature Werewolf
Text:no text
PT:5/4
T:Mode$ Transformed | ValidCard$ Card.Self | Execute$ TrigDestroy | OptionalDecider$ You | TriggerDescription$ Whenever this creature transforms into CARDNAME, you may destroy target artifact. If that artifact is put into a graveyard this way, CARDNAME deals 3 damage to that artifact's controller
T:Mode$Phase | Phase$ Upkeep | WerewolfUntransformCondition$ True | TriggerZones$ Battlefield | Execute$ TrigTransform | TriggerDescription$ At the beginning of each upkeep, if a player cast two or more spells last turn, transform CARDNAME.
Oracle:Whenever this creature transforms into Werewolf Ransacker, you may destroy target artifact. If that artifact is put into a graveyard this way, Werewolf Ransacker deals 3 damage to that artifact's controller.\nAt the beginning of each upkeep, if a player cast two or more spells last turn, transform Werewolf Ransacker.
A:AB$ ChangeZone | Cost$ T | Origin$ Graveyard | Destination$ Battlefield | GainControl$ True | TgtPrompt$ Choose target creature card in your opponent's graveyard | ValidTgts$ Creature.YouDontCtrl+cmcLEX | ChangeNum$ 1 | SpellDescription$ Put target creature card from an opponent's graveyard onto the battlefield under your control if its converted mana cost is less than or equal to the number of Allies you control.
A:AB$ ChangeZone | Cost$ T | Origin$ Graveyard | Destination$ Battlefield | GainControl$ True | TgtPrompt$ Choose target creature card in your opponent's graveyard | ValidTgts$ Creature.YouDontCtrl | ConditionCheckSVar$ Y | ConditionSVarCompare$ LEX | ChangeNum$ 1 | References$ X,Y | SpellDescription$ Put target creature card from an opponent's graveyard onto the battlefield under your control if its converted mana cost is less than or equal to the number of Allies you control.
T:Mode$ LifeGained | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever you gain life, put that many +1/+1 counters on CARDNAME.
T:Mode$ LifeGained | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Whenever you gain life, put that many +1/+1 counters on CARDNAME.
T:Mode$ Blocks | ValidCard$ Card.Self | Execute$ TrigDebuff | TriggerDescription$ When CARDNAME blocks, it becomes a Bird Giant, and it loses defender.
Oracle:Defender (This creature can't attack.)\nFlying\nWhen Ageless Sentinels blocks, it becomes a Bird Giant, and it loses defender. (It's no longer a Wall. This effect lasts indefinitely.)
A:SP$ DamageAll | Cost$ 3 R R | ValidTgts$ Player | TgtPrompt$ Select target player | NumDmg$ 1 | RememberDamaged$ True | ValidCards$ Creature | ValidDescription$ each creature target player controls. | SubAbility$ DBAttack | SpellDescription$ CARDNAME deals 1 damage to each creature target player controls.
SVar:DBAttack:DB$ Pump | Defined$ Remembered | KW$ HIDDEN CARDNAME attacks each turn if able. | SubAbility$ DBCleanup | SpellDescription$ Each creature dealt damage this way attacks this turn if able.
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ First Strike & Trample | Description$ Enchanted creature has first strike and trample.
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ First Strike & Trample | Description$ Enchanted creature has first strike and trample.
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ EnchantedController | TriggerZones$ Battlefield | Execute$ TrigDestroy | isPresent$ Card.EnchantedBy+notAttackedThisTurn | TriggerDescription$ At the beginning of the end step of enchanted creature's controller, destroy that creature if it didn't attack this turn.
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ EnchantedController | TriggerZones$ Battlefield | Execute$ TrigDestroy | IsPresent$ Card.EnchantedBy+notAttackedThisTurn | TriggerDescription$ At the beginning of the end step of enchanted creature's controller, destroy that creature if it didn't attack this turn.
A:SP$ Destroy | Cost$ 3 B | ValidTgts$ Creature.nonBlack | TgtPrompt$ Select target nonblack creature | NoRegen$ True | SpellDescription$ Destroy target nonblack creature. It can't be regenerated. If CARDNAME was kicked, it deals damage equal to that creature's power to the creature's controller.
K:Kicker 1 R
A:SP$ Destroy | Cost$ 4 B R | ValidTgts$ Creature.nonBlack | TgtPrompt$ Select target nonblack creature | NoRegen$ True | SubAbility$ DBDamage | SpellDescription$ Kicker 1 R (You may pay an additional 1 R as you cast this spell.)
A:SP$ Destroy | Cost$ 3 B | ValidTgts$ Creature.nonBlack | TgtPrompt$ Select target nonblack creature | NoRegen$ True | SubAbility$ DBDamage | SpellDescription$ Destroy target nonblack creature. It can't be regenerated. If CARDNAME was kicked, it deals damage equal to that creature's power to the creature's controller.
SVar:DBDamage:DB$DealDamage | Cost$ 0 | Defined$ TargetedController | NumDmg$ X
SVar:DBDamage:DB$DealDamage | Cost$ 0 | Defined$ TargetedController | NumDmg$ X | References$ X | Condition$ Kicked | ConditionDescription$ If it was kicked,
A:AB$ DealDamage | Cost$ 1 R Sac<1/Creature.Goblin/Goblin creature> | Tgt$ TgtCP | NumDmg$ X | SpellDescription$ CARDNAME deals damage equal to the sacrificed creature's power to target creature or player.
A:AB$ DealDamage | Cost$ 1 R Sac<1/Creature.Goblin/Goblin creature> | Tgt$ TgtCP | NumDmg$ X | References$ X | SpellDescription$ CARDNAME deals damage equal to the sacrificed creature's power to target creature or player.
A:AB$ PutCounter | Cost$ AddCounter<1/LOYALTY> | Planeswalker$ True | CounterNum$ 1 | CounterType$ P1P1 | TargetMin$ 0 | TargetMax$ 1 | ValidTgts$ Creature | TgtPrompt$ Select target creature | SpellDescription$ Put a +1/+1 counter on up to one target creature.
A:AB$ Pump | Cost$ SubCounter<3/LOYALTY> | Planeswalker$ True | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ Flying & Double Strike | SpellDescription$ Target creature gains flying and double strike until end of turn.
A:AB$ Token | Cost$ SubCounter<8/LOYALTY> | Planeswalker$ True | TokenAmount$ X | References$ X | TokenName$ Cat | TokenTypes$ Creature,Cat | TokenOwner$ You | TokenColors$ White | TokenPower$ 2 | TokenToughness$ 2 | Ultimate$ True | SpellDescription$ Put X 2/2 white Cat creature tokens onto the battlefield, where X is your life total.
Oracle:[+1] Put a +1/+1 counter on up to one target creature.\n[-3] Target creature gains flying and double strike until end of turn.\n[-8] Put X 2/2 white Cat creature tokens onto the battlefield, where X is your life total.
A:AB$ GainLife | Cost$ AddCounter<1/LOYALTY> | LifeAmount$ 2 | Planeswalker$ True | SpellDescription$ You gain 2 life.
A:AB$ GainLife | Cost$ AddCounter<1/LOYALTY> | LifeAmount$ 2 | Planeswalker$ True | SpellDescription$ You gain 2 life.
A:AB$ PutCounterAll | Cost$ SubCounter<1/LOYALTY> | ValidCards$ Creature.YouCtrl | CounterType$ P1P1 | CounterNum$ 1 | Planeswalker$ True | SubAbility$ DBPumpAll | SpellDescription$ Put a +1/+1 counter on each creature you control. Those creatures gain vigilance until end of turn.
A:AB$ PutCounterAll | Cost$ SubCounter<1/LOYALTY> | ValidCards$ Creature.YouCtrl | CounterType$ P1P1 | CounterNum$ 1 | Planeswalker$ True | SubAbility$ DBPumpAll | SpellDescription$ Put a +1/+1 counter on each creature you control. Those creatures gain vigilance until end of turn.
A:AB$ Token | Cost$ SubCounter<6/LOYALTY> | TokenAmount$ 1 | TokenName$ Avatar | TokenTypes$ Creature,Avatar | TokenOwner$ You | TokenColors$ White | TokenPower$ X | TokenToughness$ X | TokenStaticAbilities$ Static | TokenSVars$ X | Planeswalker$ True | Ultimate$ True | SpellDescription$ Put a white Avatar creature token onto the battlefield. It has "This creature's power and toughness are each equal to your life total."
A:AB$ Token | Cost$ SubCounter<6/LOYALTY> | TokenAmount$ 1 | TokenName$ Avatar | TokenTypes$ Creature,Avatar | TokenOwner$ You | TokenColors$ White | TokenPower$ X | TokenToughness$ X | TokenStaticAbilities$ Static | TokenSVars$ X | Planeswalker$ True | Ultimate$ True | References$ X | SpellDescription$ Put a white Avatar creature token onto the battlefield. It has "This creature's power and toughness are each equal to your life total."
SVar:Static:Mode$ Continuous | SetPower$ X | SetToughness$ X | CharacteristicDefining$ True | Description$ This creature's power and toughness are each equal to your life total.
SVar:Static:Mode$ Continuous | SetPower$ X | SetToughness$ X | CharacteristicDefining$ True | Description$ This creature's power and toughness are each equal to your life total.
A:AB$ Pump | Cost$ Sac<1/Land> | NumAtt$ +2 | ActivationLimit$ 1 | SpellDescription$ CARDNAME gets +2/+0 until end of turn. Activate this ability only once each turn.
A:AB$ Pump | Cost$ Sac<1/Land> | NumAtt$ 2 | ActivationLimit$ 1 | SpellDescription$ CARDNAME gets +2/+0 until end of turn. Activate this ability only once each turn.
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigSac | TriggerDescription$ When CARDNAME is put into a graveyard from the battlefield, each player sacrifices a land.
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigSac | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME is put into a graveyard from the battlefield, each player sacrifices a land.
SVar:TrigSac:AB$Sacrifice | Cost$ 0 | SacValid$ Land | Defined$ Each
SVar:TrigSac:AB$Sacrifice | Cost$ 0 | SacValid$ Land | Defined$ Each
R:Event$ DamageDone | ValidSource$ Card.Red | ValidTarget$ Player | ReplaceWith$ DmgPlus1 | Description$ If a red source would deal damage to a player, it deals that much damage plus 1 to that player instead.
R:Event$ DamageDone | ActiveZones$ Battlefield | ValidSource$ Card.Red | ValidTarget$ Player | ReplaceWith$ DmgPlus1 | IsCombat$ False | Description$ If a red source would deal damage to a player, it deals that much damage plus 1 to that player instead.
R:Event$ DamageDone | ActiveZones$ Battlefield | ValidSource$ Card.Red | ValidTarget$ Player | ReplaceWith$ DmgPlus1Combat | IsCombat$ True | Secondary$ True | Description$ If a red source would deal damage to a player, it deals that much damage plus 1 to that player instead.
SVar:DmgPlus1:AB$DealDamage | Cost$ 0 | Defined$ ReplacedTarget | DamageSource$ ReplacedSource | NumDmg$ X | References$ X
SVar:DmgPlus1Combat:AB$DealDamage | Cost$ 0 | CombatDamage$ True | Defined$ ReplacedTarget | DamageSource$ ReplacedSource | NumDmg$ X | References$ X
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | OptionalDecider$ You | Execute$ TrigPumpAll | TriggerDescription$ Whenever CARDNAME or another Ally enters the battlefield under your control, you may have Ally creatures you control get +1/+0 until end of turn.
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | OptionalDecider$ You | Execute$ TrigPumpAll | TriggerDescription$ Whenever CARDNAME or another Ally enters the battlefield under your control, you may have Ally creatures you control get +1/+0 until end of turn.
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Ally.Other+YouCtrl | TriggerZones$ Battlefield | OptionalDecider$ You | Execute$ TrigPumpAll | Secondary$ True | TriggerDescription$ Whenever CARDNAME or another Ally enters the battlefield under your control, you may have Ally creatures you control get +1/+0 until end of turn.
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Ally.Other+YouCtrl | TriggerZones$ Battlefield | OptionalDecider$ You | Execute$ TrigPumpAll | Secondary$ True | TriggerDescription$ Whenever CARDNAME or another Ally enters the battlefield under your control, you may have Ally creatures you control get +1/+0 until end of turn.
A:SP$ ChooseColor | Cost$ 2 W | Defined$ You | AILogic$ MostProminentAttackers | SubAbility$ DBProtection | SpellDescription$ Choose a color. Creatures you control gain protection from the chosen color until end of turn.
A:SP$ ChooseColor | Cost$ 2 W | Defined$ You | AILogic$ MostProminentAttackers | SubAbility$ DBProtection | SpellDescription$ Choose a color. Creatures you control gain protection from the chosen color until end of turn.
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPutCounterAll | TriggerDescription$ At the beginning of your upkeep, put a +1/+1 counter on each creature each opponent controls.
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPutCounterAll | TriggerDescription$ At the beginning of your upkeep, put a +1/+1 counter on each creature each opponent controls.
K:CostChange:Player:More:W:Spell:white:All:NoSpecial:Desc|White spells you cast cost W more to cast.
S:Mode$ RaiseCost | ValidCard$ Card.White | Activator$ You | Type$ Spell | Color$ W | Amount$ 1 | Description$ White spells you cast cost W more to cast.
A:SP$ GainLife | Cost$ X W W | ValidTgts$ Player | TgtPrompt$ Select target player | LifeAmount$ X | PrecostDesc$ Choose one - | SpellDescription$ Target player gains X life;
A:SP$ GainLife | Cost$ X W W | ValidTgts$ Player | TgtPrompt$ Select target player | LifeAmount$ X | PrecostDesc$ Choose one - | References$ X | SpellDescription$ Target player gains X life;
A:SP$ PreventDamage | Cost$ X W W | ValidTgts$ Creature,Player | TgtPrompt$ Select target creature or player | Amount$ X | PrecostDesc$ or | SpellDescription$ prevent the next X damage that would be dealt to target creature or player this turn.
A:SP$ PreventDamage | Cost$ X W W | ValidTgts$ Creature,Player | TgtPrompt$ Select target creature or player | Amount$ X | PrecostDesc$ or | References$ X | SpellDescription$ prevent the next X damage that would be dealt to target creature or player this turn.
A:AB$ Pump | Cost$ T | NumAtt$ +2 | NumDef$ +2 | ValidTgts$ Creature | TgtPrompt$ Select target creature | PlayerTurn$ True | ActivationPhases$ Upkeep,Draw,Main1,BeginCombat | SpellDescription$ Target creature gets +2/+2 until end of turn. Activate this ability only during your turn, before attackers are declared.
A:AB$ Pump | Cost$ T | NumAtt$ 2 | NumDef$ 2 | ValidTgts$ Creature | TgtPrompt$ Select target creature | PlayerTurn$ True | ActivationPhases$ Upkeep,Draw,Main1,BeginCombat | SpellDescription$ Target creature gets +2/+2 until end of turn. Activate this ability only during your turn, before attackers are declared.
A:AB$ Mana | Cost$ T | Produced$ 1 | SpellDescription$ Add 1 to your mana pool.
A:AB$ Effect | Cost$ U G T | Name$ Refuge Effect | StaticAbilities$ QuickSpell | SpellDescription$ Until end of turn, you may cast nonland cards as though they had flash.
SVar:QuickSpell:Mode$ Continuous | Affected$ You | AddKeyword$ You may cast nonland cards as though they had flash. | Description$ You may cast nonland cards as though they had flash.
Text:Cast CARDNAME only during combat after blockers are declared.
A:SP$ FlipACoin | Cost$ 1 R | ValidTgts$ Creature | TgtPrompt$ Select target creature to gain +1/+1 | WinSubAbility$ AleatoryPump | LoseSubAbility$ AleatoryDraw | ActivationPhases$ Declare Blockers - Play Instants and Abilities->EndCombat | SpellDescription$ Flip a coin. If you win the flip, target creature gets +1/+1 until end of turn. Draw a card at the beginning of the next turn's upkeep.
Oracle:Cast Aleatory only during combat after blockers are declared.\nFlip a coin. If you win the flip, target creature gets +1/+1 until end of turn.\nDraw a card at the beginning of the next turn's upkeep.
A:SP$ ChangeZone | Cost$ 2 B B | Origin$ Stack | Destination$ Exile | SubAbility$ DBPutCounter | SpellDescription$ Exile CARDNAME with two scream counters on it. At the beginning of your upkeep, if CARDNAME is exiled with a scream counter on it, remove a scream counter from it. If there are no more scream counters on it, put it into your graveyard and each player returns all creature cards from his or her graveyard to the battlefield.
A:SP$ ChangeZone | Cost$ 2 B B | Origin$ Stack | Destination$ Exile | RememberChanged$ True | SubAbility$ DBPutCounter | SpellDescription$ Exile CARDNAME with two scream counters on it. At the beginning of your upkeep, if CARDNAME is exiled with a scream counter on it, remove a scream counter from it. If there are no more scream counters on it, put it into your graveyard and each player returns all creature cards from his or her graveyard to the battlefield.
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | IsPresent$ Card.Self+counters_EQ0_SCREAM | PresentZone$ Exile | Execute$ TrigMoveToGraveyard | TriggerZones$ Exile | Secondary$ True | TriggerDescription$ Put CARDNAME into your graveyard and return all creatures to the battlefield.
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | IsPresent$ Card.Self+counters_EQ0_SCREAM | PresentZone$ Exile | Execute$ TrigMoveToGraveyard | TriggerZones$ Exile | Secondary$ True | TriggerDescription$ Put CARDNAME into your graveyard and return all creatures to the battlefield.
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.