-------------------------------------------------------------------------------- ---- Riiak Shi Nal's Duels of the Planeswalkers 2013 Deck Builder v1.4.2.1 ----- -------------------------------------------------------------------------------- This is not the first nor am I saying this is the best (because it probably isn't) Deck Builder. This is intended to be a simple deck builder for new users or for those who are new to modding. It asks for the location of the DotP 2013 game directory and will load most of the resources from there (without creating lots of directories or unpacking a lot of wads). It allows the user to build a deck from any cards they currently have installed and helps them in building images for the deck, preview cards, and AI Personality images as necessary. It will also attempt to prevent users from re-using deck uids and other little annoyances that can prevent one thing or another from working. I, Riiak Shi Nal, have tried to make this work as simply as possible while still retaining a lot of the power that is given to modders. There are some things that work a bit differently than you might expect and there are items that have some nice little features that you may not notice at first. I will try to cover those things in this document. -------------------------------------------------------------------------------- Contents: -------------------------------------------------------------------------------- - Main differences from other Builders/Editors - Requirements - Getting Started - Adding Cards - Removing Cards - Saving - Exporting - Exporting Images - Id Schemes - Building images - Card, Deck, and Unlock Views - Deck Statistics - Land Config - Bias & Promo Statuses - Regular Unlocks - Promo Unlocks - Advanced Filtering - Tools: Create AppId Linking Wad - Tools: Custom Data Folder & Creating a Core Wad - Planned Enhancements - Considered Features - Known Issues - Frequently Asked Questions (FAQ) - Credits & Thanks - Change History - Contact Information -------------------------------------------------------------------------------- Main differences from other Builders/Editors -------------------------------------------------------------------------------- - Does not require wads to be extracted/imported to use resources from them. Automatically uses all available game resources (cards, decks, unlocks, images, personalities, etc...) from the game directory you point it to. - Actually builds the card preview images for the user (user only selects which card they want to use for the preview card). - Automatically calculates deck colour (or lack thereof). - Will assist the user in building appropriate images for deck boxes and AI personalities. - Program itself is localizable (translations need to be finished though) so you can use the program in your selected language. - Supports TDX compression of generated images. - Supports generation of AppId Linking wads for Steam, Skidrow, and Theta versions. -------------------------------------------------------------------------------- Requirements: -------------------------------------------------------------------------------- - .Net 4.0 Framework - This is the framework version that I compiled using. - Modified Gibbed Tools (version r6_b10 modified, included) - I reference the gibbed tools libraries for parsing wads and tdx images. I do not use the executables as I have created class wrappers that allow me to do the work I need to do in code rather than from the command line. Source code from the executables was used rather heavily in the development of the wrappers. Gibbed Tools Squish and FileFormats have to be my modified versions for the compression of TDX images, the reason I can't just fall back on the original versions is because I specifically reference functions I added to make the compression features work. Source code for the modified versions can be found here: http://www.slightlymagic.net/forum/viewtopic.php?f=99&t=10463 -------------------------------------------------------------------------------- Getting Started: -------------------------------------------------------------------------------- When you first open the Deck Builder for the first time it will state that the game directory has not been set and needs to be set to continue. Clicking "OK" will bring up the "Options" window where you can either enter or select a working game directory where the builder will load most of its resources from. In this screen it is also highly recommended that you change the Id Scheme options to help prevent unique id collisions with other modders (more on Id Schemes later in this document). Also if your native language is not English you can also change the language that this program will run in. Due note however that since I only know English (and a little Japanese) that the only localization I have been able to fully fill out is the English localization. Once you have specified the game directory and clicked "Apply" the builder will load all the wads (and "wad directories") from the game directory and populate the card list at the bottom of the screen. To keep things simple you can simply double-click on a card and it will add it to either the deck or one of the unlocks as per which radio button is selected above the card list. You can edit the deck name (in all supported languages) by clicking the "Edit Name" button above the deck cards list. Much of the rest of the deck info can be edited and/or managed by clicking the "Deck Information" button below the deck cards list. This includes the deck's availability, which card to make the preview images from, the deck's uid (which will be modified by the Id Scheme), deck statistics, land configuration, and building of the deck box image. You can also save and open deck's using the file menu. If you are looking at the file menu you will also notice an option for creating a deck from an existing deck. This means that you can select one of the deck's that you already have installed to work from as a base. Note that creating a deck from one you already have installed is NOT the same as editing a deck. This builder does not support deck "editing" only "building" (creating new decks). There are several reasons for this such as the problems inherent with users changing base game wads and the chance that a user will overwrite something they shouldn't. Once you are finished editing your deck you can "Export" the deck using the file menu's "Export To" menu. You have two options for exporting you can export as a directory (which the game will read from like a wad if a wad with the same name is not present) or as a wad (which will package up all the files generated in a single compressed wad file). Once generation is complete you will have both the generated wad (or directory) and a fairly generic readme file for your deck. -------------------------------------------------------------------------------- Adding Cards: -------------------------------------------------------------------------------- You can easily add cards by either hitting "Enter" while you have a card highlighted in the main card list or by "Double-Clicking" the card you want to add. If you are adding cards to the main deck and you add a single card more than once it will simply increment the quantity of that card that you have in the main deck. This does not apply if you have given a card in the deck a special status such as Bias or Promo status. When a card is added it is added at a Bias of 1 and no Promo status so if there is a card in the deck with a Bias of 2 or 3, or you have given that card Promo status then you add another copy of that card from the main card list, the added card will show up in your list as a separate instance with a Bias of 1 and no Promo status. For the unlocks each card will always have a quantity of 1 because each unlock needs to be a single card and you may want to stagger a few copies of a card throughout the unlock list which can only really be done if all the cards have a quantity of 1. This builder does not put limits on the total number of cards that can be added to a deck and its unlocks (except for Promo unlocks which has a max number of ten cards). This does mean that you could design a deck that has hundreds of cards in it, but it probably won't work properly in game. The game uses a single byte for the deckOrderId and for keeping track of whether a card is in the deck or not. Practically this means that deckOrderIds of 0 through 127 are available for use (128 card max) and this limit applies to the total number of cards a deck has including the unlocks. While the max card limit for decks to be used in game is 128 cards the game itself is optimized for a 60 card deck and up to about 40 total unlocks (100 total cards) including the basic land in the main deck. -------------------------------------------------------------------------------- Removing Cards: -------------------------------------------------------------------------------- To remove cards from the deck or from the unlocks make sure the card you want to remove is highlighted, the focus is on that listing and hit delete on the keyboard ("Del" key). you can also right-click the card you want to remove and select "Remove Card". Note: You can't remove cards from the main card list (this program does not support changing existing wads). If you simply want to filter which cards are shown in the main card list then use the "Set Filters" button and select which filters you want to use. -------------------------------------------------------------------------------- Saving: -------------------------------------------------------------------------------- Saving operates a bit differently than you might expect. It will save out the deck, but the file generated when you save is not meant to be used by the game. It contains extra information so that the Deck Builder does not need to manage multiple linked files. For example all saved decks will also include the land pool in a tag inside the deck. All unlocks, strings, and images generated will also be included inside the deck. If you want to generate files that are appropriate for the game to use then you need to "Export" the deck. -------------------------------------------------------------------------------- Exporting: -------------------------------------------------------------------------------- When you export a deck it will automatically name the output wad (or directory) based on the final deck uid and the English name of the deck codified to be file system friendly. So if you name your deck "My First Deck" and you are using the default Id Scheme with an id of 0 then the name or your exported wad will be "DECK_100000_MY_FIRST_DECK.wad". This is done this way for a few reasons: - Mods must start with either "DECK_" or "DATA_DLC_" (case insensitive) to be recognized. - Putting the Deck's uid in the wad name makes figuring out the uid of the deck inside very easy (for making APPID_LINKING.TXT blocks if necessary). - Having the Deck name in the filename makes managing custom decks easier for the user because the name they see in game relates to the one they see on the wad. Now there may be some differences for this due to language localizations, but this is a good compromise. The exported wad (or directory) will automatically be put into the game directory so that it is ready to use. Also by having it in the game directory it will also be loaded into the builder as an existing deck the next time the builder is run. -------------------------------------------------------------------------------- Exporting Images: -------------------------------------------------------------------------------- You can export images by right-clicking them and selecting "Export Image" and choosing either PNG or TDX as the format to export as. Images will be exported as you see them there will be no further processing before export (except to compress when saving to TDX). The card preview you see in the main window (and view card window) without border will compress to DXT1 format when saving to TDX, all other images will compress to DXT5 when saving to TDX. If you choose to "Export Card Previews" it will ask you to specify the save location and filename for just the English preview image, it will take your response and use that to determine where to save and how to name the other localizations of the preview image. -------------------------------------------------------------------------------- Id Schemes: -------------------------------------------------------------------------------- Id Schemes are something I came up with to ease making sure all deck, land pool, and unlock ids are unique and don't conflict with other decks. There are three possible scheme types that can be used. You can see previews of the ids that will be generated by a scheme in the options window. Additive Schemes - These schemes simply add a number to each of the ids to get the next successive id. A simple example would be that your for your deck you choose id 1. The land pool may then have id 2, regular unlocks id 3, and promo unlocks could get id 4. This is a very simplistic scheme, easy to understand and use. Prefix Schemes - These are my preferred schemes. A prefix scheme puts a pre- specified prefix in front of the various ids allowing for very unique ids in a single large numeric block. Both myself and thefiremind use variations on this scheme type as do several other modders. For my conversions of the DotP 2010 decks I used this scheme (though I did it manually): Minimum Id Digits: 3 Minimum Id: 0 Maximum Id: 999 Deck Prefix: 819290 Land Pool Prefix: 819291 Regular Unlocks Prefix: 819292 Promo Unlocks Prefix: 819293 Basically thefiremind uses this Id Scheme (though he also did his manually): Minimum Id Digits: 2 Minimum Id: 0 Maximum Id: 99 Deck Prefix: 1999 Land Pool Prefix: 19991 Regular Unlocks Prefix: His decks no longer use regular unlocks. Promo Unlocks Prefix: 19992 The default scheme uses a modification on the scheme used by thefiremind except I place it in the 1000 block instead of his 1999 block. If you use this scheme type I highly recommend changing it to put it into a block unique to you. Using the default scheme (prefix type) if you give a deck id 0 when exported it will export with an id of 100001, the land pool will be 1000101, any regular unlocks will have the id 1000201 and promo unlocks will get the id 1000301. Suffix Schemes - These are similar to Prefix schemes except they append the block to the end of the number instead of to the beginning. Though it should be noted that leading zeros are dropped (because that is how the game reads them anyway) so if have a deck id of 0 and a deck suffix of 1000 when you export you will get an id of 1000, not 01000. -------------------------------------------------------------------------------- Building images: -------------------------------------------------------------------------------- When you start working with images either for the deck box or for the AI Personality you will have three options. You can use the current image if any. Load an image (you will get an open dialog window when you select this option) which will allow you to select an image you have already crafted for this purpose. Or you can build an image which will give you an open dialog much like loading an image, but it will mask and overlay the image as necessary to create a composited image suitable for use. When you are building images you can adjust the image being masked by changing the location and size numbers near the image or you can pan the image by left- clicking and drag the mouse on the image. You can also zoom in and out by rotating the mouse wheel. -------------------------------------------------------------------------------- Card, Deck, and Unlock Views: -------------------------------------------------------------------------------- On each of the Card, Deck, and Unlock views you can right click to get a context menu that will allow you to hide (or unhide) the columns that are visible for that view. Additionally on any view that has card information a "View Card" option will appear on the context menu which will give you a view of the current localized card image and a complete listing of that card's XML. You can also query which decks if any are using a specific card by using the "Decks Used In" option. The program checks cards used in decks by filename so if a card is present in more than one wad with the same filename it will locate all decks that use that card's filename and not just those decks related to that wad. -------------------------------------------------------------------------------- Deck Statistics: -------------------------------------------------------------------------------- The deck statistics you choose in the deck information screen (Size, Speed, Flexibility, and Synergy) are for choosing what displays for those lines in the deck manager in game. While the game uses a 5 star system the decks themselves use numbers from 0 to 10 and "?". The question mark is allowed internally by the program, but is not user selectable mainly because it shows up as 5 stars in game just like the numeric value 10. Whole stars are given for each even number so a value of 2 is 1 star, 4 is 2 stars, 6 is 3 stars, etc.... If you select an odd number the game will display the appropriate number of whole stars, plus a half star. So if you select 5 (the default for all statistics) it will show as 2 and a half stars in game. -------------------------------------------------------------------------------- Land Config: -------------------------------------------------------------------------------- Land configurations are for the fine tuning of the land distributions for decks. If everything is left at defaults (Ignore CMC Over at -1, everything else at 0) then the LandConfig tag will not be generated and the game will use its standard method of determining what basic land to put in the deck. The Minimum Land options are for determining the minimum number of that specific land to add to the deck if it will remain at 60 cards or less. If you have a deck with 50 non-land cards and you specify 10 forests and 12 swamps then you will not get that much land in game as those settings would put the deck over 60 cards. The game will only add basic lands up to 60 cards, so these options are more for fine-tuning ratios that the game will assign rather than the rule the game will follow. If you want to specify the exact land config the game will use (again following the 60 card rule regarding lands explained in the paragraph above) then you can set Ignore CMC Over to 0 and Number of Spells that Count as Land to 0 (this is important as the game will subtract this number from your min land config) and set the minimum land options to the number of lands you want. Remember the game will only add basic lands until you reach a total of 60 cards in the deck if it reaches 60 cards before it has finished adding the land from your land config then it will simply stop adding basic lands short of your config. -------------------------------------------------------------------------------- Bias & Promo Statuses: -------------------------------------------------------------------------------- Bias is related to the shuffling of the AI's deck and the user's selected difficulty level. If a card is given a bias of greater than 1 then it will be shuffled towards the bottom of the deck when the AI is using the deck if the selected difficulty level is LESS than the set bias level. A Bias of 2 will shuffle that card towards the bottom of the deck if the difficulty level is set to "Mage". A Bias of 3 will shuffle the card towards the bottom of the deck if the difficulty level is set to either "Mage" or "Archmage". A difficulty of "Planeswalker" will ignore any biased shuffling. Promo status can be set on a card by card basis and controls whether that individual card is shown as a foil card with the "Promotion" set mark. Bias and Promo statuses can be set at the same time and appear to work as expected in game. -------------------------------------------------------------------------------- Regular Unlocks: -------------------------------------------------------------------------------- These are the normal type of unlocks that you see in game. If you do not have the promo codes entered these are the only unlocks that you will see in game. This type of unlock can support more cards than the promo unlocks, but to properly unlock them in game you will almost always need to make sure they are unlocked via the APPID_LINKING.TXT file. It is recommended that you use the promo unlocks exclusively unless you really want to add a sideboard of more than 10 cards to your deck. -------------------------------------------------------------------------------- Promo Unlocks: -------------------------------------------------------------------------------- These unlocks can be unlocked in game by typing in the 10 promo unlock codes which will unlock a single card from the promo unlocks of every deck that is installed. It is the currently preferred way to give a deck a sideboard as it works with all versions of the game without having to resort to managing another file or hoping that the deck configuration will be one of those that is saved. There is a limit of 10 cards that can be unlocked this way though, so once the promo unlocks have 10 cards in them you will be unable to add any more to that type of unlock. The deck builder will automatically switch to putting the added cards into the regular unlocks. -------------------------------------------------------------------------------- Advanced Filtering: -------------------------------------------------------------------------------- Advanced filtering will allow you to choose which filters specifically you want to use for filtering the cards in the master list. The filters are shown using a heirarchical tree view with the root item always being a Filter Set. All other filters can be added, replaced, and moved (via drag-and-drop) to get the exact combination of filters that you want. Of the filters available for you to choose from and use there are Filter Sets, Boolean Filters, Integer Filters, String Filters, Enum Filters, and Power & Toughness Filters. All filters have a Next Filter comparison option that is uses Boolean Logic (And/Or). If you choose "And" then both filters must be true for the card to be allowed. With "Or" if either one of the two filters is true then the card will be allowed. Filters are processed sequentially with no short-circuiting of the logic. This means that it will process the first filter then "And" or "Or" the result with the next filter in line until it reaches the final filter. This also means that if you have several filters "And"ed together that even if the first filter returns false it will still test all the other filters. Filter Sets: These provide no filtering by themselves, but can be used to group other filters for more fine-tuning. Sets are great for grouping of conditions such as you might want to look for Creatures with the word "Destroy" in their abilities or you want to look for creatures with power greater than 2 and less than 7. To do that you would group the two power filters so that they will be considered together and then they can be compared with the String filter as a group instead of individually. There is no limit to the number of nested sets you can have. Boolean Filters: These filter on a given boolean field of the Card being either true or false. Instead of choosing True or False you actually choose the field to check and "Card is/has/can" or "Card is not/does not have/can't". So for example you could filter out tokens by saying "Card is not" "Token". Integer Filters: These filters function like standard math inequalities. You choose the field to compare on, the inequality operation to use (== [equals], >, >= <, <=, != [not equal]), and you choose the value to compare it to. So for example you could look for cards with a Converted Mana Cost < 4 to find cards with a casting cost 3 or less. String Filters: These filters use the standard string comparisons (Contains, Does Not Contain, Equal, and Not Equal) and function like a simple search. Though Advanced Filtering does allow you to filter on fields that the regular filtering does not allow (List of Registered Tokens, Artist, Expansion, Card XML). Enum Filters: These filters work on fields that use Enumerations instead of strings or integers and will only allow you to filter on members of that enumeration. For example you could select to filter on "Colour", "Is" "Multi-Coloured" to find all the multi-coloured cards, but you can't do "Colour", "Is", "Purple" because "Purple" is not a member of that enum. Power/Toughness Filters: You're probably wondering why these are separate from Integer Filters, the reason is Power and Toughness have a valid value that is not an Integer and treating it as an integer would simply be wrong. That value is "*" which in the world of Magic: the Gathering means that this value is variable and depends on what is written in the card's abilities. It could be something like Master of Etherium where its power and toughness are each equal to the number of artifacts you control or it could be like Maro where the power and toughness are each the number of cards in your hand. The point is "*" is not a fixed number and cannot be treated as such, but otherwise these filters work just like the Integer Filters. Note: Some of the advanced filters are somewhat slow and may take several seconds after being applied before the list will update. This is due to several factors including that many of the Advanced Filters need to use .Net Reflection to operate, they may work on fields that have a lot of information like Card XML, and/or they need to do special processing on a field's data before it do the necessary checks like Sub-Types. -------------------------------------------------------------------------------- Tools: Create AppId Linking Wad: -------------------------------------------------------------------------------- Before I explain about the options I should probably explain what "AppId Linking" is. AppId Linking is the linking of numeric ids to decks for the express purpose of determining whether the deck is fully unlocked and/or unlocked and foiled (rare & mythic cards in the deck get the shiny foil sheen in game). For modded decks with regular unlocks this is the most reliable way to make sure the cards for this deck stay unlocked between runs. So these options will automatically create an AppId Linking wad for your chosen version of the game and will have entries for all decks that have regular unlocks (there is no need to include decks that don't have unlocks or only have promo unlocks). When the wad is generated it will be generated with the name "Data_DLC_999999999_AppId_Linking_.wad" in the game directory. I have named it like that so that it should override any other wads that have an APPID_LINKING.TXT file in them (if not then you can always identify the others by using the "List Wads with APPID_LINKING.TXT" menu option). For Steam versions (and Theta Unlocked by Default) it will use 97330 for all of the AppIds as 97330 is the AppId for the game you are guaranteed that you will have this AppId linked to your Steam account if you own the game. For Skidrow versions it will use 0 for all AppIds as this is the only AppId Skidrow recognizes. Theta Manual Unlocking - This requires a bit more explanation. Theta has support for using any number as an AppId for unlocking purposes and will auto- matically add this number to the "apps" file in your "swarm". This means that you can choose which decks you want unlocked and/or foiled by clicking the appropriate button ("Unlock Full Deck", "Premium Foil Deck") in the in-game deck manager and then exiting and restarting the game (restart is required for changes to take effect). So using this option will create an AppId Linking file with each AppId being unique (simple increment starting from 100,000). This does, however, mean that if you add decks with regular unlocks and then re- generate the AppId Linking wad that you should delete the "apps" file in your swarm and re-select all the decks that you want unlocked/foiled as this will re-number the APPID_LINKING.TXT file and may have assigned different AppIds to the decks. -------------------------------------------------------------------------------- Tools: Custom Data Folder & Creating a Core Wad: -------------------------------------------------------------------------------- The "Setup Custom Data Folder" option under the tools menu will create a placeholder wad directory inside the game directory. The created directory has all the standard directory structure for a standard "Core" mod fleshed out with an appropriate header file so that the game will recognize the contents of the directory once the user starts adding data. This allows the user to very easily manage both custom cards in the builder and test them in game without having to build a core wad each time to make sure the cards are updated. The directory created is always "DATA_DLC_DECK_BUILDER_CUSTOM", the user has no control over that. Creating a core wad from the custom data stored in the custom data folder can be done simply by using the "Create Core Wad from Custom Data" option in the tools menu. This takes all the data that the user has put into the custom data folder (excluding empty directories) and writes it to a compressed wad that the user chooses. So if a user doesn't want to use Gibbed Tools to make a core wad they can do so simply by using this option in the Deck Builder (does basically the same thing Gibbed Tools would do). The advantage this has over Gibbed Tools is that it does not need an "unpacked" directory and it will re-create the directory structure and header based on the filename being saved out rather than requiring the user to set them. For example the custom directory is DATA_DLC_DECK_BUILDER_CUSTOM and the user decides to save it out as Data_DLC_1000_Core.wad, the builder will take all the files (except HEADER.XML) from the custom directory and create a new wad with the root directory being DATA_DLC_1000_CORE and the header in the wad will be re-created to reflect this. NOTE: The deck builder still does not support building cards or any other files not related to building a deck. Other than a header XML the builder will not put anything in the custom data folder. This is NOT a substitute for manually building/placing cards and their images. -------------------------------------------------------------------------------- Planned Enhancements (in no particular order): -------------------------------------------------------------------------------- - Create a new version to work with DotP 2014 when it comes out (if possible). -------------------------------------------------------------------------------- Considered Features (in no particular order): -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- Known Issues: -------------------------------------------------------------------------------- - Due to font the type line on the cards may not be completely visible in some languages for some cards. - For cards with a lot of text the program may not have enough room to draw on all the text. As such card with a lot of text may have it cut off at the bottom of the preview image. (This is most prevalent when looking at some of the planes.) - Planes do not show correctly as I have not added code to cover their special case (planes are rotated differently from normal cards and have a different card frame). - Special code has not been added for the display of Schemes, Phenomenon, or Planeswalkers so if any are added/present they will probably not display correctly. The game does not currently have any of these cards so I don't really expect a problem here. - As of initial release English is the only complete localization all other languages are only partially complete. -------------------------------------------------------------------------------- Frequently Asked Questions (FAQ): -------------------------------------------------------------------------------- Q. Why does this program take so long to start up? A. It takes a while because of all the data it is reading from the game directory to ensure that it is running with current information. The more wads that are present in the game directory then the longer it is going to take to load this program. Small wads load pretty quickly so having a lot of small deck wads is not usually a big problem. Q. Why do the Id Scheme fields show with a pink background? A. It is because you have either left the values at the defaults or you have set values that conflict with each other or with the defaults. If every- thing is good then the fields will display with a light green background for prefix type Id Schemes or will display with the same background colour as the other fields. Q. Why do the Id Scheme fields show with a green background? A. It means everything looks good for those fields. See above question for a more detailed answer. Q. Why does this builder not have ? A. This can be due to several reasons including (but not limited to): - I had not thought about that feature. - The feature is not really technically feasible at the moment. - I specifically disallow it due to one reason or another. - I haven't gotten around to putting it in. Q. Scrolling the card list is slow, why is that and how can I speed it up? A. The slowest part of scrolling the card list in the default configuration is the image casting cost column, the images have to be built before the list can display them and it takes a small amount of time to build it (not an issue with 1 card, but when you start talking about hundreds to thousands it can eat up a good amount of time). You can flip of the Image Casting Cost column and flip on the Text Casting Cost column (that will allow you to scroll faster). Q. Can I make a 40 card deck? A. No, the game will always add basic land until the deck reaches a total of 60 cards. This means if you put in 25 cards and leave room for 15 lands (basic or otherwise) the game will put in an additional 20 basic lands when you try and play it. The program will keep track of how many total basic lands the deck will have (noted by the "Basic Land" counter above the main deck) so that you know how much basic land the deck will have in game. Q. Can I make a deck with no basic land? A. Yes, you most certainly can make a deck with no basic land (myself and other modders have done so successfully several times). This program will also have no problems if you create a deck with no basic land. Q. Can I make a deck with more than 60 cards in it? A. Yes, you can make a deck with more than 60 cards, but it should be noted that if you make a deck with more than 60 cards you will need to manually add the appropriate amount of land to the deck. By default the builder will not show basic lands in the master card list, but you can show them by either allowing them in the filters window or by clearing all the filters (which will show all cards). Q. Can I make a deck that has more than 4 copies of a given card in it? A. Yes, the builder does not restrict how many of a specific card you put into a deck, so feel free to put in 10+ copies of Relentless Rats. You should be aware though that if the card does not state that you can have more than the standard number of copies in a deck, then you will be in violation of MtG constructed deck building rules if you put in more than 4 copies. Q. Why does the deck image and preview card show up as white boxes in the game? A. This is because you did not set/create them in the Deck Information. Q. Why do the AI Personality images show up as white boxes in game? A. See above answer. Q. Do I have to create an AI Personality? A. No, you can use one of the many that have already been created, but creating one for your deck is a nice touch. Q. Can I add my own music mixes to use for personalities? A. Yes, but this program can't really help you with that. All of the music goes into the Music directory under the main game directory and it needs to be in Ogg format. Once it is in the directory then you can choose it for your custom personalities, though if you distribute those personalities then you need to make sure you also include that music file as well (it will not be put into the WAD). Q. Do you expect this program to completely replace the way modders make decks? A. No, modders tend to be creatures of habit (as is human nature), unless they personally see value in changing their methods they are unlikely to change the way they make mods. If some modders/users find this program useful then I will have succeeded in what I set out to do. Additionally this program does not do some things that regular modders might want, like creating a "Core" wad from custom cards, allow for editing of cards, creating of cards, etc.... This program is intended mainly for non-modders and those who are looking to get into modding. Q. Is this builder bug free? A. Probably not. I hope it is free from major bugs as I put in a fairly decent amount of time testing it, but it is virtually impossible to make a bug free program. Q. I have a wad that has cards in it that are not being loaded by the builder, why is this happening? A. There are a few reasons this can happen including: - The card has a bad XML structure and has caused the loading of that card to error out. (Forgot to close a tag, typo, etc....) - The card either does not have all required tags or has an incorrect required attribute in one of the tags. - The card does not use the correct case for tags. Parsing XML is case- sensitive. - The wad it is in is not being loaded because it does not start with "DECK_" or "DATA_DLC_" (which means it's also not read by the game). - That card hits a bug in my code. If this is the case please let me know. Q. Can I use this program to build cards? A. No, this is a deck builder, it is designed to build decks not cards. Q. Is it possible this could be modified to build cards as well as decks? A. Sure, but that is a huge amount of changes I'm not yet prepared to make. Even if those changes were made it would still have the same limitations of other card generators in that it would only be able to fully generate simple cards and more complex cards/abilities would have to be manually coded. Q. Why are there multiple cards with the same name and filename in the card listing? A. This is because the builder loads all cards from all wads, this means if a card is present in multiple wads it will show multiple times in the card listing. Q. I've saved a deck, why is it not showing in game? A. You have to "Export" a deck for it to show up properly in game. Q. I can't export because the menu option is grayed-out, what's wrong? A. The builder determined that it did not have write access to the game directory and therefore there is no point in trying to export because it will fail. You can try running the Deck Builder as Administrator to give it the permissions it needs to export. Q. When I export it gives me a message saying a Uid conflict has been detected, what does this mean? How can I stop this from happening? A. This means that based on the settings of the Id scheme it has found that the Id you chose for the deck (or one of the files that will be created) is already being used by another deck, unlock file, or land pool and this can cause problems in the game if you try to run the game while the conflict exists. This can be easily rectified by either going into Deck Information and clicking "Get Next Available Id" or by changing your Id Scheme settings to something more unique to you. By default the Id Scheme settings put the ids in the 1000 prefixed block, so you could decide you want to put your decks in the 9834 prefixed block or 2358 prefixed block. With about two billion possible uids it should be fairly easy to find some combination of settings that will be unique to you. Q. Will the builder create "independent" wads when it exports? A. No, it will not try to create an "independent" wad at this time as that would mean duplicating cards, images, and all function files from all wads that this one would be dependent on. This could be done, but I opted not to because this could lead to old and/or conflicting function files/cards being used which could make people believe there is something wrong with your mod. It is ultimately best to keep the number of duplicate cards to a minimum. Q. When exporting will it compress the images it creates? A. Yes, the builder will now compress the images it creates to DXT5 compressed TDX files. Q. I only speak one language, do I have to enter strings in all languages? A. No, the Deck Builder will try to auto-fill any blank strings with the English string. If possible you should always include an English string. Failure to include an English string could cause odd behavior such as generating a wad like: DECK_100000_.wad and lacking names or strings for other missing languages. Q. Why won't the builder let me set the card preview images? A. That is because this builder generates those images for each language based on a card in the deck that you select. If a card is not localized in a specific language it will use the English strings from that card. In other words you set which "Card" to use for the preview instead of setting individual "Images" to use for the preview. Q. I can sort the cards in the card listing and for the deck cards, why can't I sort the cards in the unlocks? A. The order in which cards appear in the deck is unimportant, but the order in which cards appear in the unlocks is important as it controls which unlockOrderId a card will get when exporting and can control when you get a card in game. For example if you have 10 promo unlock cards, but only 8 promo codes then you will only get 8 of the promo unlocks with the last two remaining locked. Now this will probably be unimportant for most people as all 10 of the promo codes are known and can be found out easily. I imagine most people also unlock most of unlocks for decks using either the Promo method or through AppId Linking so that they always have all the cards unlocked. Q. I don't like the template images you use for building the deck box image and the AI Personality images, can I change them? A. Yes, you can, but there are a few things you need to be aware of: - The Overlay and Mask images MUST be the same dimensions to work properly. - The images must have the appropriate file names (case does not matter, at least in Windows). - The Mask does not properly support variable Alpha values. If you use variable alpha values then you will get part of the mask in the final image (which will be visible when building an image). - The Mask should use a colour that is not likely to be in any chosen user image as any pixel that is found using that colour will be made transparent. - The top left most pixel in the mask is what is used to determine the mask colour so it should always be of the colour you want to be transparent. - The initial resizing and positioning of chosen images is based on my templates so if you change them you will likely need to adjust the position and size when building images to match your templates. - If your template and mask images are not sized in Multiples of Four (MoF) then the images built from them may get stretched or shrunk to the closest MoF size. If I can't find a MoF size with a width 200 pixels in either direction I will resize to 512x512 and horribly stretch the image to fit. Q. Why did the deck builder generate an "Errors.log" file? A. This file is generated any time the program runs into any error that I don't consider a zero priority error. Sometimes looking at this file can give you extra information on certain things. For example you try to load a modder's deck that is supposed to have 36 non-basic-land cards in it, but it only loads 34 cards if you look at the error log you might see an entry that states that it "Can't find referenced card" for a deck which could indicate that the card is missing (for example a typo in the deck XML) or that there is a problem with the card (malformed XML, etc...). Q. The Deck Builder generated an error log, will this cause problems? A. In most cases, no, this will not cause a problem. Though if the error log is generated then you should look at the log to see what errors were encountered. If you see errors with "High" or "Critical" priorities then please report them to me because it means something really bad happened and I need to figure out what. If you see "Low" or "Medium" errors then that means something couldn't be loaded or there is something important that needs your attention (bad card XML, a serious UID conflict, couldn't find a card that was referenced by a deck or unlocks, etc...). Q. The readme for the Deck Builder is only in English why didn't you make one for each of the supported languages? A. Because I only truly understand English (and a little bit of Japanese) so I can't properly translate the readme to each of those languages. This is also why the other localizations of this program are only partial when I released this builder. Q. The error log is in English, but I've selected that the program run in , how can I change that? A. You can't, I purposely made the program so that the error log will always be in English as that is my native language and I am the developer. This way if someone is reporting a bug and I request the error log I will be able to understand what the log is telling me. Q. What if you disappear off the forums or stop developing this program? How will I get support or will bugs get fixed? A. I've released the full source code of this program so any programmer should be able to pick this up and examine the code, make bug fixes, updates, or even release their own version of this program. I only ask that credit be given where credit is due. Q. Will this work with all versions of Duels of the Planeswalkers? A. No, it only works for Duels of the Planeswalkers 2013. Each version of the game changes bits and pieces that are required for modding so if you want this for an older version of the game you're going to need to make the changes yourself. If you want this for a newer version of the game (like DotP 2014 which will be released shortly) then either you will have to wait for me to update this myself, you can make the changes yourself, or wait for someone else to do it. Q. There are some cards that just will not show up in the card list until I clear all the filters, why does this happen? A. Some cards like invisible tokens will not show in the list because they have no types. Q. I have an idea for a great new feature, how do I request it? A. The best way is to mention it in the release thread for utility. If I agree that it is a great idea then I'll likely add it to the list of planned improvements. Q. Can I use parts of your code in my own programs? A. Yes, just give credit where credit is due. Q. Is Riiak Shi Nal your real name? A. No, but it is my preferred handle and it is highly unique. If you see a Riiak Shi Nal or Riiak elsewhere then likely that person is also me, but if you want to confirm it then ask me either via PM or E-Mail. Before I started using this handle many years ago I did a Google search on it and it came up with no results. Now though there are several thousand more results for "Riiak" and little more than a thousand for "Riiak Shi Nal". -------------------------------------------------------------------------------- Credits & Thanks (in no particular order): -------------------------------------------------------------------------------- Tim Van Wassenhove - SortableBindingList & PropertyComparer http://www.timvw.be/2007/02/22/presenting-the-sortablebindinglistt/ Rick - Gibbed Tools & Source http://svn.gib.me/builds/duels/ thefiremind - Provided Italian localization. Microsoft - Visual Studio 2010 Wizards of the Coast - Magic: The Gathering & Duels of the Planeswalkers Huggybaby - Slightly Magic forums & for being a great admin/moderator. http://www.slightlymagic.net/forum/ kevlahnota, thefiremind, and all other modders - For providing lots of mods and overcoming many technical difficulties regarding modding the DotP games. Mythial - Beta testing for this program. BloodReyvyn & drleg3nd - Reporting bugs they found. Everyone else on the forums - For keeping the community alive and fun. -------------------------------------------------------------------------------- Change History: -------------------------------------------------------------------------------- - v1.4.2.1 - Fixed a problem with the built-in column definitions for Deck, Regular, and Promo Unlock views referencing the wrong property on DeckCard. - v1.4.2.0 - Changed from using KeyPress event to KeyDown event for handling "User presses Enter while focus is on main card list" to correct the handling bug that caused the highlight to shift to the next entry and add that card to list instead of originally highlighted card. - Added INotifyPropertyChanged to DeckCard so that updating the Quantity can be easily recognized regardless of how it changes. This fixes the bug with the Quantity not being immediately recognized if it was changed directly through the DataGridView interface. - Added persistence of window state for Main & View Card windows. Will only save WindowState if not Minimized, and will only save position and size if WindowState is "Normal"/"Restored". - Changed how "View Card" window is opened so that multiple windows can be open simultaneously and close properly when the main program window is closed. - v1.4.1.0 - Moved Initialization of m_lstSubTypes from ParseXML() to the CardInfo constructor to prevent crashes due to trying to load cards not in a CARD_V2 tag. - Added additional card checks before adding a card to the loaded list based on the state of the Filename property after trying to load the card. This allows me to check for the presence of the CARD_V2 block (Filename is null) and that the FILENAME tag is present and correctly formed for a DotP 2013 card (Length > 0). - Added AddViewColumn() so I could condense setting up the card view columns so that it doesn't take a couple hundred lines. - Added more pass-through properties to DeckCard for display purposes: ColourText, LocalizedTypeLine, CastingCostImage, CastingCost, MultiverseId, ConvertedManaCost, Rarity, Power, Toughness, Artist, Expansion, and Token. - Added more columns to the views (not visible by default) so they can be toggled on and off. This includes 3 more columns to the master card list: Rarity, Artist, and Expansion. - Added 3 new strings to the localizations for the added columns. - v1.4.0.0 - Added a column to the card list which shows the Textual representation of the casting cost instead of the Image representation (the textual representation allows for faster scrolling since no images will need to be built). (Should not conflict with the column some people have manually added as the name is the same what they added should override this one, which is essentially the same.) - Converted SuperTypes from a list of strings to an Enum (reduces memory usage slightly and allows for a more strongly typed method of checking supertypes). All referencing code updated to reflect new type. This results in a very small memory usage reduction (storing a 4 byte enum instead of a list of strings). - Changed method of loading Card Types from the XML for Enums from a set of block ifs to a foreach loop on all the types in the enum (reduces the number of iterations through the Xml nodes on the card, number of checks to get the Types should remain roughly the same depending on the order I get the Enum values in from Enum.GetValues()). - Changed how each card was creating and storing its own casting cost image to a static casting cost image cache so that no two identical casting costs will build separate images they will just re-use the image from whichever one built the image first. This should provide both a reduction in memory usage and a slight speed up for the card list and scrolling thereof. - Changes to GetSerializableSetting() and SaveSerializableSetting() to allow it to save out some more complex objects to XML (like the new advanced filter objects: CardFilterSet, CardFilterEnumProp, etc...). They are now more complex functions and will cache XmlSerializer objects to prevent a memory leak when having to create XmlSerializer objects using more than just the simple single parameter constructor. It should also reduce the number of times I have to use reflection to get all classes derived from CardFilterBase. - Reduced the number of Exceptions thrown (and subsequently caught) slightly by replacing some of the Parse() calls with TryParse(). - Replaced GetFileEntryIfExists() with a version that does not use Linq (and subsequently does not throw and catch an error if the entry I'm looking for doesn't exist). This also has the side-effect of speeding up the load time for the program even though there is more code. Another effect is that there is less output to the Output window during debug so debugging is more efficient. - Added "Advanced Filtering" for cards. The new Advanced filtering screen will allow you to define as many or as few filters as you want, by default the only filter defined in Advanced is a Filter Set which is required to hold all the other filters (and/or filter sets). - Added some colour codes to some of the Id Scheme fields in the Options windows to try to emphasize that the user should change these values. If the user has duplicated changes or has changes that match the default then it will display the field with a light pink background, if everything is good for a prefix scheme then the field will have a light- green background, for other scheme types if everything is good it will have the default window background colour. - Added ACL check when refreshing the game directory to see if the builder has Modify permissions to the game directory (basically the builder needs the Read, CreateFiles, CreateDirectories, Write, and Delete permissions for various parts of the program). Delete permission (specifically SubDirectories and Files) is needed if a user has chosen to overwrite a file (exporting a wad that already exists, especially if exporting as a directory). - Added Pre-Shuffle on Export option (Off by default). If the user turns on the option then the Builder will attempt to randomize the cards only on export to try and prevent consecutive identical cards. It will do the randomization process up to 7 times while looking for a "good" shuffle. - Added 63 new strings to the localizations to support the new Advanced Filters and other minor added features. English is the only one that I have fully localized. - v1.3.0.0 - Added a menu option to create a base directory inside the game directory to host custom cards, images, AI personalities, permanent text, functions and any other data the user wants to put in. This will create an appropriate header file so that the game can also use this data. - Added the capability to take the custom data directory (which can be setup from within the builder) and compile it into a "Core" wad. There really is nothing special about the wad itself as it is just the custom data directory put into a compressed wad file (much like gibbed tools would do when packing a wad). - Fixed Card Name check to actually do the check only if DoTitleCheck is true. (I forgot this condition initially, thanks to BloodReyven for pointing it out.) - Added 6 new strings to the localizations. (English is the only one that is actually fully localized.) - v1.2.0.0 - Reduced error priority of two land pools' uids conflicting to Zero, so now those errors should only show in the error log if LogAllErrors is set to True otherwise they should go ignored. This should stop the error log from being generated if there are no other errors, and if a log is generated it should considerably reduce the length. - Added rounded black card border to exported card preview images. Due to transparency for the card border compression for card preview images has been changed to DXT5. - Adjusted Expansion image draw location to be more in-line with where the game and official cards would put it. - Adjusted Artist Credit image draw location and Artist Credit text location and font size to be more in-line with where the game and official cards put them. - Moved ResizeRelatedControl() to Tools so it can be used for multiple windows. - Corrected an issue with the Music combobox on the deck information window not sizing properly with different languages. - Changed how the Uid is handled when creating a deck from an existing one, it will now try to get the next available id instead of just clamping to values in range. This new method should be more new-user friendly. - Added ability to export just images via context menus to either PNG or TDX formats. Right click the image you want to export and select to export as either PNG or TDX from the drop down menu. - Added ability to export a full set of card preview images (with border) to either PNG or TDX via the Export Card Previews menu from the card context menus. - Added 5 new strings to the localizations. (English is the only one that is actually fully localized.) - v1.1.0.0 - Added Compression of Deck Box, Card Preview and AI Personality images when converting to TDX for export. - Added the ability to automatically create an AppId Linking wad for Steam, Skidrow, and Theta (Default Unlocked & Manual Unlocking). - Added a check in Deck.AddCard() so that it will do nothing and return null if a null CardInfo object is passed in. (This could happen when creating a new deck [like at startup] after being pointed to an invalid game directory or if for some unknown reason the default basic lands don't exist anywhere in the game directory.) - Added try blocks in GameDirectory.LoadWads() to catch unhandled errors during wad loading and give me an idea of where in the loading process they occurred. - Improved "Decks Used In ..." to check for and include the cards that create a token and the decks in which those cards are used. - Added 9 new strings to the localizations. (English is the only one that is actually correctly localized.) - v1.0.2.1 - Added a check in the filter for invalid values for Power & Toughness. If invalid values are detected it will report an error in the error log and will report what the values were so that I can change things so that those invalid values should not be allowed to be entered in future versions. - Added an indicator to the About Box as to whether you are running the 32- bit version (x86) or the 64-bit version (x64) so you don't have to manually keep track of which version you installed and are using. - Updated localizations to have the new land subtype "Gate" defined. - v1.0.2.0 - Added setting for whether an Image cache is maintained or not, by default it will not maintain an image cache for the session. This means that it will take longer to load images and create image previews. This option currently has no way to set it via the UI, but you can re-enable the image cache by adding this to the Settings.xml: True - Added an x64 compile platform to allow for building a version that can use more memory on 64-bit machines. - v1.0.1.0 - Adds support for Unicode (UTF-16) files saved with a BOM. (UTF-8 was already supported as was ANSI) - Will now gracefully detect and report when multiple localizations for the same language code are detected in Card & Deck XMLs. - Better reporting when failing to load a card because there is no XML (empty file). - Will still load card even if Multiverse ID is not valid. - Better error text for when Multiverse ID does not conform to recognized standards (not a number, too large, etc...). - Will no longer report UID conflict for files that override each other. - Will now read XML in a case insensitive way (even though XML is actually case sensitive, the game seems to ignore case issues, so now the tool does as well). - Now disposes of Image resources when changing images during image manipulation in deck information screen (load, build, etc...) to attempt to keep the program from running out of memory. - v1.0.0.0 - Initial release. -------------------------------------------------------------------------------- Contact Information: -------------------------------------------------------------------------------- If you want to contact me, you must be able to use English (bad or broken English is okay if I can figure out what you are trying to say). If you try to contact me with any other language I will not respond or even try to figure out what you are saying. For the most part I prefer to be contacted on the Slightly Magic forums where my handle is RiiakShiNal. I will however answer bug reports and program comments at this e-mail address (do NOT contact me for card or deck requests): Riiak (at) DragonAnime (dot) org Note: If you contact me via e-mail you MUST include a descriptive subject or I will immediately delete your e-mail. Preferrably you should prefix the subject with "MtG:", "DotP:", or "Deck Builder:".