Fixes bug 740, intermittent ConcurrentModificationException
The alternative would be synchronizing all access to attackedEntities,
either at the method level or by using an internally synchronized
container like a Hashtable. But ConcurrentHashMap should give better
performance, since it only locks on writes not reads, and we read
attackedEntities a lot more often than we write to it.
Support ghost text in FTextFields and add "Search" ghost text for Card Catalog field and use in place of old "[New Deck]" logic
Standardize size of buttons and text fields a bit
Allow horizontal scrollbar for card tables in Deck Editor if preference for elastic columns not on
- "If CARDNAME would be put into a graveyard from anywhere, reveal CARDNAME and shuffle it into its owner's library instead." will now be turned into a proper replacement effect with a macro.
GameAction - legend rule and planeswalker rule are updated to match changes introduced with "Magic 2014 Core Set"
InputSelectCardsFromList also accepts any Collection<T>, not just List<T>
PlayerControllerHuman - chooseSingleCardForEffect tries to use InputSelectCardsFromList when all cards are in Battlefield or own hand
Attack/Block inputs use this bus to request sounds playback and UI updates
SoundSystem - remove mostly duplicated play/playSync calls - now there's one call with a single mandatory parameter.
corrected tabs into spaces somewhere in sound system (why can't Agetian just tune up his IDE?)
checkStateEffects - removed many calls leaving only the ones clearly stated by rules, in most cases calls replaced by checkStaticAbilities
in checkStateEffects - extracted some method performing certain state actions
Pump and PumpAll effects now fire update card stats event - for both start of effect and end of it.
Exalted effect - refactored to use scripted ability (the script is hardcoded)
toString routines for some events
- Made the AI roll the die for some of the planes multiple times (but only after casting spells).
- Some other optimizations and modifications of the plane AI hints.
- Added a way to specify the minimum turn in which it is viable to start rolling a planar die for a particular plane. Added this setting to some planes which require a bit more context on the battlefield before their Chaos rolls start to make sense.
- Added an AI profile variable specifying the minimum turn in which the AI will start rolling the planar die in general unless the plane has an override specified (default AI - on its second turn, reckless AI - on its first turn).
- Added the ability to differentiate between old-style and new-style (modern) foils. If a separate foil sheet called sprite_old_foils.png is available, that sheet will be used for pre-8th edition cards. If not available, the same sprite sheet (sprite_foils.png) will be used for all foils.
- Note that the edition files are not yet modified with the information about availability/style of foil cards. This has the nasty temporary side effect of disabling random foiling for all sets (to be remedied in the nearest future).
removed EndOfCombat and Cleanup classes as they don't add anything specific to base class. Base class Phase is no longer abstract, also it does not need reference to game instance any longer
Card: removed methods to test if card is attacking/blocking, because these properties are related to combat, not the card itself.
AiAttackController - no longer creates Combat. Instead it uses a provided instance and fills attackers there
ComputerUtilBlock.java became non-static class AiBlockController, also modifies the provided Combat instance
PhaseHandler - half-measures to handle close window during turn-based actions (like declare combatants)
getAllPossibleAbilites method moved from game to card
removed 5 calls to isHuman/Computer
AbilityUtils.resolve does not need extra parameter usedStack - Stack class can call finishResolving from its own code
HumanPlaySpellAbility - managed to simplify the code by groupping all prerequisites collection into a single exression
AiController.confirmAction - spread choices made for specific apis among their matching XxxxxAi classes - to avoid a huge switch and keep all related code in a single place.
GuiDisplayUtil - warped tutor functions in game.getAction.invoke() to run in aux game thread.
"Manual Breakpoint" - removed because EDT won't give accurate information on player zones.
input/InputAttack.java is initialized with combat instead of game (cosmtic change though)
CMatchUI stopAtPhase will use an existing method to get the needed checkBox
ComputerUtilMana - commented out is debug code
PhaseHandler: nextPhase & handleBeginPhase are called consequently, no observer updates happen between calls
GuiDisplayUtil: generate mana button caused wrong thread exception
VMessage - remove useless import
priorityAutoPass is executed even without switching to EDT
showMessage is executed for the current input of InputProxy, not the one passed as parameter
FThreads.invokeInNewThread is wrapped into InputQueue.invokeGameAction that may run action is same thread if it is not EDT
stop() method moved to sync'd inputs, asyncs have only pass()
pass() or stop() may be called only once per input presentation (once shown = one and only stop/pass)
* remove messagebox when computer plays first
* Mulligan input message now reads who is going first (if you go first you are asked to play or draw yet before mulligan)
- Added Sorin vs Tibalt, and Tibalt vs Sorin as examples of Challenges that force you to use a specific Deck. (They seemed to be the best duel deck compatibility for the AI).
When you chose a quest challenge from Home screen, you also get all extra creatures on battlefield
Deck generation now able to correctly generate decks of definite + random color
MyRandom uses SecureRandom
Removed special conditions from spellability/SpellAbilityCondition.java
adjusted visibility for a few methods
Zone: cotains(predicate<Card>) method added, still don't know if it's correct to put it there.
remove setKeywords from Player (the method was never referenced and has been added by checkstyle enforcing)
compare static abilities - a slight optimization
MagicStack is Iterable<SpellAbilityStackInstance>, get(i) methods removed, many invocations of size() replaced with isEmpty or iteration when appropriate/
GameActionUtil - some other methods inlined for being 2-lines long or used only once
MatchController is re-created each time you start a match (as it had been designed to do)
joined most calls setting up UI obsevers over a match into a single method
Match is started from EDT - that means issues with black screen instead of game launched should be gone now - players should get exceptions instead.
TriggerChangesZone - adding a new check on triggered card (for Tunnel Ignus)
Trigger - commented out requirementsCheck on triggered objects, 'cause they are specific for each trigger
ManaPool.payManaFromAbility does not return ManaCostBeingPaid - that means it does not create a new instance, but alters the one passed as parameter
a few mana-paying inputs: the player who is shown the input is taken from base class field, not from singletons
CommandList replaced with a plain list (though should better have used a stack, since the commandlist was adding items at index 0)
Phase - removed duplicate wrapper UntilYourNextTurn to same data as until(player)
removed imports,
ColorChanger - used List instead of ArrayList
Server: a dedicated packet for greeting
ClientStates may throw exceptions when malformed packets come.
If clientStates chain leaves a packet unhandled, then it will be handled in NetClient
* packets don't depend on serialization any longer (and they shouldn't since they are simple DTOs)
* support for multiple serialization types - add custom protocols when needed
* web client serialization protocol uses gSon
VCombat: !parentCell.getSelected() won't NPE any longer (unless if parentCell is null for that thread), moved most thread-unsafe actions from update() to ctor and populate
PhaseHandler: bCombat is AtomicBoolean to be retrieved correctly from any thread.
- SpellAbilities will now (again) stay on the stack until they are finished resolving, allowing ChangeTarget spells to redirect Counterspells to themselves
note: copy to new arraylist does not help against comodification problem. The only known to me solution is use classes from java.util.concurrent
Playarea redraw timeout increased to 50ms
intrinsic abilities renamed to unparsed ones,
getMultiKickerMagnitude is getKickerMagnitude, it returns 1 for simple Kickers now
Kicker syntax changed,
AltCost avaiable to check on triggers
HomeUI buttons get enabled/disabled to indicate server status
Server - clientstates form a chain of responsibility for packets processing
packets for autorization (no checks performed, used to get player's name)
InputPayManaBase descendants: showMessage may be safely executed after input is dismissed (select card leads to re-check of requirements and may result in done() call, so showMessage is undesired, but it was already planned)
InputProliferate moved to separate file
Reverted 20840
all calls to CMatchUI.setCard have to be performed from EDT, otherwise an exception will raise. - this fixes problems with Goblin Guides and Inquisition of Kozilek (and all others whose effects displayed a card in UI to confirm or choose from list)
Comet storm scripted, Strength of Tajuru scriptable.
possible side effect: AI can may become unable to cast spells with X in their cost. (see ComputerUtilMana.java:242)
InputPayManaOfCost now takes ManaCostBeingPaid as parameter
AbilityUtils - workaroud about StringUtils.isNumeric that returned false for negative numbers
input/InputSelectTargets.java doesn't ask for more targets if all damage (or other thing) has been already 'divided as you choose'
TargetSelection does not use cancel, it returns false instead
CostSacrifice - removed input, using a common one
other list-related costs use getDescriptiveType method from base class
InputPayManaExecuteCommands won't reset manaCost because the class is not reusable anyway.
set Morphs visible to player flippable on CPicture and CDetail
If you mouse over a card with SHIFT pressed, MatchUI will attempt to show you the other side of a card.
CardList has filter method to apply 2 filters sequentially
Untap: old inputs replaced with synchronized ones.
InputProxy - using an AtomicReference to hold current input, just in case.
ManaCost got a static factory method to get colorless mana costs.
Methods in GameActionPlay to carry extra mana paid from previous multikicker payment removed. Extra mana goes to pool and can be used from there.
- correctly load no_card.jpg when Forge is not run from a bundle
- use skinned "unknown" icon when icon not found instead of default card picture
- don't redo image resize when an image is resized to a size that is already in the cache, just under a different key
- The primary API for AI personalities is now in place. AI properties are implemented in forge.game.ai.AiProps and are retrieved via a call to one of AiController.getProperty, AiController.getIntProperty, or AiController.getBooleanProperty depending on the type of property (AI controller can be retrieved via a getAi() call on the AI player object). Each property can be assigned on a per-profile basis in res/ai/*.ai profile files. A profile can be selected in the game properties. For an example implementation of a property, see AI_MULLIGAN_THRESHOLD implemented in AiProps and retrieved in ComputerUtil.
- Currently there is one property only, but more are on the way. Everyone is also free to expand as necessary. Specific AI profiles for specific quest opponents will be implemented at a later date.
Improved GuiDialog.confirm to accept custom values for choice options
Also added default question icon to dialogs (may remove if it's too ugly)
decision-making about "where to put the card used to clash" moved to PlayerController* classes
Human uses GuiChoice.order to arrange cards to be put on top or bottom of library (that means less popping windows)
AI has a method in ComputerUtil to learn where to put a given card.
consolidate code in the gui downloader
turn autoscrolling back on when the import starts if the user had scrolled somewhere other than the bottom while analyzing
- add overwrite option to import dialog
- remove unused extra URLs for snow covered lands
- ensure fewer copies in the newest sets don't prevent us from finding a higher index card from a previous set
- define user/program/cache directories in NewConstants
- use directories where applicable
- merge lang and properties into constants
- create separate image lists for sealed products
- update howto document
- allow alternate file extensions for images
- a whole bunch of code cleanup
thrown away get/setUpdate methods
battlefield.getCards(false) will return R/O list of cards - might lead to exceptions if callers attempt to modify the method's result.
removed keyword 'CARDNAME is (color)' because this data is already contained in a mandatory field named 'color'
renamed postFactoryKeywords to setupKeywordedAbilities
generally 'setup' means 'make all changes to card yourself' and 'make' intends only creation of spellability, at least 'make'-methods always return one.
Card: dropped imageName field (which was commonly mixed up with imageFileName)
Starting cards for quest and challenges no longer use functions (CardToken helps a lot)
Quest challenges code: Token parsing remake (to produce CardRules instance and wrap it into CardToken)
some utility functions were moved closer to usage points
You may use SpellAiLogic.chkAIDrawback to test drawbacks of given ability only, or chkDrawbackWithSubs to do so for the whole list of ability and its subs
* (fixes for 19720 & 19724) CheckAiDrawback was already recursivelly checking every subability, so no special methods were required
* numerous fixes to make ApiType comparisons null-safe
* CommonXXX classes do not take SpellEffect and AILogic as separate parameters. These are obtained from ApiType instead
- no existing behavior is changed -- callers have to make the explicit choice to sort
- allow left-right arrow keys to switch lists when choosing order
- sort sideboard
- correctly manage current deck tab title so the '*' appears only when truly dirty
- ensure table selection color is correct even before the table has gained focus for the first time
- autoupdate shown tooltip when tables scroll
- fix NPE when starting draft mode game against a single opponent with a previously-drafted deck
- fix labels getting stuck with hovered highlight after their associated commands prevent them from getting the mouseExited event
- Initial commit of "TargetsWithSameController" (check the parent targets, might be used in Bioshift and Simic Guildmage in future)
- Added two Avatars: Sisters of Stone Death Avatar and Viridian Zealot Avatar
- Added some cards
- Added DiscardMeByOpp param and applied to relevant cards (I've prioritised from 1 - 3, 3 being most dangerous to discard, but priority checking isn't actually applied yet. Plan to expand when I have more free time).
adjustChangeZoneTarget moved back to ability/AbilityFactory.java (since called by Common[Spell|Ability|Drawback] classes' ctors)
resolve method and its auxiliary methods groupped in bottom part of AbilityUtils file
- unbreak ctrl/cmd+enter as text search filter shortcut
- add card to deck before removing from catalog to ensure selected card details show up properly
- prepare for editable restrictions
Unless syntax enriched: added UnlessResolveSubs parameter to indicate if subAbilities are resolved for paid and unpaid branches
SpellDesciptions from card scripts now may include variables
- can tab focus
- space/enter to select
- brighten on hover
- use previous "hover" border for focus indicator
- fix various layout and style bugs (e.g. too-short widths and missing hoverable properties)
- allow tab key to set focus to next component (e.g. prevent tables from swallowing tab and shift-tab)
- flicker-free reinstatement of current selection when table model data changes
setPaidList, beforePayManaAI, setAllReplacingObjects, hasReplacingObject, wasCancelled were never used (removed)
reduced visibility of setManaPart,
finalized setReplicateManaCost, setXManaCost, setIsMultiKicker, setIsReplicate, setIsCycling, setConditions, (set/add)OptionalAdditionalCosts since they were called by CardFactoryUtil only => all removed from WrappedAbility.java
- make color of listbox selection depend on listbox focus, not cell focus
- avoid NPE when attempting to start a challenge when there isn't one to start
this works around a quirky interaction between WrapLayout and MigLayout that was causing interior cells to be properly resized but the cells surrounding them would not be, resulting in widgets that would be too large or too small for their unupdated containing cells
CommonDrawback: wrote in a single line the complicated chkAIDrawback method
removed unused imports
CardUtil.getRandom replaced with Aggregates.random
getReflectableMana uses Set as collection, so it does not have to check for duplicates before adding new items.
united two CMC calculation methods (one was getCMC from card that read characteristics while other took more factors into account)
Some notes:
- Special rewards for normal duels should be extremely rare, mostly for very hard opponents, 1 special reward per opponent, and always a percentage chance of getting the special reward (preferably less than 50%) rather getting a guaranteed reward.
- In the interests of downward compatibility, it is possible to define the Card Reward either in the [quest] portion (like before) or the [metadata] portion of the dck file. (Duels do not have the [quest] portion but if the definition were simply moved from [quest] to [metadata], all current challenge files would have stopped working properly.)
GameActionUtil - uses common GuiDialog.confirm
CardFactoryLands - converted inlined class to nested
ChangeZoneEffect - removed stringbuilder wrapper (as it was not used anyway)
replaced isComputer/isHuman where it was clear and possible
- set focus on the catalog table when the deck editor opens so the arrow keys work immediately without having to click the mouse
- if multiple cards are selected, apply the add/remove operation to all of them, not just the first one
- hide the non-functional 'remove' buttons in draft mode
- protect against NPE when the cursor is hovering above a row that disappears just as swing is trying to get the tooltip
- add note to add button tooltip that the spacebar can be used as a shortcut
- added forge-specific spinner widget (FSpinner)
- allowed labels to have their toggle state read externally and added configuration to set whether the onClick command is executed on mouse button down or mouse button up (FLabel)
- added builder pattern to FTextField and autoset properties to common values
- fixed header comments in WrapLayout
- renamed DialogCustomFormat to the more generic DialogChooseSets since I use it now from the filters too; extended its functionality to run a specified command on ok button click
- removed Filters dockable panel
- added old filters functionality to the stats buttons above the catalog table (stats can no longer be removed via a preference setting)
- combined scattered metadata about the filters (e.g. icon, label, filter predicate) into a single enum
- rewrote filter utility functions to not have any side effects (they now use no global data/singletons)
- added "Owned" column to spell shop catalog, indicating number of cards already owned by player (can remove column with preference)
- don't count the "click" as a sort command when resizing a column
- exposed top-level main world custom format in QuestController -- other format-retrieving methods would be masked by the current world selection
- added utility fn to TextUtils to create a (locale-independent) Title out of an ENUM
- added a templated Pair<T, V> utility class for ad-hoc two-value parameter returning
- prevented invalid enum values in editor_preferred.xml from causing errors
* in abilityFactory target parsing code extracted as a single method
* due to getDefinedCards return type generalization, a lot of classes had to declare variables as List (not arraylist)
- saved quest data when pet settings are modified
- moved the selectedPets map from QuestController to QuestData (since it now gets persisted); also renamed it petSlots for clarity
- incremented the quest file format version
- added code to bring older file formats up to date
- finally, while researching how the data is saved, I noticed that saveData() can be called from multiple threads. I made the method synchronized to prevent file corruption
- adds tooltips for the filter checkboxes (issue 657)
- ensures the filter checkboxes are always in the same order
- puts all labels and checkboxes in "official" order from the mtg rules book:
color order: WHITE, BLUE, BLACK, RED, GREEN, COLORLESS, MULTICOLOR
type order: LAND, ARTIFACT, CREATURE, ENCHANTMENT, PLANESWALKER, INSTANT, SORCERY
* Costs: joined all CostGainLife implementations. Syntax is: GainLife<LifeAmount/Player.Selector/[cntPlayers|*]> asterisk in last parameter means "all players".
* Changed a lot of methods to pass GameState as a parameter rather than get it from Singletons.*
*Added Planes
Academy at Tolaria West
Fields of Summer
Goldmeadow
Krosa
Lethe Lake
Llanowar
Panopticon
Raven's Run
The Fourth Sphere
The Great Forest
The Hippodrome
*Added phenomenon Mutual Epiphany
* sideboard checked independently of maximum amount of same cards in deck
* schemes and planes generation code in GameNew.java now demands a player.
- toForgeCardList method removed
* Decks have no extra sections for variants (sideboard works in most cases)
* Deck Format restrictions are in a separate class not related to GameType
+ DeckSection has its own toString overload
+ DualListBox operates CardPrinted properly (sideboarding dialog uses cardprinted instances)
+ ItemPool.remove method returns true if any elements were removed.
Added ForgetChosen parameter to ChooseCardEffect to remove chosen card from host card remembered object list.
Added Mandatory parameter to ChooseCardEffect.
Added The Mimeoplasm.
- Vanguard:Added Sakashima the Impostor Avatar
- Added Mandatory$ True to Parallax Nexus
- Made Borrowing 100000 Arrows and Theft of Dreams ready for multiplayer
- Added TargetsWithDifferentControllers param for targeting with different controllers (should supercede TargetsFromDifferentZone in most cases as it works with player lists instead of using getOpponent)
- Reverted LocalCount in favor of RepeatPlayer in RepeatEach (Molten Psyche and Netherborn Phalanx)
- Converted Myojin of Night's Reach and Imprison This Insolent Wretch to multiplayer scripts
* Added Eye of the Storm, Neurok Transmuter, Overwhelming Instinct and Total War
* Vanguard: Added Phage the Untouchable Avatar and Prodigal Sorcerer Avatar
* Scheme: Added My Undead Horde Awakens
World-specific format enforcing and starting world selection will be added in later stages. Also, something has to be done about locked (non-repeatabled) challenges so they do not end up locking other challenges in different worlds.
- Added LocalCount to resolve of DamageDealEffect and DrawEffect which allows calculated variables to be calculated per player (should allow a few more cards to be made multiplayer compatible)
- Fixed ChangeZoneAll so that it works correctly when Defined returns more than one player
- Small tweak to Triggers to allow them to refire Statics when they finish resolving (useful for Conving Mirage to actually grant its ability immediately upon resolving)
Realms Befitting My Majesty
Roots of All Evil
The Iron Guardian Stirs
The Very Soil Shall Shake
Which of You Burns Brightest?
So now we have enough schemes to create legal scheme decks :D (Two of each we have,but still)
*Made exiting the scheme editor dump you at the archenemy home screen.
*Made scheme deck editor save correctly.
EventBus added to GameState to properly route the ingame events to Sound system, game log and remote players (when time comes)
AudioClips are cached at first request, this may lead to slowdowns (will precache if this is an issue)
Most calls to sound system are still preformed directly, with a few only converted to events
*Variants: Moved effects and emblems to command zone.
*Variants: Added a bunch of Vanguard cards (Thanks, Marc!)
*Variants: Added a Vanguard home screen.
*Variants: Created command zone view.
*Variants: Moved effects and emblems to command zone.
*Variants: Added a bunch of Vanguard cards (Thanks, Marc!)
*Variants: Added a Vanguard home screen.
(Quest icons used created by Teekatas, from his Legendora set http://raindropmemory.deviantart.com)
11572 cards in total.
Forge Beta: 09-27-2013 ver 1.5.0
Added Return to Ravnica Guild Sealed Deck mode. Start a new sealed deck game, choose "Block / Set" and then scroll down until you find "Return to Ravnica Guild Sealed (block)". Select that. From the "Choose Set Combination" menu, select the first option. You will be prompted twice to pick your guild (once for the promo cards, once for the actual booster - you should choose the same guild both times). After that you're ready to go.
13316 cards in total.
A bug for the new set unlocking code is now fixed. Before the fix, you could unlock all you wanted, but the unlocking info and the cards you got would never be saved! Fortunately, your paid money wouldn't be saved either.
The Return to Ravnica set pictures are now available and you can download them using the Download LQ Set Picures button. The RtR token generating cards have been updated with set specific images.
-------------
Release Notes
-------------
The Targeting Overlay has been fixed and re-enabled. It now correctly shows the targeting arcs in cases when it previously showed them in the wrong direction. The match UI is properly refreshed when the targeting arcs are switched on/off. The defunct "mouseover-only" mode is currently disabled (it crashes Forge, difficult to fix).
- Commander -
The Commander gaming mode has been added and is located in the Variant view. This is a work in progress and is not finished at this time. You are invited to play test this variant.
We have added the Conspire and the Protection mechanics for this version.
When choosing cards, sources, etc. using a list box, the currently selected card will now be visually highlighted on the playfield (to better distinguish between e.g. three different cards with the same name on the playfield). Now the visual highlighting of a card will also work when declaring the order of blockers.
- Switch Theme/Skin Without Restart -
You can now switch between themes/skins from any screen without restarting, using either Layout > Theme on main menu or combo box on Preferences page of Home screen
Forge now has a sound effect system in place. Several basic sounds are linked to the code now and will be enabled when "Enable Sounds" option is checked in the preferences. It supports WAV and AU file formats. No sound files are included with this commit and must be submitted separately. For the time being you will need to add your own sound files.
Currently supported sound effects are:
- Card Overlays -
Card overlays can be switched on/off during a match via the Game menu. Added new card id overlay. Overlays are now always displayed regardless of card image size (if switched on).
AddCounter - add_counter.wav - triggered when a counter is added to a permanent.
Artifact - artifact.wav - triggered when an artifact is played.
ArtifactCreature - artifact_creature.wav - triggered when an artifact creature is played.
BlackLand - black_land.wav - triggered when a land with the "B" mana ability is played.
BlueLand[*] - blue_land.wav - triggered when a land with the "U" mana ability is played.
Creature - creature.wav - triggered when a creature is played.
Damage - damage.wav - triggered when a creature is damaged.
Destroy - destroy.wav - triggered when a permanent is destroyed.
Discard - discard.wav - triggered when a player discards a card.
Draw - draw.wav - triggered when a player draws a card.
Enchantment - enchant.wav - triggered when an enchantment is played.
EndOfTurn - end_of_turn.wav - triggered at the end of turn.
Equip - equip.wav - triggered when an equipment is equipped.
FlipCoin - flip_coin.wav - triggered when a coin is flipped.
GreenLand - green_land.wav - triggered when a land with the "G" mana ability is played.
Instant - instant.wav - triggered when an instant is played.
LifeLoss - life_loss.wav - triggered when a player loses life.
LoseDuel[*] - lose_duel.wav - triggered when a player loses a duel.
ManaBurn - mana_burn.wav - triggered during a mana burn if the appropriate rule is enabled.
OtherLand - other_land.wav - triggered when a land with non-color mana abilities or any other land is played.
Planeswalker - planeswalker.wav - triggered when a planeswalker is played.
Poison - poison.wav - triggered when a player receives a poison counter.
RedLand - red_land.wav - triggered when a land with the "R" mana ability is played.
Regen - regeneration.wav - triggered when a creature is regenerated.
RemoveCounter - remove_counter.wav - triggered when a counter is removed from a permanent.
Sacrifice - sacrifice.wav - triggered when a permanent is sacrificed.
Sorcery - sorcery.wav - triggered when a sorcery is played.
Shuffle[*] - shuffle.wav - triggered when a player shuffles his deck.
Tap[*] - tap.wav - triggered when a permanent is tapped.
Untap - untap.wav - triggered when a permanent is untapped.
WhiteLand - white_land.wav - triggered when a land with the "W" mana ability is played.
WinDuel - win_duel.wav - triggered when a player wins the duel.
--
- Theros cards -
Forge now includes most of the new Theros cards. It may take a few days before these new card pictures become available for downloading via the "Download LQ Card Pictures" button. The LQ set pictures tend to take a few more weeks to process before they become available for downloading via the "Download LQ Set Pictures" button. Please be patient.
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.
- Forge now requires Java 7 -
Please update your Java runtime environment. At this point Forge versions 1.4.2 and above will no longer run under Java 6. Those who are using Mac OS should install the JDK version rather than the JRE version.
- The Mac OS X application -
At this time Forge now requires Java 7 and will no longer run under Java 6.
Unfortunately, the Mac OS X builder that we were using does not support Java 7. We hope to find and to use a different Mac OS X builder in order to continue releasing a Mac OS bundled application like we have in the past.
Currently, the windows/unix release of Forge includes a launcher file named "forge.command". Double click on the "forge.command" launcher command file and this will in turn launch the Forge jar file via the terminal application while increasing the Java heap space. This should be a temporary inconvenience.
---------
New Cards
---------
Blaze of Glory
Conundrum Sphinx
Hall of the Bandit Lord
Oath of Mages
Oath of Scholars
Personal Incarnation
Truth or Tale
Wort, the Raidmother
---------------
New Phenomenons
---------------
Interplanar Tunnel
----------
New Planes
----------
Stairs to Infinity
The Maelstrom
-----------
New Schemes
-----------
Rotted Ones, Lay Siege
The Dead Shall Serve
----------------
New Theros Cards
----------------
Abhorrent Overlord
Agent of Horizons
Agent of the Fates
Akroan Crusader
Akroan Hoplite
Akroan Horse
Anax and Cymede
Anger of the Gods
Anthousa, Setessan Hero
Anvilwrought Raptor
Aqueous Form
Arbor Colossus
Arbor Colossus
Arena Athlete
Artisan of Forms
Artisan's Sorrow
Ashen Rider
Ashiok, Nightmare Weaver
Asphodel Wanderer
Baleful Eidolon
Battlewise Hoplite
Battlewise Valor
Benthic Giant
Bident of Thassa
Blood-Toll Harpy
Boon of Erebos
Boon Satyr
Borderland Minotaur
Boulderfall
Bow of Nylea
Breaching Hippocamp
Bronze Sable
Burnished Hart
Cavalry Pegasus
Cavern Lampad
Cavern Lampad
Celestial Archon
Celestial Archon
Centaur Battlemaster
Chained to the Rocks
Chosen by Heliod
Chronicler of Heroes
Coastline Chimera
Colossus of Akros
Commune with the Gods
Coordinated Assault
Crackling Triton
Curse of the Swine
Cutthroat Maneuver
Dark Betrayal
Dauntless Onslaught
Deathbellow Raider
Decorated Griffin
Defend the Hearth
Destructive Revelry
Disciple of Phenax
Dissolve
Dragon Mantle
Elspeth, Sun's Champion
Ember Swallower
Enchantment Aura
Ephara's Warden
Erebos's Emissary
Erebos, God of the Dead
Evangel of Heliod
Fabled Hero
Fade into Antiquity
Fanatic of Mogis
Fate Foretold
Favored Hoplite
Fellhide Minotaur
Feral Invocation
Firedrinker Satyr
Flamecast Wheel
Flamespeaker Adept
Fleecemane Lion
Fleetfeather Sandals
Fleshmad Steed
Gift of Immortality
Glare of Heresy
Glare of Heresy
Gods Willing
Gray Merchant of Asphodel
Guardians of Meletis
Hammer of Purphoros
Heliod's Emissary
Heliod, God of the Sun
Hero's Downfall
Hopeful Eidolon
Horizon Chimera
Horizon Scholar
Hundred-Handed One
Hunt the Hunter
Hythonia the Cruel
Ill-Tempered Cyclops
Insatiable Harpy
Karametra's Acolyte
Keepsake Gorgon
Kragma Warcaller
Labyrinth Champion
Lagonna-Band Elder
Lash of the Whip
Leafcrown Dryad
Leafcrown Dryad
Leonin Snarecaster
Lightning Strike
Loathsome Catoblepas
Lost in a Labyrinth
March of the Returned
Master of Waves
Medomai the Ageless
Meletis Charlatan
Messenger's Speed
Minotaur Skullcleaver
Mistcutter Hydra
Mogis's Marauder
Nemesis of Mortals
Nessian Asp
Nighthowler
Nimbus Naiad
Nimbus Naiad
Nykthos, Shrine to Nyx
Nylea's Disciple
Nylea's Emissary
Nylea's Presence
Nylea, God of the Hunt
Observant Alseid
Observant Alseid
Omenspeaker
Opaline Unicorn
Ordeal of Erebos
Ordeal of Heliod
Ordeal of Nylea
Ordeal of Purphoros
Ordeal of Thassa
Peak Eruption
Phalanx Leader
Pharika's Cure
Pharika's Mender
Pheres-Band Centaurs
Polis Crusher
Polukranos, World Eater
Portent of Betrayal
Prescient Chimera
Priest of Iroas
Prognostic Sphinx
Prophet of Kruphix
Prowler's Helm
Purphoros's Emissary
Purphoros, God of the Forge
Pyxis of Pandemonium
Rage of Purphoros
Rageblood Shaman
Ray of Dissolution
Read the Bones
Reaper of the Wilds
Rescue from the Underworld
Returned Centaur
Returned Phalanx
Reverent Hunter
Satyr Hedonist
Satyr Piper
Satyr Rambler
Scholar of Athreos
Sea God's Revenge
Sealock Monster
Sedge Scorpion
Sentry of the Underworld
Setessan Battle Priest
Setessan Griffin
Shipbreaker Kraken
Shipwreck Singer
Shredding Winds
Silent Artisan
Sip of Hemlock
Soldier of the Pantheon
Spark Jolt
Spear of Heliod
Spearpoint Oread
Spellheart Chimera
Staunch-Hearted Warrior
Steam Augury
Stoneshock Giant
Stormbreath Dragon
Stymied Hopes
Swan Song
Sylvan Caryatid
Temple of Abandon
Temple of Deceit
Temple of Mystery
Temple of Silence
Temple of Triumph
Thassa's Bounty
Thassa's Emissary
Thassa, God of the Sea
Time to Feed
Titan of Eternal Fire
Titan's Strength
Tormented Hero
Traveling Philosopher
Triad of Fates
Triton Fortune Hunter
Triton Shorethief
Triton Tactics
Two-headed Cerberus
Two-headed Cerberus
Tymaret, the Murder King
Underworld Cerberus
Unknown Shores
Vanquish the Foul
Vaporkin
Viper's Kiss
Voyage's End
Voyaging Satyr
Vulpine Goliath
Warrior's Lesson
Wavecrash Triton
Whip of Erebos
Wild Celebrants
Wingsteed Rider
Witches' Eye
Xenagos, the Reveler
Yoked Ox
------------
Known Issues
------------
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).
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.
--
A recent contribution to the code base should fix some of the bugs that people noticed with cloning type abilities. At this time there is one remaining issue that we hope will be addressed in the near future:
Copies of cards that setup Zone Change triggers via addComesIntoPlayCommand and addLeavesPlayCommand will not function correctly.
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.
@@ -82,513 +320,30 @@ The archive format used for the Forge distribution is ".tar.bz2". There are util
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:
----------------------------
Contributors to This Release
----------------------------
- Partiality needs to be 100% or the computer may get the two promo cards and the booster for 2 different guilds in RtR Guild Sealed Mode.
- Do not show very small cubes (promos with 2 cards) in the main cube selection menu. You can't build a deck around them.
- Fixed Painbringer.
- Added Return to Ravnica Guild Sealed Deck mode.
- Rever accidental commit of wrong version of block #37.
- Cleared out the changes.txt file, now ready for new material.
- Added the recent commit logs to changes.txt.
- Changed more instances of "YouDontCtrl" to "OppCtrl".
- Changed more instances of "YouDontCtrl" to "OppCtrl".
- Fixed name of Faerie Impostor in RTR Guild Packs
- Updated some deck SVars.
- Improved AI dealing with Flailing Manticore and Flailing Soldier.
- Fixed AI not paying unless costs of its own triggered abilities.
- Improved AI of Frost Titan.
- Made findParentsTargetedPlayer more robust.
- Tweaked attacking AI.
- Player has a field of type GameState
- Experimental AbilityFactory refactoring
- comment out debug
- Fixed Utvara Hellkite.
- Added the property "OppOwn" and converted some cards.
- Fixed Unleash not interacting correctly with Corpsejack Menace.
- Fixed order in the script of Gifts Ungiven.
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- Fixed P/T of Two-Headed Dragon.
- Fixed Cataclysm.
- Fixed Realms Uncharted.
- Fixed ability of Sphinx of Jwar Isle.
- Fixed and improved Proliferate.
- Fixed possible NPE in getCardsIn.
- AnimateAF refactored
- AlterLife cut into classes
- some pointless null checks removed
- fixed some boxing issues (mixing Boolean and boolean)
- UI: access to static fields fixed - should refer to a declaring class, not inherited one
- EditorTableModel: removed some excessive instanceof checks
- Placed missing @override clauses
- Removed unused imports
- Zone getCards returns a read-only list (used to make a new instance), dependants updated (mostly)
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- Fixed a few getCards read-only list errors.
- Improved AI of some auras/equipments.
- Fixed Mulligan.
- Fixed getColorByProminence.
- Another getCards read-only list errors.
- Fixed Thrumming Stone.
- Cleanup.
- More getCards read-only list errors.
- Removed obsolete null checks.
- More getCards read-only list errors.
- Added a missing import.
- More getCards read-only list errors.
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- Fixed warnings.
- Player - shuffle streamlined
- CardLists.getCMC inlined (there were only 4 of them anyway)
- minor - code formatting
- Fixed Ovinomancer.
- Fixed Past in Flames.
- AF-Bond refactored
- AF:Turns refactored
- removed warnings (excessive casts, extra semicolons)
- Removed unnecessary cast.
- AF:Tokens - split into pieces
- Fixed some FindBugs results.
- refactor AF: ZoneAffecting
- some cleanup in BondEffect.java
- AF:ManaDrain (other mana Abs use some special classes =(
- AF:DamagePrevent removed excessive casts and semicolons
- refactor AF:Protect
- renamed life-related ai and effects to put life as 1st word
- refactored AF:Play
- AF: Counters move
- refactored AF: remaining counters
- refactor AF:Effect (wish I knew what it is)
- hasBasicLands predicate for edition
- 1) You can use a Draft/Sealed deck as your quest starting card pool, 2) You can enforce formats when playing with specific starting pools, 3) Fixed a bug in the custom format dialog.
- Added javadoc.
- Code cleanup.
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- More cleanup.
- Basic/snow land sets in quest mode shop and starting deck are randomized.
- Fix of imports after the last commit.
- Quest will use a single set to generate lands for shop
- Triggers: replace HashMap with java.util.Map in c-tors
- a clear check for type of trigger ctor parameters
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- AF: Sacrifice, Reveal
- removed repeating blocks from getStackDescription
- AF: Clone, SetState
- AF: GameWin/Loss
- AF: Permanent state
- AnimateEffects - change relations between classes
- BasicLands is list,
- removed ccnt,
- simplified areAllBasics(final String types) in AF:ChangeZone
- tricked to avoid ref to static method
- Set unlocking is no longer a special reward for winning matches, instead it is an option button like spell store. More expensive than before, not random, and initially fewer sets to choose from.
- TriggerMapPlayed - 1st param => Map
- Added the recent commit logs to changes.txt.
- Correct version of SSubmenuQuestUtil (actually enables the unlocking code), new sets cost a little more.
- (non-working) AF: Destrory, Control
- propper name
- propper nameAF: Pump
- Code cleanup: removed some orphaned autogenerated javadocs after Max Mtg's refactoring, cleaned up formatting in some files, removed outdated javadocs that no longer correspond to method signatures after refactoring, moved some significant comments to their proper files.
- Code cleanup (Phase 2): see r17819
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- Save set unlocking information + won cards.
- GameFormatQuest allowedSetCodes and bannedCardNames are now final and should never be null (set in the constructors).
- Added a fluff piece to the changes.txt file.
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- Updated token download list for RtR (at last)
- Updated RtR token generating cards with set specific images
- AB: Clash, Damage
- AF: Copy, repeat
- getStackDescription routines now use common routines for string collection
- any spelleffect class can use common routines to get defined targets
- Code cleanup (Phase 3): removed some orphaned javadocs, moved some comments, removed some javadocs that no longer correspond to method parameters after refactoring.
- Added a fluff piece to the changes.txt file.
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
* Fixed and re-enabled Targeting Overlay:
* Now it correctly shows the targeting arcs in cases when it previously showed them in the wrong direction.
* The match UI is properly refreshed when the targeting arcs are switched on/off.
* The defunct "mouseover-only" mode is currently disabled (it crashes Forge, difficult to fix).
* Probably some bugs still left, but overall seems to function fine.
- Minor code style fix for the previous commit.
- AF: Mana Had to refactor the whole class of AbilityMana
- Repaint the UI after drawing targeting arcs.
- AF: removing excessive methods, mapParams returns as Map<Str,Str>
- More optimal UI repaint after drawing the targeting arcs.
- AF: Cleanup, StoreSVar, Unattach
- Code cleanup (removing orphaned javadocs and javadocs with parameters that do not correspond to the method definitions).
- rem warning,
- force update of player-related into at end of phase.
- Wrong import ruined build
- Removed some unused code from the targeting overlay.
- had wrong cycling cost
- Fixes OppOwn card property (Geth, Lord of the Vault will work as intended)
- move effect to right package
- Script fixes by Diogenes.
- Little AI fixes.
- Fixed Phyrexian Gremlins.
- Fixed Oversold Cemetery
- CF-Cr: remove unused parameters
- Added a fluff piece to the changes.txt file.
- Small changes to how Mulliganing works with Phases (for upcoming Karn Liberated)
- Made the shape of the targeting arcs a little bit better, also changed the direction of the arc curve to make it look better.
- Compilation fix for the mulligan (had to make nextPhase public, not sure if it's the correct decision, please review).
- Some minor cleanup in targeting overlay code.
- made doTriggerAI final (it calls anyway doTriggerAINoCost anyway, so AF ais will override only nocost version)
- made a wrapper for doTriggerAINoCost to check subAbilities doTrigger (and removed that code from descendants of SpellAiLogic)
- made doTriggerAINoCost protected to avoid calling it from outer classes
- remove imports
- Set some activating players.
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- Fixed Angel's Grace.
- AF: Attach (aura ETB ability is no longer spellpermanent)
- Fixed the AILogic "BeginningOfOppTurn".
- Fixed a bug in getAIPlayableMana.
- AF: apis transformed into an ENUM
- Cleanup.
- Updated some SVars.
- AF: Charms done
- Minor cleanup of obsolete javadocs.
- AF:Charm makes choices on being cast
- remove unused imports
- Added a new static ability "CantAttack".
- Converted some cards (they now work correctly with Planeswalkers).
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- CheckStyle.
- CheckStyle.
- GameFormatQuest inherits from GameFormat... this removed lots of duplicated code
- removed warnings from some AF.AIs
- PredicateNamesExcept holds reference to source list (does not create own array)
- GameFormatQuestToXml.unmarshal: read lists first, then create object to return
- DevMode: joined card to hand for both players, added "card to battlefield" button
- removed 140 lines of unused constructors of ListChooser
- Choosing cards from a list (devmode-addXXXX shows their picture on the right panel)
- fixes default player targeting for PumpAll, TapAll and UntapAll effects
- rem warns
- Streamlined the drawback checks in the AF AI functions.
- AF: Draw used even a different target player picking priority.
- Enabled "NeedsToPlay" SVars for all AF spells.
- canPlayAI has to be abstract
- once canPlayAI is wrapped is has to be hidden from outside callers
- AF: ChangeZone converted
- Orphaned javadoc cleanup.
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- Running set info for PC2 cards that were never ran previously
- CheckStyle.
- CheckStyle.
- CheckStyle.
- Performance updates in ComputerUtilAttack.
- Added Suppression Field.
- Converted Donate to script
- AbilityManaPart has to add SA to trigger it raises =(
- AF:CopyPerm - used shortcuts to select target cards and collect a line
- CardFactoryUtil: extract method
- ETBReplacementMove converted to SpellEffect, wrapped it into CommonDrawback
- Converted Wing Puncture to script.
- ChangeZoneAi: made method names shorter, removed check for subAb drawbacks (since it's checked in wrapper class)
- getParent method added to SpellAbility, moved static methods getParent{withProperty} and findRoot to SpellAbility class
- removed excessive checks from caller methods
- SpellAbility: targetList removed (noone has assigned to it anything meaningful)
- Fixing Auras requesting SpellPermanent and causing a crash, since Auras no longer use the SpellPermanent class
- Adding KeywordMultiplier parameter to StaticContinuous
- moved params and api into SpellAbility, made param getters NPE-proof, cut reference to AbilityFactory
- AbilityFactory: getAbility ready to be made static
- License text + JavaDoc added to QuestUtilUnlockSets.java.
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- Initial preparations for the 'quest worlds' code.
- CheckStyle.
- Do not display the RtR Guild Sealed block in Draft games.
- Fixed stack descriptions.
- undoable attribute moved to SA,
- cost removed from manaPart
- SA: getAbility/getSpell methods were removed, overloaded methods isAbility/isSpell are used instead
- Spells giving mana work correctly
- Added RepeatEach AF
- Converted Rhys the Redeemed to script
- AI Logic for Rhys the Redeemed equivilant to the existing AI code in CF_Creatures
- More preliminary work for the quest worlds.
- Disable test printout in QuestWorld.java.
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- CheckStyle.
- Fixed checkETBEffects.
- Remove a colon from picture file names so that the proper Gatherer names of cards with the colon may be used (for the upcoming CoP/RoP support).
- Renamed the file of Craterhoof Behemoth.
- Fixing Rhys the Redeemed cloning opponents tokens
- Converted Parallel Evolution to script
- Fixing CC of Parallel Evolution
- Converted Siren's Call to Script
- Additional reference needed to be removed
- Convert Hurkyl's Recall to script
- Convert Telling Time to script (the AI may be able to play this now)
- Convert Intuition to script
- wrapper will return api (temporary)
- Cleanup in handleRemembering.
- First implementation of Conspire mechanic (I plan to expand i to support multiple Conspire instances for interaction with Wort, the Raidmother)
- Added the card property "attackingYou".
- Initial implementation of AF ChooseSource for cards that refer to a source in their card text.
- Compilation fix for the updated AF interface (updating AF ChooseSource).
- Improved the prompt of unless costs.
- Added a SpellDescription to Circle of Protection: Artifacts.
- Circle of Protection: Artifacts will no longer create a useless effect when no source is chosen.
- Circles of Protection and Runes of Protection will no longer create useless effects when no source is chosen.
- Added a SpellDescription to all Circles of Protection and Runes of Protection.
- Removed some unused commented out code in AF ChooseSource (wasn't useful).
- 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 more detailed comment to the TODO of the AI part of the AF ChooseSource for future reference.
- CheckStyle.
- restored triggers (like oblivion ring)
- Added TapOrUntapAll AF
- Converted Turnabout to script
- Fixed the types for Lava Hounds; Pallimud; Scourge of Kher Ridges; Sliptide Serpent
- SA: field delve renamed, isTap/untapAbility removed (cost takes care of that), isTrigger declared by overload in AbilityTriggered
- The AI will now predict damage prevention replacement effects.
- Added first steps towards AF ChooseSource AI for CoP's (the AI will choose unblocked attackers).
- Converted Suffer the Past to script
- Converted Remove Enchantments to Script, All Instants have no been converted
- AF ChooseSource: sources already listed as effects "on stack" will no longer also be listed as sources which are "objects referenced on stack by another object".
- Organizing imports in AF ChooseSource.
- Organizing imports in AF ChooseSource.
- Improved AI using War Falcon.
- When choosing cards, sources, etc. using a list box, the currently selected card will now be visually highlighted on the playfield (to better distinguish between e.g. three different cards with the same name on the playfield).
- Now the visual highlighting of a card will also work when declaring the order of blockers.
- Fixed "Players can't gain life." on Everlasting Torment.
- Fixed "Damage can't be prevented." on Everlasting Torment.
- Added a fluff piece to the changes.txt file.
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- slowtrip - remove duplication
- Removed some unnecessary parameters from the chooseSource scripts.
- Initial implementation of the sound system for Forge. Supports non-blocking, "preload once, play anytime" sound playback with no memory penalty for playing sounds multiple times. Supports WAV and AU file formats, uses only standard JDK libraries and, as such, fully cross-platform.
- CheckStyle.
- Some CheckStyle corrections related to the use of "final".
- Added a method to loop the sound to the Sounds enumeration.
- Cleanup.
- Attempt to remedy the "sound skipping" issue with the sound system.
- Input: Added an abstract marker method to trace all annonymous descendants,
- PayManaCostX moved to separate file
- added Action class - it's like Command but has parameters.
- Some more changes to the sound system.
- removed duplicate code in CField
- Fixed Kaervek's Torch Rarity SVar
- Angel's Trumpet is now more generic, and should be compatible with Multiplayer
- Removed zone parameter from selectCard in all Inputs
- More work on the sound system.
- More work on the sound system (cleaning imports).
- More work on the sound system (magic numbers, CheckStyle).
- Adding "UseImprinted" Param to RepeatEach for use with SAs that do something else with Remembered Cards.
- InputSelectManyCards - a common class for all those inlined target-choosing inputs
- a fix for Phantasmal Terrain and Convincing Mirage
- Added missing removeImprinted function.
- Fix an NPE with arcs if the battlefield isn't displayed when trying to draw
- Added Auto and Reset buttons to VAssignDamage
- The AI will now use CoP's to protect itself from damage dealing spells.
- Removed "SVar:RemAIDeck:True" from some of the ChooseSource cards.
- Improved ChooseSource AI handling spells.
- Input: using InputSelectMany as core for custom targeting inputs
- Sound: rem warning
- Converted Blade of the Bloodchief to Script
- CheckStyle.
- Sound system: added an option to toggle the sound effects on/off in the game (currently not linked to any code).
- Fixed possibility of getting stuck in attachAuraOnIndirectEnterBattlefield.
- Fixed DelayedTriggerAi not setting an activating player.
- Quick fix for negative handsizes other than -1, which is used for no maximum (needs a non-hacky solution).
- Small tweaks to General's Regalia
- Reverted GameFormatQuest to fix numerous problems caused by r17875 which totally broke GameFormatQuest. The whole reason for having a separate class for GameFormatQuest and why it was not inheriting GameFormat in the first place was that, unlike with the regular GameFormat class, its lists MUST NOT be immutable or it WILL NOT WORK.
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- reverting 18047, making changes from 17875 not ruin quest logics
- the ro fields are just views, marking them as transient
- ran setinfo and oracle scripts for earlier commits
- fixing import
- CheckStyle.
- Sound system: made the Sounds methods obey the "enable sounds" setting in preferences.
- Launch of the Sound System: several basic sounds are linked to the code now and will be enabled when "Enable Sounds" option is checked in the preferences. No sound files are included with this commit and must be submitted separately. Details in the forum.
- Tageting Overlay: fixed a bug that caused the targeting arcs to disappear for some enchantments targeting cards on the other side of the playfield.
- Added some cost checks to ChooseSourceAi.
- Fixed a bug in getSpellCostChange.
- Bloodthirst is now multiplayer compatible.
- Rewrote the Bloodthirst keyword as a macro for a proper replacement effect.
- Added a fluff piece to the changes.txt file.
- Fix more NPEs with Attach no longer using SpellPermanent
- Sound System: Implemented more sounds and linked them to the code.
- Sound System: Some crash prevention measures.
- Sound System: Minor style fix.
- Sound System: Added the Enchantment sound, some style fixes.
- Added Magmasaur
- Fixed RememberRemoved remembering more counters than were originally on a card
- Sound System: Added the Poison sound.
- Sound System: Added the Instant and Sorcery sounds.
- Using SelectManyCards instead of plain input, rem some warnings
- Quest start options remake - part 1/2. (I just tried to understand all those checkboxes and failed)
- new quest w/custom format - bugfix
- Sound System: Added the ability to optionally define sound effects for specific cards by name instead of by type (might prove useful later).
- Sound System: CheckStyle.
- Sound System: CheckStyle.
- Sound System: Renamed some sounds for the sake of clarity.
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- CheckStyle.
- Converted Nameless Race to script
- small addition to CostPayLife to enable limiting the maximum available choice when using XChoice
- improved svar name for Minion of the Wastes
- Sound System: Added to enumeration and implemented support for the AddCounter, Damage, Destroy, Discard, Equip, LifeLoss, ManaBurn, Regen, RemoveCounter, and Sacrifice sound effects. Also, some minor fixes.
- Converted Phyrexian Processor to script (by moomarc).
- AdditionalCostsPaid will now be cleared when a card hits the graveyard.
- Quest start UI done
- Conspire is now check on the SA instead of the card.
- Initial checkin of PermanentCreature AF, a way to organize Creature Spell AIs, with longterm potential of removing SpellPermanent
- Converted Force of Savagery to Script
- Sound System: A little fix to the counter sounds. Also, adding back some of the changes that seemingly did not go through the last time.
- Sound System: Increased the responsiveness of the sound system, should help remedy the skipping or missing sounds.
- Small fix to Nameless Race
- Made some scripts multiplayer compatible and other minor tweaks
- Added the first global rule change: "Damage can't be prevented.".
- Converted Leyline of Punishment and Everlasting Torment.
- Added the global rule change: "All damage is dealt as though it's source had wither.".
- Everlasting Torment is now fully scripted.
- Converted C "...each player's <phase>" cards to more multiplayer-friendly scripts.
- ReplacedOppDomain counting method with ActivePlayerDomain (Only card that used OppDomain was converted)
- Added the global rule change: "The legend rule doesn't apply.".
- Converted Mirror Gallery to script.
- Added the global rule change: "Mana pools don't empty as steps and phases end.".
- Converted Upwelling to script.
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- Added the global rule change: "Players can't cycle cards.".
- Converted Stabilizer to script.
- Fixed Predatory Rampage.
- Added the global rule change: "Creatures entering the battlefield don't cause abilities to trigger.".
- Converted Torpor Orb to script.
- CheckStyle.
- Initial implementation of "spend only <color> mana when paying X", for the future implementations of Drain Life/Consume Spirit/etc. Currently controlled with SVar:XColor - specify the color of mana to spend on the X cost, e.g. SVar:XColor:B limits the X mana cost to black. Hope it didn't break anything, please test.
- GlobalRuleChanges is now stored as EnumSet.
- Fixed a bug in the "Spend only <color> mana on X" routine that allowed any mana to be spent after the first tapped land.
- Fixed a bug in the "Spend only <color> mana on X" routine that disabled the confirmation button if the wrong type of land was clicked, even if some mana of correct color was already paid before.
- Added the global rule change: "No more than one creature can attack each turn.", "No more than one creature can attack each combat." and "No more than one creature can block each combat.".
- GlobalRuleChange enum now has an associated text.
- Unlocking sets is less expensive now (but still fairly expensive).
- Code simplification (related to "spend only <color> mana on X").
- Typo fixes to the QuestData submenu.
- Sound System: added a previously missed link for the non-combat damage life loss sound.
- Added the recent commit logs to changes.txt. Preparing for the snapshot build release.
- CheckStyle.
- Fixed a bug that made it possible to select any color of mana from the mana pool when the X mana cost was supposed to be restricted to specific color(s).
- Checkstyle
- Fixed AI using Unwilling Recruit.
- Fixed Curses in attachToPlayerAIPreferences.
- The AI will now use the ability of Hollow Specter.
- The AI will no longer animate an equipped Ensouled Scimitar.
- Quest set unlocks logics written from scratch
- Improved AI for Auras with "AILogic$ Curse".
- More Improvements of AI for Auras with "AILogic$ Curse".
- More Improvements of AI for Auras with "AILogic$ Curse".
- rem unused import
- New formula for unlock prices, minor checkstyle.
- Display up to 2 + (wins/50) (max 8) options when unlocking sets.
- Bounds checking for unlocking.
- Better way, use sublist.
- Simplify nrChoices in unlocking.
- 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.
Many people helped with this version. A special thank you goes out to them. (Attempted to list names alphabetically):
Agetian
Dead Speak
Diogenes
DrDev
Dripton
Gos
Hellfish
Marc
Max
RumbleBBU
Sloth
Sol
spr
Swordshine
ZzzzSleep
Chris H
Added the following cards:
AEthertow
Arsenal Thresher
Auriok Replica
Barkshell Blessing
Bone Mask
Booby Trap
Burn Trail
Burrenton Forge-Tender
Cho-Arrim Alchemist
Circle of Protection: Artifacts
Circle of Protection: Black
Circle of Protection: Blue
Circle of Protection: Green
Circle of Protection: Red
Circle of Protection: Shadow
Circle of Protection: White
Cleansing
Consume Spirit
Daru Spiritualist
Disturbing Plot
Divergent Growth
Doubling Chant
Dracoplasm
Drain Life
Everlasting Torment
Fire Juggler
Flaring Pain
General's Regalia
Ghastly Discovery
Giantbaiting
Gleeful Sabotage
Greater Realm of Preservation
Gustcloak Cavalier
Haazda Shield Mate
Intervention Pact
Invulnerability
Jade Monolith
Kaervek's Torch
Karn Liberated
Kemba's Legion
Krosan Drover
Maddening Imp
Magus of the Scroll
Memory Sluice
Metamorphose
Mine Excavation
Minion of the Wastes
Nightshade Assassin
Oracle's Attendants
Overlaid Terrain
Parallax Nexus
Pentagram of the Ages
Predatory Focus
Prismatic Circle
Proteus Machine
Reap
Reverse Damage
Riftsweeper
Righteous Aura
Rising Waters
Rofellos's Gift
Rune of Protection: Artifacts
Rune of Protection: Black
Rune of Protection: Blue
Rune of Protection: Green
Rune of Protection: Lands
Rune of Protection: Red
Rune of Protection: White
Rust Elemental
Saproling Cluster
Seasoned Tactician
Shaman en-Kor
Shimian Night Stalker
Story Circle
Summoner's Egg
Traitor's Roar
Unstable Footing
Wild Might
(Quest icons used created by Teekatas, from his Legendora set http://raindropmemory.deviantart.com)
(Thanks to the MAGE team for permission to use their targeting arrows.)
(Thanks to http://www.freesound.org/browse/ for providing some sound files.)
Installation and Updating to a newer version Instructions:
Installation Instructions:
--------------------------
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 used to decompress these ".tar.bz2" archives. We recommend that you decompress the Forge archive into a new and unused folder.
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.
Once the Forge archive has been decompressed you should then be able to launch Forge by using the included launcher. Launching Forge by double clicking on the forge jar file will cause a java heap space error. Forge's memory requirements have increased over time and the launchers increase the java heap space available to Forge.
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 theapplication Archive Utility will launch and extract the archive. Mac users do not need to download a separate utility.
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, 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/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/pics_product/ folder contains four folders which in turn contain pictures for the booster, fatpacks, precons and tournamentpacks products.
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.
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.
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.
Once the Forge archive has been decompressed you should then be able to launch Forge by using the included launcher. Launching Forge by double clicking on the forge jar file in the past caused a java heap space error. Forge's memory requirements have increased over time and the launchers increase the java heap space available to Forge. Currently you can launch Forge by double clicking on the forge jar file without a java heap space error but this is likely to change as we add in more sounds, icons, etc.
Advanced Updating to a newer version Instructions:
Updating to a newer version Instructions:
-----------------------------------------
Another option for you to consider is to move some of the files/folders listed above to a different location on your hard drive. Then edit the "main.properties" file in the /res/ folder with any basic text editor. At the "image/base--file=pics" and "image/token--file=pics/tokens". Just change these to absolute paths of your choice eg:
- User data migration -
User data files, like decks, saved gauntlets, and card pictures, are now stored in new directories separate from the program data. When this version of Forge is first run, it will scan the program directory for all user data and automatically migrate the files to their new homes. There are three defined user data directores: userDir, cacheDir, and cardPicsDir, and their locations depend on the standard paths for your operating system:
The appdata directory is hidden by default in Win7. Open a Windows Explorer window (or double-click on My Computer] and in the address field type "%appdata%/forge/" (without the quotes). If that doesn't work, type "%appdata"/roaming/forge".
and do the same for "decks-dir--file=decks", "quest--properties=quest/quest.properties" and whatever else you might usually copy from version to version. Try to avoid folders that are usually updated in the releases. Just remember to use forward slashes for the pathnames. Then just copy the "main.properties" file from version to version. Occasionally compare it to the release version to make sure nothing else has changed, and if it has just replace the adjusted lines instead.
cardPicsDir is defined as <cacheDir>/pics/cards/ by default. If you wish to use a non-default directory, please see the forge.profile.preferences.example file located in the Forge installation directory root. You can use this file to, for example, share the card pics directory with another program, such as Magic Workstation.
If you are using the Mac OS X version of Forge then you will find the forge.profile.preferences.example file by right clicking or control clicking on the Forge.app icon. Select "Show Package Contents" from the contextual menu. A Finder window will open and will display a folder named Contents. Navigate to the folder:
/Contents/Resources/Java/
and you will find the file named forge.profile.preferences.example.
For reference, here is the full list of moved directories and files:
Old location New location
---------------- ----------------------
res/decks/ <userDir>/decks/
res/gauntlet/ <userDir>/gauntlet/
res/layouts/ <userDir>/preferences/
res/preferences/ <userDir>/preferences/
res/quest/data/ <userDir>/quest/saves/
res/pics/ <cacheDir>/pics/
forge.log <userDir>/forge.log
- New Import Data dialog -
The Import Pictures dialog, accessed via the Content Downloaders submenu, has received an overhaul and has been reincarnated as the Import Data dialog. You may recognize it from the automatic data migration procedure if you had any data to migrate when this version was first started. Instead of just importing pictures from a previous version of Forge, it can now import any kind of Forge data whatsoever. If you have a directory full of deck files, you can use the Import Data dialog to copy or move them to the appropriate directory. If you have just downloaded a torrent of high-quality pics for a particular set, use the Import Data dialog to get them to the proper place. The dialog give you a full listing of all file copy/move operations, so you can see what will happen before you click 'Start Import'.
An importer option was added for including pictures in set-specific card directories that don't map to any currently known card. This handles the case where people have collected complete sets of pics in anticipation of when Forge supports them.
The Mac OS application version:
-------------------------------
We have packaged the Forge BETA version as a Mac OS application. You can double click the Forge.app icon to launch the forge application on your Apple computer running Mac OS. This application will automatically increase the java heap space memory for you as it launches. This version does not require the forge.command file and it does not need to start the Terminal application as part of the start up process.
You can move a copy of your pictures and decks over to the "Forge.app" application. Right click or control click on the Forge.app icon. Select "Show Package Contents" from the contextual menu. A Finder window will open and will display a folder named Contents. Navigate to the folder:
/Contents/Resources/Java/res/
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.
@@ -58,19 +65,13 @@ Please note that the issue is most likely caused by Mountain Lion's Gatekeeper f
Picture location info:
----------------------
The quest opponent icons jpg picture files go into your /res/images/icons folder. Please note that the /res/pics/icons/ folder was moved out of this folder and placed in the /res/images/ folder.
The quest booster package jpg picture files go into your /res/pics/booster folder. The card token jpg picture files go into your /res/pics/tokens folder.
The quest pets archive contains two subdirectories named "icons" and "tokens". Place the files located inside of the /icons/ folder into the /res/images/icons/ folder. Place the files located inside of the /tokens/ folder into the /res/pics/tokens/ 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.
The instructions that were found in this section are now out of date. Current instructions can be found in the CHANGES.txt and forge.profile.properties.example files.
Launching Forge and Memory Issues:
----------------------------------
In the past, some people noticed java heap space errors and lengthy pauses. The memory requirements for Forge have increased over time. The default setting on your computer for the java heap space may not be enough to prevent the above problems.
@@ -82,10 +83,11 @@ The script file must be located in the same folder as the Forge jar file and the
If you have a low end machine you may find that the scripts above will prevent java heap space errors but will find that Forge still runs very slowly at times.
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. 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.
@@ -114,35 +116,722 @@ Now you will probably see some sort of Error in the console. the first few lines
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.
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.
Forge is likely to be compatible with Java 7 at this time. Some people have used forge with Java 7 and have not reported any problems that are related to Java 7. If you would like to upgrade to Java 7 and have held off because of Forge then you may upgrade as we do not think that it will cause an incompatibility type of problem. We will continue to try to maintain compatibility with Java 6 for the foreseeable future.
Forge requires java 6 and will not run if you have an earlier version of java. You will need to update to java 6.
Forge requires Java 6 and will not run if you have an earlier version of Java. You will need to update to Java 6.
Card Picture Issues:
--------------------
The server which contained the high quality card pictures is now off line and these high quality card pictures are no longer available as a download from within the forge application. We apologize, but the current dev team do not maintain this server and this matter is out of our control.
Some people are choosing to re-download all of the low quality card and card set pictures when they install the next version of forge. This consumes large amounts of bandwidth needlessly. Please be careful!
When you install the new version of Forge, find the forge/res/pics/ folder. Either move it or copy and paste the pics folder over to the recently installed new version of forge. This way you will only have to download the pictures for the new cards.
The instructions that were found in this section are now out of date. Current instructions can be found in the CHANGES.txt and forge.profile.properties.example files.
When you install a new version of Forge, please follow the instructions that can be found in the CHANGES.txt and forge.profile.properties.example files. This will allow you to reuse your previous picture files and other user data files. This way you will only have to download the pictures for the new cards.
This should save enough bandwidth that everyone will be able to download the new set pictures from the cardforge server. We do appreciate your efforts to save bandwidth. Thank you.
Reporting Bugs:
---------------
To report a bug with an official beta release, please follow the instructions at http://www.slightlymagic.net/wiki/Forge#I_think_I_found_a_bug_in_Forge._What_do_I_do.3F .
To report a bug (1) with an alpha test, (2) with a nightly build, (3) with something compiled from the official Forge software repository, or (4) with the leading edge (formerly "SVN Bug Reports"), please do not submit your bugs to the forum. Instead, please follow the instructions at http://www.slightlymagic.net/wiki/How_to_File_a_Bug_Report_with_Mantis.
To report a bug (1) with an alpha test, (2) with a nightly build, (3) with something compiled from the official Forge software repository, or (4) with the leading edge (formerly "SVN Bug Reports"), please do not submit your bugs to the forum. Instead, please follow the instructions at http://www.slightlymagic.net/wiki/How_to_File_a_Bug_Report_with_Mantis.
Forge will now allow you to upload a crash report to the Forge forum at CCGH.
A new very hard tier category in Quest mode:
--------------------------------------------
You will notice a new very hard tier category for the opponent. As you change from the previous tier to the next tier (easy to medium, etc.) you will now notice that there is not an abrupt change over. There is now a mixture of decks from the previous tier and the next tier for you to chose from. When you win a match you will complete the advancement to the next tier.
The Forge Booster Draft mode:
-----------------------------
A significant re-write of the Booster Draft functionality has taken place. Draft from the Full card pool, sets/blocks or custom drafts (like cube). The AI will pick cards more intelligently, and builds decks from picked cards. Old method would pick cards for deck and then stop picking new cards.
The developer mode:
-------------------
The developer mode gives us a few new features. These new features will primarily interest the devs as it will now help to test out specific cards while testing combat code changes. You can turn on or off this mode at the Home View -> Game Settings -> Preferences -> Gameplay Options section.
When turned on the battlefield will have a tab named "Dev Mode". There are a number of useful options in this tab. You can disable loss by milling, generate mana in your mana pool, tutor for card, etc.
New foil card image available:
------------------------------
Rob and Marc have worked together to add in a new feature which will overlay a card's image with a foil like film. A few random cards will have a foil like image in constructed mode games and possibly quest mode games. There is a check box on the Home View -> Game Settings -> Preferences view that you can use to turn this feature on or off.
Informational icons overlays for cards on the battlefield:
The Battlefield will now display three symbolic icons that will overlay creature cards. These icons are used to denote summoning sickness and whether a creature is attacking or blocking. Added additional icons that will be drawn over the cards in the battlefield for phasing and counters at a later date. The attack/block/phasing icons and counters will now also be shown on large cards, only casting cost will be omitted. Lands and tokens with different amounts/types of counters will no longer stack. Tokens with different summoning sickness will no longer stack. Lands that become creatures will now always be moved to the front row.
Optional choice for abilities that are on the stack:
When a spell or an ability appears on the stack and it says "(OPTIONAL)" you can right-click it to decide if you want to always accept or to decline it.
Multiple quest files:
---------------------
Multiple quest files are now supported. This allows you to start a new quest and give it a unique name, and it will not overwrite your previous quest game file.
The new UI now uses tabbed panes:
---------------------------------
We now have a tab system for sub-menus in the home screen. Quest mode refactored to fit this tab system. It's now considerably easier to use - less cramped, less clicks, more functionality.
The quest mode card shop:
-------------------------
You can now buy PreCon decks, Starter packs, Tournament packs and Fat packs from the quest mode card shop.
Player Avatar pictures:
-----------------------
The UI has a few new features including the option to pick an avatar from a collection of pictures. This can be accessed from the Settings -> Avatars tab.
The organizational structure of the /res/decks/ folder:
The organizational structure of the /res/decks/ folder has been improved and we now have these six subdirectories:
/decks/constructed/
/decks/cube/
/decks/draft/
/decks/plane/
/decks/scheme/
/decks/sealed/
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.
Please not that your /decks/ directory no longer resides in you /res/ directory and has been moved to <userDir>/decks/.
User-created themes for Forge's background, fonts, colors and icons:
When you select a new skin in the Preferences view Forge should save the change to the preference file, quit and then automatically re-launch with the new skin displayed. During testing some people have noticed that Forge is not restarting on their computer and they have to re-launch Forge themselves.
If anyone is interested in creating additional themes for inclusion in the Forge project then you should visit this topic at CCGH:
The Battlefield UI has a new feature implemented which allows us to move and resize the panels to new places on the battlefield. This allows us to personalize the battlefield display to our own liking. You should try moving panels by clicking and dragging their tabs.
If you do not like your efforts to personalize the battlefield display you can revert the display to the default layout by clicking on the Dock button labeled "Revert layout".
The pets in quest mode:
-----------------------
Some adjustments to the pets in quest mode were made. The quest mode plant wall's Deathtouch ability was deemed to be too strong against the AI's attack code and this ability was changed to Wither in this version. This includes a new pet.
The dock tab has a new button labeled "Open Layout":
The dock now has a new button labeled "Open Layout" along with old button with original function "Revert Layout". Modifying the battlefield layout will result in your changes being saved to a file named "match_preferred.xml". You can copy and rename that file to share your layouts with other people.
The new Deck Editors:
---------------------
The work on the new UI is now finished and this version adds the new UI to the deck editors. We all would like to thank Doublestrike for his contributions to the new UI.
The new deck editors include:
* a better text search (can search for multiple terms, and "not" terms
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 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.
Some performance changes were made to Forge and it should now operate more quickly on low end machines. Mid to high level machines are unlikely to notice as much of a performance increase. We tried to hunt down all of the bugs that resulted from these changes but there may still be a bug or two in this beta release.
A note about winning booster packs in quest mode:
-------------------------------------------------
If you win a quest mode match, you get a booster pack for every 1 or 2 (default) Wins, depending on the difficulty level. If you lose and you are playing on easy mode, you get a booster pack every 1 (default) Loss.
The new UI:
-----------
The first step was to update the battlefield window. The second step was to update the New Game window (now named Home view). We got constructed mode and then quest modes working first. We got the draft and sealed modes working again afterwards.
The work on the new UI is now for the most part finished. We should not expect major changes or major additions to the UI. Future betas may include a few minor bug fixes to the UI. And we may also include a few minor tweaks.
The new Alpha Strike button:
----------------------------
A new Alpha Strike button was added to the dock. The Dock is one of the tabs availble in the battlefield view.
Using Forge with the new Mac OS Mountain Lion:
----------------------------------------------
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.
The Forge sealed deck mode:
---------------------------
Sealed Deck mode has had a complete rewrite. Full cardpool, block and custom modes are supported. Custom sealed files in the res/sealed folder are exactly the same as custom draft files, except the file extension ".sealed".
A distinction may now be made between AI decks and Human decks, with the addition of a deck Metadata "PlayerType", which right now just helps by sorting human decks into the human combo box and AI decks into the AI combo box.
The Forge sealed deck mode has undergone significant changes. You can find these in the 1.2.14 beta and later versions. Instead of a single sealed deck match, you can now choose a 1-5 round gauntlet-style tournament where you will face increasingly difficult (probably) opponent decks. You can also choose to use starter packs instead of boosters in the block mode, choose to use 3-12 boosters instead of the default 6 in the full cardpool and custom (cube) modes, and so on.
Perhaps the most notable changes to the sealed deck mode are related to "fantasy blocks" and the greatly increased flexibility you have when you are building your own blocks.
The new Gauntlet mode:
----------------------
A new Gauntlet mode has been added. This mode gives you four options: Quick Gauntlet, Build A Gauntlet, Load Gauntlet and Gauntlet Contests. You can create a group of computer decks to play against by choosing either Custom user decks, Quest Decks, Fully random color decks or Semi-random theme decks.
The new Variant mode (was named Multiplayer):
---------------------------------------------
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.
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. :)
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 new damage dialog:
----------------------
The new damage dialog now uses the new UI.
When choosing cards, sources, etc. using a list box:
When choosing cards, sources, etc. using a list box, the currently selected card will now be visually highlighted on the play field (to better distinguish between e.g. three different cards with the same name on the play field). Now the visual highlighting of a card will also work when declaring the order of blockers.
Return to Ravnica Guild Sealed Deck mode:
-----------------------------------------
Added Return to Ravnica Guild Sealed Deck mode. Start a new sealed deck game, choose "Block / Set" and then scroll down until you find "Return to Ravnica Guild Sealed (block)". Select that. From the "Choose Set Combination" menu, select the first option. You will be prompted twice to pick your guild (once for the promo cards, once for the actual booster - you should choose the same guild both times). After that you're ready to go.
Targeting arrows are now available in the battlefield display:
The Targeting Overlay has been fixed and re-enabled. It now correctly shows the targeting arcs in cases when it previously showed them in the wrong direction. The match UI is properly refreshed when the targeting arcs are switched on/off. The defunct "mouseover-only" mode is currently disabled (it crashes Forge, difficult to fix).
The visuals for targeting arrows has been improved and looks better, with an adaptation of the arrow drawing code from MAGE. Thanks to the MAGE team for permission for the adaptation.
Some people have noticed slowdowns when Targeting arrows are enabled. The battlefield Dock tab includes a targeting icon. You can set the targeting arrows to Off or to Card mouseover to speed up the game.
The new sound system:
---------------------
Forge now has a sound effect system in place. Several basic sounds are linked to the code now and will be enabled when "Enable Sounds" option is checked in the preferences. It supports WAV and AU file formats.
Currently supported sound effects are:
(the ones already available in the standard installation of Forge are marked with a [*])
AddCounter [*] - add_counter.wav - triggered when a counter is added to a permanent.
Artifact[*] - artifact.wav - triggered when an artifact is played.
ArtifactCreature [*] - artifact_creature.wav - triggered when an artifact creature is played.
BlackLand [*] - black_land.wav - triggered when a land with the "B" mana ability is played.
Block [*] - block.wav - triggered when a blocker is assigned.
BlueLand [*] - blue_land.wav - triggered when a land with the "U" mana ability is played.
Creature [*] - creature.wav - triggered when a creature is played.
Damage - damage.wav - triggered when a creature is damaged.
Destroy [*] - destroy.wav - triggered when a permanent is destroyed.
Discard [*] - discard.wav - triggered when a player discards a card.
Draw [*] - draw.wav - triggered when a player draws a card.
Enchantment [*] - enchant.wav - triggered when an enchantment is played.
EndOfTurn [*] - end_of_turn.wav - triggered at the end of turn.
Equip [*] - equip.wav - triggered when an equipment is equipped.
Exile - exile.wav - triggered when a card is exiled.
FlipCoin [*] - flip_coin.wav - triggered when a coin is flipped.
GreenLand [*] - green_land.wav - triggered when a land with the "G" mana ability is played.
Instant [*] - instant.wav - triggered when an instant is played.
LifeGain - life_gain.wav - triggered when a player gains life.
LifeLoss [*] - life_loss.wav - triggered when a player loses life.
LoseDuel[*] - lose_duel.wav - triggered when a player loses a duel.
ManaBurn - mana_burn.wav - triggered during a mana burn if the appropriate rule is enabled.
OtherLand - other_land.wav - triggered when a land with non-color mana abilities or any other land is played.
Planeswalker [*] - planeswalker.wav - triggered when a planeswalker is played.
Poison [*] - poison.wav - triggered when a player receives a poison counter.
RedLand [*] - red_land.wav - triggered when a land with the "R" mana ability is played.
Regen - regeneration.wav - triggered when a creature is regenerated.
RemoveCounter - remove_counter.wav - triggered when a counter is removed from a permanent.
Sacrifice - sacrifice.wav - triggered when a permanent is sacrificed.
Sorcery [*] - sorcery.wav - triggered when a sorcery is played.
Shuffle [*] - shuffle.wav - triggered when a player shuffles his deck.
Tap [*] - tap.wav - triggered when a permanent is tapped.
Token [*] - token.wav - triggered when a token is created.
Untap [*] - untap.wav - triggered when a permanent is untapped.
WhiteLand [*] - white_land.wav - triggered when a land with the "W" mana ability is played.
WinDuel [*] - win_duel.wav - triggered when a player wins the duel.
All sounds use the event bus model now and are not called directly.
The new Vanguard mode:
----------------------
We now have a Vanguard mode implemented. This is a work in progress. The older match layout files are incompatible with the new Vanguard mode. The original match_default.xml, match_preferred.xml and the match_preferred.xml saved to a different name files need to be deleted 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 new Archenemy mode:
-----------------------
Schemes have been added to the Archenemy mode. This is a work in progress and there may be a bug or two for us to find.
Quest Worlds:
-------------
This version allows you to travel between the regular quest world and the other worlds (Shandalar, Ravnica, Jamuraa, more may be added in the future) to get different duel opponents and challenges. You will have to complete your current challenges before traveling or you will lose them.
World-specific format enforcing and starting world selection are available. Something has to be done about locked (non-repeatable) challenges so they do not end up locking other challenges in different worlds.
Forge now has sideboards for the human player:
----------------------------------------------
Sideboards have been implemented for Human players. We currently have:
* Sideboard creation support in relevant deck editor modes.
* In-game sideboarding with persistence between rounds in a match and sorting of cards in the in-game sideboard editor.
* Sideboard supported as a zone, with some relevant cards already in.
* Correct validation of decks, both before the game starts and between the rounds (Limited min 40, Constructed min 60, free-form sideboard/main in Draft and Sealed, 1:1 sideboarding with 0 or 15 cards allowed in sideboard in Constructed (all variants) and Quest; OK to have less than minimum between rounds in a match in all modes if lost cards on ante).
* Correct (fingers crossed) interaction of sideboarding with other relevant aspects of Forge rule enforcement (mulligan and ante interactions were corrected, initial hand and library between rounds were both corrected, everything else looks so far so good).
We don't yet have:
* AI sideboarding.
The deck conformance/legality limitation:
-----------------------------------------
The deck conformance/legality is now a user-toggable preference and is enabled by default. You no longer need to turn on dev mode to play an illegal deck.
Using Forge on displays that are only 600 pixels tall or slightly larger:
The "Sanctioned Format: Constructed" view should now be compatible with displays that are only 600 pixels tall. The deck list at 600 pixels tall should now display three lines of text rather than less than a single line of text.
We are looking for help in finding additional sound files for the new sound feature:
This version of forge includes a few sound files for the new sound effect system. While we have several sounds assigned to a few of the available events there are a number of events that do not yet have a assigned sound file. This should be considered a work in progress and we could use some help in finding interesting sounds that we can add to forge.
The sound files need to be in wav or au format, wav appears to be more widespread but the code can handle either format. The sound files need to be copyright-free and they should be in the public domain.
You can either record your own sounds if you have the necessary equipment or you may be able to find an appropriate sound on a website such as http://www.freesound.org/browse/
You should note that sound files can be large and we would like to avoid this if possible. A good size to shoot for would be 50 K or less. There is a freeware sound editor that may have versions for all operating systems. This app is named Audacity.
We have a forge forum topic at the Collectible Card Games Headquarters web site that is devoted to finding sounds for this new sound system. Please visit this topic and contribute a sound or two. We can use your help and assistance. :)
A second Quest World, Jamuraa, has been added to Forge. When playing Quest mode, it is now possible to 'Travel' between the regular Quest environment and the two Worlds, Shandalar and Jamuraa, both of which include special formats, opponents and challenges. Or you can start a new Quest in any of them.
Like Shandalar, Jamuraa is a fantasy world. Its peaceful existence has recently been wrecked by a planar conjunction that shattered the barriers between Jamuraa and the infernal planes known as Jahim, Saqar, and Jahannam. The demon planeswalkers who rule those planes, and their hellish sister, Lilith, are now extending their influence over Jamuraa and gradually destroying the whole continent. Your task is to fight their minions and ultimately challenge the four demons - but beware, their destructive might is unfathomable!
From a technical perspective, the following sets are available to the player in Jamuraa:
5th Edition, Arabian Nights, Mirage, Visions, Weatherlight.
Jamuraa contains:
- 81 opponent decks, broken down as follows: 13 'easy' decks, 17 'medium' decks, 31 'hard' decks, and 20 'very hard' decks.
- 9 challenges, including the 4 demon planeswalkers (the 3 demon rulers and Lilith) and 5 other special scenarios set in Jamuraa. All challenges are repeatable. All are fairly hard, and the 4 demon challenges are especially fiendish.
For the most part, the opponent duel and challenge decks are built with the same format restrictions as your own cardpool, and some of the easiest opponent decks were in fact based on a limited cardpool. But there will be exceptions, especially in the hard/very hard decks and challenges, which can be more like Vintage/T1 decks than pure Mirage + 5th Edition decks. There will be older cards here and there, and maybe even a random Tempest card or two (although these are extremely scarce!).
Hint: if you find the later 'Vintage' opponent decks unfair or near-impossible to beat with your 5th Edition/Mirage block cards, you can Travel to Shandalar and collect some old power cards there, and then return to Jamuraa. Just remember to complete your challenges before traveling.
Information on the quest worlds format can be found in this topic:
Some work is being done on the various deck editors -- including the quest spell shop -- and we hope to add in additional features while improving the UI. Here is a quick tutorial on the new features:
FILTERS
The Filters tab has been removed and filters are now controlled from the Card Catalog tab. Pretty much everything that used to be a checkbox is now represented by a toggle button. The statistics labels at the top for colors and card types can now be clicked to toggle display of the related cards. Clicking the Total Cards label in the upper left will alternately set all filters on and off.
Text searches are done by just typing the the text box. The results will update as you type. Use the combo box to the right of the text box to set whether the search should be for cards with or without the specified text. The three toggle buttons to the right of the combo box allow you to specify where in the card the text should (or should not) match. Complex text searches, such as for goblin creatures with haste but not with kicker costs, are possible by stacking the search filters. Put the current search filter on the stack by selecting the "Add filter" button to the left of the text box and choosing the "Current text search" option. You can also use the keyboard shortcut Ctrl+Enter (Cmd+Enter on OSX). This will keep your current text search applied, but will clear the text box and allow you to input the next search filter. To perform the example goblin search above, you would:
1) Ensure "in" is displayed in the the combo box. Enter "goblin" in the text box and deselect Name and Text so that only Type is selected.
2) Hit Ctrl+Enter (Cmd+Enter on OSX). Notice the "Contains: 'goblin" in: type" filter appears below the text box.
3) Type "haste" in the text box. Deselect Type and select Text. Hit Ctrl+Enter.
4) Change the combo box from "in" to "not in". Type "kicker" in the text box.
The shown entries match your combined search filter. Click the little 'x' in the upper right corner of each search widget to remove that filter from the filter stack.
Format filters allow you to restrict the shown cards to those that are legal in a particular format. Select the "Add filter" button, hover over the "Format" submenu, and choose one of the defined formats. The filter will appear below the text box and will be combined with whatever other filters you have on the stack. Hover the mouse over the filter widget to see details on allowed sets and banned cards. Keep in mind that cards from other, non-listed sets may still appear in the results if they are just reprints of allowed cards.
Set filters are similar to format filters except that a window will come up with a grid of checkboxes so you can select exactly which sets you would like shown. There is a checkbox at the bottom (off by default) that will allow the filter to include cards reprinted in unselected sets, just like the format filter above. If you don't check this checkbox, only cards printed in the selected sets will be shown, allowing you to focus on just that set's version of a particular card. This is very useful in quest mode when determining which cards in a set you have yet to collect.
Value range filters allow you to restrict the cards by power, toughness, and/or converted mana cost (CMC). The text boxes that appear in the filter widget are editable and update the shown cards in realtime as you modify the numbers.
Quest World filters are similar to Format filters in that they restrict the shown cards to a group of sets, respecting lists of banned cards. They are useful when constructing decks that will be valid in the various quest worlds. You can have more than one quest world filter active at the same time; useful if you are constructing a deck that will be used in multiple worlds.
SPELL SHOP
The spell shop interface has also received some usability enhancements. The first one you may notice is the addition of a new column named "Owned". This column is intended to help players decide whether buying an item is likely to be beneficial. The data in this column varies depending on what kind of item the row represents:
Cards: A number indicating how many of a particular card a player already owns
Preconstructed decks: A "YES" or "NO" indicating whether the deck exists in the player's deck list
Booster/fat packs: A percentage indicating how close a player is to completing the related set. "Complete" means at least one of every basic land and at least 4 of every other card.
If you don't want this column, it can be turned off in the editor preferences.
The new "Sell excess cards" button appears above the player's library. Clicking it will sell all cards that are not basic lands until only four copies of the cards remain. It's a one-click "cleanup" of the library and a great way to safely and quickly regain some cash.
The "Full catalog view" button appears to the left of the "Buy Card" button. Toggling this button will switch between showing the store's inventory and the full catalog. By applying a filter to show only a particular set (or group of sets), players can use this view to discover exactly which cards they do not own. Buying and selling cards is disabled while in this view.
Multibuy: By selecting any number of items and hitting space (or selecting the "Buy Card" or "Sell Card" buttons), a player can buy one of everything selected.
Find-as-you-type is now implemented for Deck Editor tables. Just start typing while the table has focus and the next card with a matching string in its name will be highlighted. If more than one card matches, hit Enter to select the next matching card. A popup panel will appear with the search string so you know what you are searching for. If no cards match the string, the string will be highlighted in red. Normally, if you hit the spacebar while a card is selected in one table, the card will be moved to the other table (catalog/deck). When the popup is displayed, space characters are interpreted as part of the search string. Find-as-you-type mode is automatically exited after 5 seconds of inactivity, or hit Escape to exit find-as-you-type mode immediately.
The Deck Editor has also gained some hotkey and context menu abilities. R-click on a card (or a group of selected cards) for a list of actions and keyboard shortcuts. In particular, you can now transfer cards 4 at a time using the keyboard and interact with the sideboard from anywhere. Also remember that you can jump to the other table with the arrow keys and jump to the text filter with ctrl/cmd+f. From the text filter, you can jump down to the tables by pressing enter.
The Game Log:
-------------
Added a 'copy to clipboard' button on WinLose screen so players can easily copy the game log.
The UI is more keyboard-friendly:
---------------------------------
Work was also done on making the UI more keyboard-friendly. For example, the OK button should now stay focused during matches, so you can advance through the stages by hitting Enter without having to go over and click the button all the time. If you find the button is losing focus, please report it as a bug.
Gatecrash Guild Sealed game mode:
---------------------------------
Gatecrash Guild Sealed game mode has been added. To use it, start a new Sealed Mode Game, select "Block / Set" and "Gatecrash Guild Sealed". Select the first (default) configuration in the "Choose Set Combination" dialog, and when asked to pick your boosters, choose the guild you want twice (once for the guild-specific booster, and then for the extra promo cards).
The following cards are not included in the guild boosters of this game mode because they are not currently implemented in Forge: Bane Alley Broker, Bioshift, Killing Glare, Simic Manipulator.
New User Preferences:
---------------------
The display of clones and copied cards is now a matter of user preference. A user to now choose whether a clone/copied card should use its native artwork or the artwork of the card being cloned. So if Infinite Reflection is played and the "Clones use original card art" preference is checked, the cards that become copies of the enchanted card will still use their own art whereas by default they would all use the card art from the enchanted card.
Flippable Cards:
----------------
Flippable cards -- cards that have an alternate card printed upside-down at the bottom -- will now flip their appearance on the battlefield when in a flipped state. They are now also flippable in the card viewer by clicking on the card image, just like double-sided "transform" cards have been. When flipped this way, the details of the flipped side can be examined in the Card Details oracle text.
High Quality Booster Pictures:
------------------------------
Forge will now download high quality booster pictures. If you are interested in these high quality booster pictures, then you should delete the pictures that are found in your <cacheDir>/pics/boosters/ directory. Then download the new pictures by using the Home View -> Game Settings -> Content Downloaders -> Download Quest Images button.
Flip, Transform and Morph cards:
--------------------------------
When you mouse over a flip, transform or Morph (controlled by you) card in battlefield, you may hold SHIFT to see other state of that card at the side panel that displays card picture and details.
Alternate sound system:
-----------------------
Implemented an alternative sound system for people who have issues with sound gradually or instantly disappearing on certain Linux systems. Can be switched on/off in the preferences without needing a restart. Uses the standard Java Sound API so it doesn't require an external dependency. It's non-caching and, as such, less efficient than the regular sound system, so only use it in case you have issues with the default system, otherwise leave the option unchecked.
Human vs Human play over the internet:
--------------------------------------
Some initial code has been added that will at some point in the future allow human vs human play over the internet. This is a work in progress and is far from being implemented at this time. Please be patient. Anyone who is curious can read the messages in the http://www.slightlymagic.net/forum/viewtopic.php?f=52&t=9837 topic.
Random Deck generation:
-----------------------
Deck generation is now strictly conforming the colors chosen. You won't get any Boros Reckoner in a RG deck, that could be added before the change (because its manacost could be paid with red mana). Avacyn's Piligrim won't be added in a deck that has green but doesn't have white, though it does not consume, but produces white mana. As well there won't be added any creatures whose activated abilities require colors not choosen for a given deck. That is to say that now color identity is used for deck generation, that allows a better filtering of cards.
Single declare attackers step:
------------------------------
Combined declare attackers step for all Defending Players/Planeswalkers. On declare attackers step you have to click the entiry you are about to attack and then click on the creatures that should attack it. Clicking on a planeswalker or player visually highlights it, so that you will see whos attackers are assigned at the moment. By default your first opponent is pre-selected.
Booster slots:
--------------
Booster slots are now way more customizable. This change allows us to implement DGM boosters correctly. Note that custom cube .draft and .sealed files have changed their format. They require a booster description instead of Num(Rarity) N lines. Find example records in files describing SkieraCube and Juzamjedi cude coming with Forge. Singleton parameter is obsolette, since all cards within a booster slot are unique. Ignore rarity is also deprecated, for Booster options allow you to pick cards regardless of rarity with 'any' word standing for ignored rarity. (ex: 15 Any)
Quest challenge start in play cards:
------------------------------------
We have received reports that the quest challenge start in play cards are not appearing on the battlefield for people who were playing the classic mode rather than the fantasy mode. This should now be fixed.
Commander:
----------
We are taking baby steps toward Commander but there are some hurdles left before we get there. We need to implement the replacement effect that moves the commander back to your command zone; the cost-changing depending on how many times you've cast your commander; generating colorless mana if you try to generate mana outside your commanders color identity and AI for all the above.
Customize your Sealed Deck games with fantasy blocks:
We have an informative topic at CCGH which explains how you can create "fantasy blocks" and the greatly increased flexibility you have when you are building your own blocks. Please see the topic http://www.slightlymagic.net/forum/viewtopic.php?f=26&t=8164 for more information. Also note that the syntax was recently changed, see message http://www.slightlymagic.net/forum/viewtopic.php?f=26&t=8164&view=unread#p117389 for additional information.
Custom Cube:
------------
1. You can create and save your cube as a constructed deck. Place the .dck file in the /res/cube directory.
2. To create a description file in the /res/draft folder you need to make a copy of any existing *.draft file and the adjust the deckfile and booster structure to meet your needs.
This file format is outdated. "NumCards" is no longer used. Instead there should be a line describing a booster.
This problem should be fixed. At least you'll see an exception/crash report describing why the match didn't start instead of a blank screen.
Duplicate triggers problem solved:
----------------------------------
This problem has now been fixed. (Mana Vortex required 2 lands, Emrakul gave 2 extra turns, Empty the Warrens creatures two Storm triggers instead of one.)
Constructed mode AI vs AI matches:
----------------------------------
Added support for AI vs AI matches. There is a checkbox which allows you to view the AI vs AI match. This is a work in progress and is not finished. While it appears to work OK there is still a need for a few UI changes. Please be patient. These AI vs AI matches will not be a good way to test out various deck types against one another as the AI does not understand card combos and the AI is still limited at this time.
Constructed mode Human vs Human Hotseat matches:
------------------------------------------------
Hotseat matches are now possible. This mode has some known bugs to fix. At this time both players must use the same computer. Human vs Human matches via the internet is planned and should become available sometime in the future. Please be patient.
Using predetermined decks in quest mode Challenges:
Added the capability to play Challenges vs predetermined decks (along with a few other related options to disallow specific quest mode things). Added Sorin vs Tibalt, and Tibalt vs Sorin as examples of Challenges that force you to use a specific Deck. (They seemed to be the best duel deck compatibility for the AI).
Targeting Overlay:
------------------
Targeting arrows will now be shown for equipments equipping permanents currently under opponent's control (for those rare cases when e.g. an equipped creature gets Switcheroo'd for something else).
The AI Drafting has been improved:
----------------------------------
The AI evaluated the basic lands higher than anything else. Fixed. The AI would pick cards with RemAIDeck but only at a much lowered pick rate. For example the best pick in a 250 card set would become the 75th best pick, the 20th best pick would become the 95th and so on. Divided this factor by 3 (so the first pick would become the 25th pick). Please test whether this has improved the draft experience.
Planechase AI:
--------------
This version of Forge includes basic support for AI opponents making use of the planar die in Planechase game mode. The AI will be able to use the "Roll the planar die" ability for most of the planes currently supported by Forge. Please note that this AI is currently in its infant stage, so don't expect it to utilize the planar die in a very smart fashion.
Adding additional opponent decks to your /res/quest/duels/ directory:
Some people are adding additional opponent decks to their /res/quest/duels/ directory in an attempt to increase the number of opponents they will face while playing a quest.
The decks located in your /res/quest/duels/ directory are text files that have a file extension of ".dck" rather than the file extension ".txt". These deck files can be loaded into a basic text editor. You can view the contents of the deck files this way.
There is a metadata line for the deck's difficulty setting. Normal decks do not contain this metadata line for the deck's difficulty setting. Starting with Forge version 1.4.3 any deck file that does not include the deck's difficulty setting will be automatically assigned a value of "medium".
You can add a line for the deck's difficulty setting using a text editor and then saving the deck file. Currently, Forge will recognize the following settings:
Difficulty=easy
Difficulty=medium
Difficulty=hard
Difficulty=very hard
At the start of a new quest you will only face opponent decks that have an easy difficulty setting. After you have won a number of matches you will then face the opponent decks that have a medium difficulty setting. After you have won an additional number of matches you will then face the opponent decks that have a hard difficulty setting. Opponent decks that have a very hard difficulty setting may occassionally appear as a possible opponent instead of a opponent deck that has a hard difficulty setting.
- version 1.4.4 -
We were not able to release version 1.4.4 and are releasing 1.4.5 instead. Enjoy.
- Deck Editor and General UI improvements -
You can now right-click on a color filter button to show only cards of that color, filtering out all other colors. Similar with card type filter buttons.
Can double click row for deck to open it (in addition to clicking edit icon)
The selected tab on each draggable pane will now be remembered between sessions
Fixed bug where hover effect didn't work the first time hovering over a row that had just been deselected
Fixed bug where middle and right clicking buttons did the same behavior as left clicking, and fixed bug where clicking multiple buttons quickly (such as filters) while moving the mouse around would result in clicks not registering sometimes.
Fixed so cards are "selected" on mouse up instead of mouse down, allowing things like drag drop and zoom to work if the card is currently actionable
Fixed so, after dragging a pane tab to a new location, the pane it was in before selects its most recent remaining tab instead of being blank
- Card Zoomer -
Now you can gaze at your HQ images in all their glory with just a flick of the mousewheel, holding the middle mouse button down, or holding the left and right mouse buttons down at the same time. This feature will also increase the size of low quality pics up to the size used for high quality pics, but the image will not be very clear.
Instructions:
- Works on any card image in the Deck Editor or Duel screen.
- Move your mouse over the card you want to zoom and mouse-wheel forward.
- Mouse-wheel back, mouse click or pressing ESC closes the zoomed image.
Limitations:
- Only works with the mouse wheel at the moment.
- Does not show the other side of double-sided cards yet.
WIP:
- Press and hold the CTRL key while mousing over a card to see zoomed image.
- Flipping double-sided card.
- Preferences updates -
All reset buttons now appear under Troubleshooting section. Increased visibility of Troubleshooting section by moving to the top of the preferences screen. Added confirmation dialogs to all reset buttons.
Converted Skins list to themed combo and added to new Visual Themes section. Converted AI Profile list to themed combo and moved to top of GamePlay section. New Visual Themes setting to hide or show background image on match screen. Default show.
These new themed combo boxes when used with a theme which uses white colored text will cause readability problems for people using Mac OS X. A new "Themed ComboBox" setting is now available in the preferences section which will enable/disable themed combos should you be having readability problems with the new themed combo used in the preferences page.
- Window size/position now remembered between sessions -
Works with multiple monitors.
Remembers whether the window was maximized or un-maximized.
The first time you launch Forge after this update, the window will be maximized on default monitor, with 800x600 centered being used if you un-maximize. This matches how it worked before.
Remembers last un-maximized size even if the window is currently maximized such that, if you un-maximize the window, it will restore to that size at the center of the current monitor.
Window will be made accessible even if monitor setup or screen resolution is different between sessions.
- Card Zoomer Updates -
The Card Zoomer/Preview now supports split, flip and double-sided cards including cards played face down (eg. morph).
Split cards (name contains "//") are now rotated 90 degrees for easier viewing.
If a card is a flip- or double-sided card then you can easily view the alternate image using...
- wheel mode : flick wheel forward or tap CTRL key.
- button mode : tap CTRL key.
The standard flip graphic (the two rotated arrows) is displayed if the card can be flipped or transformed.
- Home Screen UI Improvements -
The menu on the Home Screen is now scrollable using either a mouse wheel or arrow buttons that will appear at the top or bottom if scrolling can occur in that direction
The Deck Editor and Exit Forge buttons are now laid out vertically to make it easier to add launch buttons for new screens coming down the pipeline (hint, hint...)
The menu on the Home Screen has been made narrower and the logo size increased to decrease whitespace and increase the width of the main panel
Release notes added to Games Settings section.
- User Preferences -
There's a new user preference that lets you choose whether a 0-cost block should prompt you to pay or to pay it automatically. This only affects blocking situations where you would have to actually pay 0, (e.g. War Cadence with X = 0). By default you'll be prompted for payment, allowing you to, for instance, prevent forced blocks by activating War Cadence for 0 then not paying the block cost.
- Match and Deck Editor Layout problems -
The match and deck editor windows contain panels that can be moved and/or resized. The changes that you make are saved to files that are named "editor.xml" and "match.xml". These files can be found in your userDir/preferences/ directory.
Sometimes people will decide that they do not like the changes that they made and wish to go back to the original layout. To reset layouts to default, go to the Game Settings -> Preferences -> Troubleshooting section. You will find at this location two buttons that will reset the match layout and the deck editor layouts.
Also use the mentioned measure if your match or deckeditor won't start - it would help in 90% of the cases.
- Constructed Mode decks can now be stored in subfolders -
The feature is half-complete now. Forge can read subfolders in constructed deck, you may start game with such deck, but cannot yet edit decks in subfolders nor manipulate subfolders.
=== Forge now has a Menubar ===
- Toggle visibility using the F1 key.
- The Forge menu contains Exit and Restart options.
- The Layout menu contains the selector for the various themes and a Set Window Size option.
- The Help menu contains links to online articles and the local TXT files.
=== Duel/Match Screen Changes ===
- Fixed: Concede is prevented during the declare blockers step.
== Menubar Changes ==
- Migration of Dock and DevMode options into Menubar.
- Toggle console tabs visibility.
- Toggle background image.
- Toggle sound effects.
== Game Log Console ==
- Scrollbar is now hidden by default. Click console to toggle visibility.
== Prompt Console ==
- Fixed: Prevent buttons from disappearing off screen as the console size is decreased.
== Card Preview Console ==
- Fixed: now adheres to Scale Image Larger setting.
=== General GUI ===
== Themes ==
- Combo-box style should now be appear correctly on Mac OS .
Our Lawyers Made Us Do This:
----------------------------
This product includes software developed by the Indiana University Extreme! Lab (http://www.extreme.indiana.edu/).
<conditionproperty="fullversionstring"value="${project.version}-r${forge.revision}${forge.specialStatus}"else="${project.version}-r${forge.revision}${forge.specialStatus} (mixed revisions detected; please update from the root directory)">
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
Banned:Ancestral Vision; Ancient Den; Bitterblossom; Blazing Shoal; Bloodbraid Elf; Chrome Mox; Cloudpost; Dark Depths; Dread Return; Glimpse of Nature; Golgari Grave-Troll; Great Furnace; Green Sun's Zenith; Hypergenesis; Jace, the Mind Sculptor; Mental Misstep; Ponder; Preordain; Punishing Fire; Rite of Flame; Seat of the Synod; Seething Song; Sensei's Divining Top; Stoneforge Mystic; Skullclamp; Sword of the Meek; Tree of Tales; Umezawa's Jitte; Vault of Whispers; Wild Nacatl
[Legacy]
Banned:Amulet of Quoz; Ancestral Recall; Balance; Bazaar of Baghdad; Black Lotus; Black Vise; Bronze Tablet; Channel; Chaos Orb; Contract from Below; Darkpact; Demonic Attorney; Demonic Consultation; Demonic Tutor; Earthcraft; Falling Star; Fastbond; Flash; Frantic Search; Goblin Recruiter; Gush; Hermit Druid; Imperial Seal; Jeweled Bird; Land Tax; Library of Alexandria; Mana Crypt; Mana Drain; Mana Vault; Memory Jar; Mind Twist; Mind's Desire; Mishra's Workshop; Mox Emerald; Mox Jet; Mox Pearl; Mox Ruby; Mox Sapphire; Mystical Tutor; Necropotence; Oath of Druids; Rebirth; Shahrazad; Skullclamp; Sol Ring; Strip Mine; Survival of the Fittest; Tempest Efreet; Time Vault; Time Walk; Timetwister; Timmerian Fiends; Tinker; Tolarian Academy; Vampiric Tutor; Wheel of Fortune; Windfall; Worldgorger Dragon; Yawgmoth's Bargain; Yawgmoth's Will; Mental Misstep
# 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):
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'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.)'
T:Mode$ SetInMotion | ValidCard$ Card.Self | Execute$ DarkEffect | TriggerZones$ Command | TriggerDescription$ When you set this scheme in motion, until your next turn, whenever a player taps a land for mana, that player adds one mana to his or her mana pool of any type that land produced.
SVar:DarkEffect:AB$ Effect | Cost$ 0 | Name$ Dark Power Scheme | Duration$ UntilYourNextTurn | Triggers$ DarkPower | SVars$ DarkMana
SVar:DarkPower:Mode$ TapsForMana | ValidCard$ Land | Execute$ DarkMana | TriggerZones$ Command | Static$ True | TriggerDescription$ Whenever a player taps a land for mana, that player adds one mana to his or her mana pool of any type that land produced.
SVar:DarkMana:AB$ ManaReflected | Cost$ 0 | ColorOrType$ Type | Valid$ Defined.Triggered | ReflectProperty$ Produced | Defined$ TriggeredPlayer
Oracle:When you set this scheme in motion, until your next turn, whenever a player taps a land for mana, that player adds one mana to his or her mana pool of any type that land produced.
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.
Oracle:As an additional cost to cast Abandon Hope, discard X cards.\nLook at target opponent's hand and choose X cards from it. That player discards those cards.
End
Name:Abandon Hope
ManaCost:X 1 B
Types:Sorcery
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.
Oracle:As an additional cost to cast Abandon Hope, discard X cards.\nLook at target opponent's hand and choose X cards from it. That player discards those cards.
Oracle:Abandoned Outpost enters the battlefield tapped.\n{T}: Add {W} to your mana pool.\n{T}, Sacrifice Abandoned Outpost: Add one mana of any color to your mana pool.
End
Oracle:Abandoned Outpost enters the battlefield tapped.\n{T}: Add {W} to your mana pool.\n{T}, Sacrifice Abandoned Outpost: Add one mana of any color to your mana pool.
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 | References$ X
Oracle:First strike\nWhenever a creature dealt damage by Abattoir Ghoul this turn dies, you gain life equal to that creature's toughness.
End
Name:Abattoir Ghoul
ManaCost:3 B
Types:Creature Zombie
PT:3/2
K:First Strike
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 | References$ X
T:Mode$ ChangesZone | ValidCard$ Card.AttachedBy | Origin$ Battlefield | Destination$ Graveyard | TriggerZones$ Battlefield | Execute$ TrigReturnOwner | TriggerDescription$ When enchanted creature is put into a graveyard, return that card to the battlefield under its owner's control.
T:Mode$ ChangesZone | ValidCard$ Card.AttachedBy | Origin$ Battlefield | Destination$ Graveyard | Execute$ TrigReturnOwner | TriggerDescription$ When enchanted creature dies, return that card to the battlefield under its owner's control.
Oracle:Enchant creature\nWhen Abduction enters the battlefield, untap enchanted creature.\nYou control enchanted creature.\nWhen enchanted creature dies, return that card to the battlefield under its owner's control.
End
Oracle:Enchant creature\nWhen Abduction enters the battlefield, untap enchanted creature.\nYou control enchanted creature.\nWhen enchanted creature dies, return that card to the battlefield under its owner's control.
A:SP$ Effect | Cost$ 1 W | ValidTgts$ Player | Name$ Abeyance Effect | StaticAbilities$ STCantBeCast,STCantBeActivated | RememberObjects$ Targeted | AILogic$ BeginningOfOppTurn | SubAbility$ DBDraw | SpellDescription$ Until end of turn, target player can't cast instant or sorcery spells, and that player can't activate abilities that aren't mana abilities.
SVar:STCantBeCast:Mode$ CantBeCast | ValidCard$ Instant,Sorcery | Caster$ Player.IsRemembered | Description$ Target player can't cast instant or sorcery spells, and that player can't activate abilities that aren't mana abilities.
SVar:DBDraw:DB$Draw | NumCards$ 1 | SpellDescription$ Draw a card.
SVar:Rarity:Rare
SVar:STCantBeCast:Mode$ CantBeCast | ValidCard$ Instant,Sorcery | Caster$ Player.IsRemembered | EffectZone$ Command | Description$ Target player can't cast instant or sorcery spells, and that player can't activate abilities that aren't mana abilities.
Oracle:Until end of turn, target player can't cast instant or sorcery spells, and that player can't activate abilities that aren't mana abilities.\nDraw a card.
End
Oracle:Until end of turn, target player can't cast instant or sorcery spells, and that player can't activate abilities that aren't mana abilities.\nDraw a card.
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME enters the battlefield, put a number of 1/1 black Harpy creature tokens with flying onto the battlefield equal to your devotion to black.
SVar:TrigToken:AB$ Token | Cost$ 0 | TokenAmount$ X | References$ X | TokenName$ Harpy | TokenTypes$ Creature,Harpy | TokenOwner$ You | TokenColors$ Black | TokenPower$ 1 | TokenToughness$ 1 | TokenKeywords$ Flying
SVar:X:Count$Devotion.B
T:Mode$ Phase | Phase$ Upkeep | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ At the beginning of your upkeep, sacrifice a creature.
Oracle:Flying\nWhen Abhorrent Overlord enters the battlefield, put a number of 1/1 black Harpy creature tokens with flying onto the battlefield equal to your devotion to black. (Each {B} in the mana costs of permanents you control counts toward your devotion to black.)\nAt the beginning of your upkeep, sacrifice a creature.
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$ AttackerBlocked | ValidCard$ Creature.Green,Creature.White | ValidBlocker$ Card.Self | 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.
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$ 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.)
End
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.)
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ Shroud | Threshold$ True | Description$ Threshold - Enchanted creature has shroud as long as seven or more cards are in your graveyard. (It can't be the target of spells or abilities.)
SVar:Rarity:Common
S:Mode$ Continuous | Affected$ Creature.EnchantedBy | AddKeyword$ Shroud | Condition$ Threshold | Description$ Threshold - Enchanted creature has shroud as long as seven or more cards are in your graveyard. (It can't be the target of spells or abilities.)
Oracle:Enchant creature\nEnchanted creature has flying.\nThreshold - Enchanted creature has shroud as long as seven or more cards are in your graveyard. (It can't be the target of spells or abilities.)
End
Oracle:Enchant creature\nEnchanted creature has flying.\nThreshold - Enchanted creature has shroud as long as seven or more cards are in your graveyard. (It can't be the target of spells or abilities.)
A:SP$ Pump | Cost$ R | ValidTgts$ Creature | TgtPrompt$ Select target creature | KW$ HIDDEN CARDNAME's power and toughness are switched | SpellDescription$ Switch target creature's power and toughness until end of turn.
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.
Oracle:Haunt (When this creature dies, exile it haunting target creature.)\nWhen Absolver Thrull enters the battlefield or the creature it haunts dies, destroy target enchantment.
A:SP$ Counter | Cost$ W U U | TargetType$ Spell | TgtPrompt$ Select target spell | ValidTgts$ Card | SpellDescription$ Counter target spell. You gain 3 life. | SubAbility$ DBGainLife
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
Oracle:Target player loses 4 life and you gain 4 life.\nBasic landcycling {1}{B} ({1}{B}, Discard this card: Search your library for a basic land card, reveal it, and put it into your hand. Then shuffle your library.)
End
Oracle:Target player loses 4 life and you gain 4 life.\nBasic landcycling {1}{B} ({1}{B}, Discard this card: Search your library for a basic land card, reveal it, and put it into your hand. Then shuffle your library.)
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:AB$ PreventDamage | Cost$ T | ValidTgts$ Creature,Player | TgtPrompt$ Select target creature or player | Amount$ 1 | SpellDescription$ Prevent the next 1 damage that would be dealt to target creature or player this turn.
A:AB$ PreventDamage | Cost$ T | ValidTgts$ Creature.Artifact | Amount$ 2 | TgtPrompt$ Select target artifact creature | SpellDescription$ Prevent the next 2 damage that would be dealt to target artifact creature this turn.
Oracle:{T}: Prevent the next 1 damage that would be dealt to target creature or player this turn.\n{T}: Prevent the next 2 damage that would be dealt to target artifact creature this turn.
End
Oracle:{T}: Prevent the next 1 damage that would be dealt to target creature or player this turn.\n{T}: Prevent the next 2 damage that would be dealt to target artifact creature this turn.
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$ GainLife | Cost$ 5 W | PrecostDesc$ Entwine | CostDesc$ 2 | LifeAmount$ 5 | NonBasicSpell$ True | SpellDescription$ (Choose both if you pay the entwine cost.) | SubAbility$ DBPreventDamage
Oracle:Choose one - You gain 5 life; or prevent the next 5 damage that would be dealt to target creature this turn.\nEntwine {2} (Choose both if you pay the entwine cost.)
End
Oracle:Choose one - You gain 5 life; or prevent the next 5 damage that would be dealt to target creature this turn.\nEntwine {2} (Choose both if you pay the entwine cost.)
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.
End
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
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 | 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:Rarity:Common
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 | References$ X | SpellDescription$ Tap target creature. CARDNAME deals damage equal to CARDNAME's power to that creature.
T:Mode$ Discarded | ValidCard$ Card.YouDontCtrl | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ Whenever an opponent discards a card, CARDNAME gets +2/+2 and gains fear until end of turn. (It can't be blocked except by artifact creatures and/or black creatures.)
T:Mode$ Discarded | ValidCard$ Card.OppOwn | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ Whenever an opponent discards a card, CARDNAME gets +2/+2 and gains fear until end of turn. (It can't be blocked except by artifact creatures and/or black creatures.)
Oracle:Whenever an opponent discards a card, Abyssal Nocturnus gets +2/+2 and gains fear until end of turn. (It can't be blocked except by artifact creatures and/or black creatures.)
End
Oracle:Whenever an opponent discards a card, Abyssal Nocturnus gets +2/+2 and gains fear until end of turn. (It can't be blocked except by artifact creatures and/or black creatures.)
T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | Execute$ TrigDiscard | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals damage to a player, that player discards a card.
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | TriggerZones$ Command | IsPresent$ Card.YouCtrl | PresentZone$ Hand | PresentCompare$ EQ0 | Execute$ AcademicDraw | TriggerDescription$ At the beginning of your end step, if you have no cards in hand, draw seven cards.
T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | Execute$ TrigDiscard | CombatDamage$ True | OptionalDecider$ You | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, you may discard a card. If you do, draw a card.
Oracle:Intimidate (This creature can't be blocked except by artifact creatures and/or creatures that share a color with it.)\nWhenever Academy Raider deals combat damage to a player, you may discard a card. If you do, draw a card.
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.
Oracle:When Academy Rector dies, you may exile it. If you do, search your library for an enchantment card, put that card onto the battlefield, then shuffle your library.
End
Oracle:When Academy Rector dies, you may exile it. If you do, search your library for an enchantment card, 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:AB$ Mana | Cost$ T | Produced$ 1 | SpellDescription$ Add 1 to your mana pool.
A:AB$ ChangeZone | Cost$ 1 U T | TgtPrompt$ Choose target artifact card in your graveyard | ValidTgts$ Artifact.YouCtrl | Origin$ Graveyard | Destination$ Library | SpellDescription$ Put target artifact card from your graveyard on top of your library.
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.
T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigBattleCry | TriggerDescription$ Battle cry (Whenever this creature attacks, each other attacking creature gets +1/+0 until end of turn.)
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 | References$ 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.
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.
End
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.
End
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."
SVar:Damage:AB$DealDamage | Cost$ 2 Sac<1/CARDNAME> | Tgt$ TgtCP | NumDmg$ 2 | SpellDescription$ CARDNAME deals 2 damage to target creature or player.
SVar:Damage:AB$DealDamage | Cost$ 2 Sac<1/CARDNAME> | ValidTgts$ Creature,Player | TgtPrompt$ Select target creature or player | NumDmg$ 2 | SpellDescription$ CARDNAME deals 2 damage to target creature or player.
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 | References$ Y
SVar:X:Count$TypeYouCtrl.Land
SVar:Y:Count$TypeOppCtrl.Land
A:SP$ RepeatEach | Cost$ 2 R | RepeatPlayers$ Player | RepeatSubAbility$ DBDamageOpp | SpellDescription$ CARDNAME deals damage to each player equal to the number of lands he or she controls.
SVar:DBDamageOpp:DB$ DealDamage | Defined$ Remembered | NumDmg$ X | References$ X
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.
End
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.
Oracle:Put two 1/1 green Squirrel creature tokens onto the battlefield.\nFlashback-{1}{G}, Pay 3 life. (You may cast this card from your graveyard for its flashback cost. Then exile it.)
End
Oracle:Put two 1/1 green Squirrel creature tokens onto the battlefield.\nFlashback-{1}{G}, Pay 3 life. (You may cast this card from your graveyard for its flashback cost. Then exile it.)
A:SP$ ChangeZone | Cost$ 3 U U | Origin$ Library | Destination$ Battlefield | ValidTgts$ Opponent | ChangeType$ Artifact | ChangeNum$ 1 | GainControl$ True | IsCurse$ True | SpellDescription$ Search target opponent's library for an artifact card and put that card onto the battlefield under your control. Then that player shuffles his or her library.
SVar:Rarity:Rare
A:SP$ ChangeZone | Cost$ 3 U U | Origin$ Library | Destination$ Battlefield | ValidTgts$ Opponent | ChangeType$ Artifact | ChangeNum$ 1 | GainControl$ True | IsCurse$ True | StackDescription$ SpellDescription | SpellDescription$ Search target opponent's library for an artifact card and put that card onto the battlefield under your control. Then that player shuffles his or her library.
Oracle:Search target opponent's library for an artifact card and put that card onto the battlefield under your control. Then that player shuffles his or her library.
End
Oracle:Search target opponent's library for an artifact card and put that card onto the battlefield under your control. Then that player shuffles his or her library.
Oracle:Echo {1}{G} (At the beginning of your upkeep, if this came under your control since the beginning of your last upkeep, sacrifice it unless you pay its echo cost.)
End
Oracle:Echo {1}{G} (At the beginning of your upkeep, if this came under your control since the beginning of your last upkeep, sacrifice it unless you pay its echo cost.)
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.
Oracle:({R/P} can be paid with either {R} or 2 life.)\nGain control of target creature an opponent controls until end of turn. Untap that creature. It gains haste until end of turn.
End
Oracle:({R/P} can be paid with either {R} or 2 life.)\nGain 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$ 2 R | ValidTgts$ Creature | TgtPrompt$ Select target creature | LoseControl$ EOT | Untap$ True | AddKWs$ Haste | SpellDescription$ Gain control of target creature until end of turn. Untap that creature. It gains haste until end of turn.
A:SP$ Destroy | Cost$ R | ValidTgts$ Permanent.Blue | TgtPrompt$ Select target blue permanent | PrecostDesc$ Choose one - | SpellDescription$ Destroy target blue permanent;
A:SP$ ChangeZone | Cost$ R | ValidTgts$ Island | TgtPrompt$ Select target Island | Origin$ Battlefield | Destination$ Hand | SpellDescription$ or return target Island to its owner's hand.
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.
End
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.
S:Mode$ Continuous | EffectZone$ All | CharacteristicDefining$ True | SetPower$ X | SetToughness$ X | Description$ CARDNAME's power and toughness are each equal to the number of cards in the hand of the opponent with the most cards in hand.
SVar:ChooseCT:DB$ ChooseType | Type$ Creature | AILogic$ MostProminentInComputerDeck | SpellDescription$ As CARDNAME enters the battlefield, choose a creature type.
S:Mode$ Continuous | Affected$ Card.Self | AddType$ ChosenType | Description$ CARDNAME is the chosen type in addition to its other types.
S:Mode$ Continuous | Affected$ Creature.ChosenType+Other+YouCtrl | AddPower$ 1 | AddToughness$ 1 | Description$ Other creatures you control of the chosen type get +1/+1.
Oracle:As Adaptive Automaton enters the battlefield, choose a creature type.\nAdaptive Automaton is the chosen type in addition to its other types.\nOther creatures you control of the chosen type get +1/+1.
End
Oracle:As Adaptive Automaton enters the battlefield, choose a creature type.\nAdaptive Automaton is the chosen type in addition to its other types.\nOther creatures you control of the chosen type get +1/+1.
Oracle:Evolve (Whenever a creature enters the battlefield under your control, if that creature has greater power or toughness than this creature, put a +1/+1 counter on this creature.)
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.
Oracle:Flying, vigilance\n{T}: When target creature other than Adarkar Valkyrie dies this turn, return that card to the battlefield under your control.
End
Oracle:Flying, vigilance\n{T}: When target creature other than Adarkar Valkyrie dies this turn, return that card to the battlefield under your control.
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigClash | TriggerDescription$ When CARDNAME enters the battlefield, clash with an opponent. If you win, put a +1/+1 counter on CARDNAME.
Oracle:When Adder-Staff Boggart enters the battlefield, clash with an opponent. If you win, put a +1/+1 counter on Adder-Staff Boggart. (Each clashing player reveals the top card of his or her library, then puts that card on the top or bottom. A player wins if his or her card had a higher converted mana cost.)
End
Oracle:When Adder-Staff Boggart enters the battlefield, clash with an opponent. If you win, put a +1/+1 counter on Adder-Staff Boggart. (Each clashing player reveals the top card of his or her library, then puts that card on the top or bottom. A player wins if his or her card had a higher converted mana cost.)
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.