Page 2 of 3

Re: Hey! How about a begginers guide 2013 ?

PostPosted: 08 Oct 2012, 11:49
by yojimbo55
Just solved the name, haste, and flying issues in the card.

I had apparently missed looking in the card Xml. <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Raging Goblin]]></LOCALISED_TEXT> code part. ^^'

All is good now. Almost..... =D>

Re: Some minor issues.

PostPosted: 08 Oct 2012, 12:41
by thefiremind
yojimbo55 wrote:(just wanted to see if Bushido existed as a "basic" ability you could add to the card)
You can see the available abilities (and all the other declared constants) here:
viewtopic.php?f=65&t=7337
and this is the list of all the existing functions:
viewtopic.php?f=65&t=7330

Bushido needs to be totally coded, and it's not easy to do if you want it to be compatible with Takeno, Samurai General and Sensei Golden-Tail. Anyway that's not the main problem about Opal-Eye: I haven't found a good way to code the "next 1 damage" prevention. There was a function in DotP2010 that serves for that, and it's still in the list of the existing functions, but it seems it doesn't work anymore. I tried a totally different implementation and tested it for Ordruun Commando, and it worked, but the AI didn't understand it, and fired burn spells at Ordruun Commando even if I could prevent them totally.
(You can code an ability that works perfectly when you use it, but if the AI doesn't understand how to use it or deal with it, it's like cheating.)

Re: Hey! How about a begginers guide 2013 ?

PostPosted: 11 Dec 2012, 09:41
by xXAwsomesXx
Well gladly appreciate this guide.

Re: Hey! How about a begginers guide 2013 ?

PostPosted: 15 Dec 2012, 07:47
by yojimbo55
Happy to see that the guide is helping other than myself. Good luck to you !

I am currently working on 2 decks atm. I hope soon to be able to release them. Some bugs and such that needs to be taken care of.

Re: Hey! How about a begginers guide 2013 ?

PostPosted: 30 Dec 2012, 21:54
by otakusensei
Can someone explain unlocks to me?

I was able make a deck (big ups to Firemind) and have been playing and editing for awhile. But only 60 cards are ever seen by the game and I'm getting sick of tweaking my deck in a txt editor. I'd like to just have those cards available, like a massive sideboard. But at 110 cards (the limit for decks it seems) it's going to take me an age to unlock all of them.

I've looked at the APPID_LINKING.txt files, but I don't understand them. A quick explanation would be wonderful. What are the numbers that follow the listing for the decks? What is the rhyme and reason behind them?

Sorry if this is laid out clearly in another thread, I would appreciate a link in that case. I've just been Googling a bit and I'm unable to find anything.

Re: Hey! How about a begginers guide 2013 ?

PostPosted: 30 Dec 2012, 23:01
by RiiakShiNal
It is laid out in other threads pretty clearly, but I'll say it again here as it seems appropriate.

The APPID_LINKING.TXT file is laid out in a pretty straightforward manner; first you have a friendly identifier surrounded in brackets ("[]"), followed by 3 numbers each on their own separate line: the deck uid, the AppId for just unlocking the cards, and the AppId for unlocking the cards and foiling them.
Code: Select all
[GOLGARI_DEFAULT]  <-- Friendly Identifier, can even be just [], does not need to be unique
13                 <-- Deck UID
97382              <-- AppId to associate with just unlocking cards ("Unlock Full Deck" button)
97383              <-- AppId to associate with unlocking and foiling cards ("Premium Foil Deck" button)
It should also be noted that setting the two AppIds to 0 seems to work for unlocks in Skidrow version, setting them to any number above 0 seems to work for Theta versions (Theta version will store the AppId(s) when the player clicks the appropriate button and the unlocks will be available when the game is restarted), and setting them to 97330 (the game's AppId) allows them to be by default unlocked in Steam versions (though should probably work for other versions as well).

The game only recognizes a single APPID_LINKING.TXT file at any given time so effort should be made so that the APPID_LINKING.TXT file you are working with either is the only one present (by removing it from other mods or by removing the wads that contain a copy) or that it overrides all others (for example by putting it in a wad with the highest DLC number). The APPID_LINKING.TXT file that you work with should also contain information for all applicable decks from both the base game (and expansions) and all installed mods that use it.

Doing unlocks as Promo cards (as the method used in thefiremind's mod) can also be done, though care should be taken to limit the number of cards done in this way to 10 as there are only 10 unlock codes and repeating unlockOrderIds can have unwanted effects if the deck configuration is lucky enough to be saved in the profile. To use the promo unlock method simply set the game_mode attribute in the unlock file to "2" instead of "0".

Edit: The APPID_LINKING.TXT file typically resides in DATA_PC\CONFIGS instead of DATA_ALL_PLATFORMS\CONFIGS, but you must make sure that the game looks in that directory by making sure to have an ENTRY in the HEADER.XML that points to the DATA_PC directory. An example of a header for a wad that only really contains the APPID_LINKING.TXT file:
Code: Select all
<?xml version="1.0"?>
<WAD_HEADER>
   <ENTRY platform="ALL" source="DATA_DLC_8192_APPID_LINKING/DATA_PC/" alias="Content" order="4"/>
</WAD_HEADER>

Re: Hey! How about a begginers guide 2013 ?

PostPosted: 04 Jan 2013, 20:47
by STKL
This guide has helped me as well Thanks for this post

Re: ;)

PostPosted: 04 Jan 2013, 23:12
by STKL
thefiremind wrote:
yojimbo55 wrote:Now thats left to learn is: make your own custom cards.
This is different because you can't just follow some steps and create any card: you often have to put new pieces of code inside the cards. Some basic programming knowledge is recommended in that case, but you can start with cards that are very similar to already coded ones, copying a piece from here, a piece from there... I think everyone started that way, more or less. For example, let's pretend that you need to make a card with vigilance and deathtouch (not sure if it exists, but it's just an example :lol:). Take a card that has vigilance and maybe something else, make a copy of that card's XML, remove that unneeded "something else" from your copy, find a card with deathtouch, copy the deathtouch part, and paste it inside your card. Then you'll have to change the other parts: name, ID (always different for each card, same rule that goes for the decks), cost, power/toughness, picture, artist's name, etc.
If you need the localised text for card title, flavour text, abilities, you have lots of options:
viewtopic.php?f=99&t=6926
viewtopic.php?f=99&t=7483
viewtopic.php?f=99&t=7407
those 3 tools all fetch localised text for you, just choose the one you prefer.
Once your new card XML is ready, put it into the CARDS folder of your test deck, and add some copies of the card to a custom deck, so you can see if it works.
I didn't forget the part about how to make a custom picture for the card, but the card works with or without the picture, so I think it's better if you try to make a couple of cards without having to worry about the pictures, for now.
I'm trying to follow your instructions on making a card. Currently I'm testing out a creation, a Kor's Duelist.. It gets double strike if equiped so I took codes from two cards one that had double strike, and one that get +1/+1 if equiped. I copy and pasted some of the code, but I don't think it's working.
Code: Select all
    <CONTINUOUS_ACTION layer="7C">
    if IsEquipped( EffectSource() ) then
       local characteristics = Object():GetCurrentCharacteristics()
       characteristics:Characteristic_Set( CHARACTERISTIC_DOUBLE_STRIKE, 1 )
    end
  </STATIC_ABILITY>

  <HELP title="MORE_INFO_BADGE_TITLE_13" body="MORE_INFO_BADGE_BODY_13" zone="ZONE_ANY" />
  <SFX text="COMBAT_BLADE_LARGE_ATTACK" power_boundary_min="4" power_boundary_max="-1" />
  <SFX text="COMBAT_BLADE_SMALL_ATTACK" power_boundary_min="1" power_boundary_max="3" />
  <AI_BASE_SCORE score="150" zone="ZONE_IN_PLAY" />
</CARD_V2>
Also I've noticed some cards come in the format of a TDX file, what exactly would I do with that?
Do I just unpack it mess with it, and change it to xml?
Finally i've noticed that some of the cards have numbers at the end, ie: AEIGIS+ANGEL_XXXXX or AETHER_ADEPT_276865, ect ect.
Where do I get the number for a Kor's duelist or whatever card I'm trying to create?
Perhaps that is the problem, why my card does not seem to work.

Re: ;)

PostPosted: 04 Jan 2013, 23:55
by RiiakShiNal
STKL wrote:I'm trying to follow your instructions on making a card. Currently I'm testing out a creation, a Kor's Duelist.. It gets double strike if equiped so I took codes from two cards one that had double strike, and one that get +1/+1 if equiped. I copy and pasted some of the code, but I don't think it's working.
Code: Select all
    <CONTINUOUS_ACTION layer="7C">
    if IsEquipped( EffectSource() ) then
       local characteristics = Object():GetCurrentCharacteristics()
       characteristics:Characteristic_Set( CHARACTERISTIC_DOUBLE_STRIKE, 1 )
    end
  </STATIC_ABILITY>

  <HELP title="MORE_INFO_BADGE_TITLE_13" body="MORE_INFO_BADGE_BODY_13" zone="ZONE_ANY" />
  <SFX text="COMBAT_BLADE_LARGE_ATTACK" power_boundary_min="4" power_boundary_max="-1" />
  <SFX text="COMBAT_BLADE_SMALL_ATTACK" power_boundary_min="1" power_boundary_max="3" />
  <AI_BASE_SCORE score="150" zone="ZONE_IN_PLAY" />
</CARD_V2>
Here your XML is malformed; you open a CONTINUOUS_ACTION tag, but don't close it.
Code: Select all
    <CONTINUOUS_ACTION layer="7C">
    if IsEquipped( EffectSource() ) then
       local characteristics = EffectSource():GetCurrentCharacteristics()
       characteristics:Characteristic_Set( CHARACTERISTIC_DOUBLE_STRIKE, 1 )
    end
    </CONTINUOUS_ACTION>
I am assuming that you opened the STATIC_ABILITY tag earlier in the XML, but decided not to show it here. Also it is good to be consistent when using Object() and/or EffectSource().

STKL wrote:Also I've noticed some cards come in the format of a TDX file, what exactly would I do with that?
Do I just unpack it mess with it, and change it to xml?
TDX files are images you can run them through Gibbed.Duels.TdxConvert.exe to convert them to PNGs and you can run either PNGs or JPGs through Gibbed.Duels.TdxConvert.exe to convert them to TDX files.

STKL wrote:Finally i've noticed that some of the cards have numbers at the end, ie: AEIGIS+ANGEL_XXXXX or AETHER_ADEPT_276865, ect ect.
Where do I get the number for a Kor's duelist or whatever card I'm trying to create?
Perhaps that is the problem, why my card does not seem to work.
That is typically the Multiverse ID number though some people use their own custom numbers to prevent them from conflicting with the same card if someone else makes it.

Multiverse IDs can be found by looking up the card on gatherer and pulling the number from the URL for that card. For example Kor Duelist has this URL:
http://gatherer.wizards.com/Pages/Card/Details.aspx?multiverseid=177542
By examining this URL we can see that it has a parameter "multiverseid=177542" in the string making the Multiverse ID for Kor Duelist, 177542.

It should also be noted that a card will have a different Multiverse ID for each set it is present in. For example Elvish Champion (link) was released in multiple sets, in Tenth Edition its ID is 129534, while in Invasion its ID is 26445.

Re: ;)

PostPosted: 05 Jan 2013, 02:09
by STKL
RiiakShiNal wrote:RiiakShiNal
Ok, I think I did the xml right, but it still does not show up in the test deck, so what I did was I tried with an already working xml.
I took the xmls and put them in the deck's "Card" directory.
Then I went into the "Deck's" Directory and replaced searing spear for KOR_DUELIST_17... and the Argentum_Armor_23...
I start up MTG DOTP 2013, go to manage the deck and it's not there. Neither are.

Re: Hey! How about a begginers guide 2013 ?

PostPosted: 05 Jan 2013, 02:29
by RiiakShiNal
Note that cards are shared between mods so if a card is already included in another mod you don't actually have to include it in your mod (unless you are trying to remove dependencies).

If the test deck shows up, but a known good working card when added to the deck does not show up then that could mean that your test deck has somehow fallen into the 18 decks that are saved to the profile. If that is the case then you have two options you can either delete your profile or you can change the deck's uid (either one should force the game to reload and retest all cards in the deck).

If that does not work then I will likely have to see the full deck XML and the XML of the card to make sure there is nothing wrong with either of them.

Re: Hey! How about a begginers guide 2013 ?

PostPosted: 05 Jan 2013, 03:36
by STKL
RiiakShiNal wrote:Note that cards are shared between mods so if a card is already included in another mod you don't actually have to include it in your mod (unless you are trying to remove dependencies).

If the test deck shows up, but a known good working card when added to the deck does not show up then that could mean that your test deck has somehow fallen into the 18 decks that are saved to the profile. If that is the case then you have two options you can either delete your profile or you can change the deck's uid (either one should force the game to reload and retest all cards in the deck).

If that does not work then I will likely have to see the full deck XML and the XML of the card to make sure there is nothing wrong with either of them.
Actually I started off with your mod, the Weapons deck had the kors duelist.
I wanted to make a similar deck based off of that one, and this one:
tappedout+net\mtg-decks\whiteblue-artifact-equipment
And then for fun I was going to try to fulfill some of the deck requests hahaha, I can't even make a single working card, and the Unlocks problem is just coming and going. But I'll keep at it :lol:

One thing I don't understand is how your WAD files have no cards in them but they work fine!

I'm really just trying to make a card from scratch:

I can't seem to post the CODE here because i'm a new user: So I posted the file on mediafire
tp\\www(d0t)mediafire(dot)om\file\vxl24l3cz6t0734\KOR_DUELIST_177543(DOT)xml
I removed the ht, changed the / to \ and put (dot) where there should be a .
It doesn't work I even tried to change the ID #s because I was worried it might just interfere with your mod, also I removed all mods and reinstalled the game.

In regards to your explanation on TDX files, I understand that they are used as images, but how do I use them? I suppose I would have to look into the files for art, I'll do that once I can figure out how to make a card that works.

Re: Hey! How about a begginers guide 2013 ?

PostPosted: 05 Jan 2013, 12:38
by thefiremind
The problem in your Kor Duelist is that you saved the XML file with ANSI encoding. You must always save XML files with UTF-8 encoding, otherwise the special characters (Japanese and Korean characters for example) won't be saved (and read) correctly. After clicking on "Save as..." on Notepad, look on the bottom right of the save window, and select "UTF-8" instead of "ANSI". You'll have to remake Kor Duelist from scratch because the special characters are unrecoverable once you save with ANSI encoding.

Re: Hey! How about a begginers guide 2013 ?

PostPosted: 05 Jan 2013, 14:17
by STKL
thefiremind wrote:The problem in your Kor Duelist is that you saved the XML file with ANSI encoding. You must always save XML files with UTF-8 encoding, otherwise the special characters (Japanese and Korean characters for example) won't be saved (and read) correctly. After clicking on "Save as..." on Notepad, look on the bottom right of the save window, and select "UTF-8" instead of "ANSI". You'll have to remake Kor Duelist from scratch because the special characters are unrecoverable once you save with ANSI encoding.
I just read a thread somewhere about that. Thank you thefiremind let's see if it fixes.
*Edit* btw your localisation app is really helpful in making cards. =D>

Re: Hey! How about a begginers guide 2013 ?

PostPosted: 05 Jan 2013, 14:44
by RiiakShiNal
As thefiremind said the special characters used are unrecoverable once you save the file in ANSI instead of UTF-8 so for the localized text you will need to redo those, but that is not the only problem.

  • You misspelled MULTIVERSEID as MULTIFVERSEID (need to take out the F).
  • The Multiverse ID you used (177543) is actually the Multiverse ID for Marsh Casualties not Kor Duelist (177542).
  • There should not be a TRIGGERED_ABILITY in Kor Duelist so you need to take out the TRIGGERED_ABILITY tag and it's closure /TRIGGERED_ABILITY.
  • On the STATIC_ABILITY you misspelled filter_zone as fileter_zone (need to take out the extra e).
  • In your code in the CONTINUOUS_ACTION you have an extra end that needs to be removed.
  • This is not necessarily an error, but you should be consistent with your use of functions like Object() and EffectSource().
  • This would not cause it not to work, but Double Strike is supposed to be done on layer 6 instead of layer 7C (layer 7C is used for modifications to power and toughness). For a good list on what layers are supposed to be used for what check out: [CARD CODING] -- LAYERS 101

So cleaned up and fixed it should look like:
Code: Select all
<?xml version='1.0'?>
<CARD_V2>
   <FILENAME text="KOR_DUELIST_177542" />
   <CARDNAME text="KOR_DUELIST" />
   <TITLE>
      <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Kor Duelist]]></LOCALISED_TEXT>
      <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Duelliste kor]]></LOCALISED_TEXT>
      <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Duelista kor]]></LOCALISED_TEXT>
      <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Kor-Duellant]]></LOCALISED_TEXT>
      <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Duellante Kor]]></LOCALISED_TEXT>
      <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[コーの決闘者]]></LOCALISED_TEXT>
      <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[Kor Duelist]]></LOCALISED_TEXT>
      <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Кор-Дуэлянт]]></LOCALISED_TEXT>
      <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Duelista Kor]]></LOCALISED_TEXT>
   </TITLE>
   <MULTIVERSEID value="177542" />
   <ARTID value="KOR_DUELIST_177542" />
   <ARTIST name="Izzy" />
   <CASTING_COST cost="{W}" />
   <POWER value="1" />
   <TOUGHNESS value="1" />
   <FLAVOURTEXT>
      <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[“Swords cannot reach far enough. Chains cannot strike hard enough. An eternal dilemma, but a simple one.”]]></LOCALISED_TEXT>
      <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[« Les épées n'ont pas suffisamment d'allonge. Les chaînes n'ont pas suffisamment de force. Un dilemme certes éternel, mais simple. »]]></LOCALISED_TEXT>
      <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[“Las espadas no llegan suficientemente lejos. Las cadenas no golpean suficientemente fuerte. Un dilema eterno, aunque simple.”]]></LOCALISED_TEXT>
      <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[„Schwerter habe eine zu kurze Reichweite. Mit Ketten kann man nicht fest genug zuschlagen. Was für ein Dilemma, zum Glück ist es lösbar."]]></LOCALISED_TEXT>
      <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[“Le spade non hanno portata sufficiente. Le catene non colpiscono con forza sufficiente. Un eterno dilemma, anche se molto semplice.”]]></LOCALISED_TEXT>
      <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[「剣では十分遠くに届かない。 鎖では十分強く打ち込めない。 永遠の、だが単純なジレンマさ。」]]></LOCALISED_TEXT>
      <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[“Swords cannot reach far enough. Chains cannot strike hard enough. An eternal dilemma, but a simple one.”]]></LOCALISED_TEXT>
      <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[«Мечом далеко не достать. Цепью сильно не ударить. Это вечная дилемма, но легко разрешаемая».]]></LOCALISED_TEXT>
      <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[“As espadas não alcançam longe o suficiente. As correntes não golpeiam forte o suficiente. Um dilema eterno, mas muito simples.”]]></LOCALISED_TEXT>
   </FLAVOURTEXT>
   <TYPE metaname="Creature" />
   <SUB_TYPE metaname="Kor" order_de-DE="0" order_es-ES="1" order_fr-FR="0" order_it-IT="1" order_jp-JA="0" order_ko-KR="0" order_pt-BR="0" order_ru-RU="0" />
   <SUB_TYPE metaname="Soldier" order_de-DE="1" order_es-ES="0" order_fr-FR="1" order_it-IT="0" order_jp-JA="1" order_ko-KR="1" order_pt-BR="1" order_ru-RU="1" />
   <EXPANSION value="DPE" />
   <RARITY metaname="U" />
   <STATIC_ABILITY filter_zone="ZONE_IN_PLAY">
      <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[As long as Kor Duelist is equipped, it has double strike.]]></LOCALISED_TEXT>
      <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Tant que le Duelliste kor est équipé, il a la double initiative.]]></LOCALISED_TEXT>
      <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Mientras el Duelista kor está equipado, daña dos veces.]]></LOCALISED_TEXT>
      <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Solange der Kor-Duellant ausgerüstet ist, hat er Doppelschlag.]]></LOCALISED_TEXT>
      <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Fintanto che il Duellante Kor è equipaggiato, ha doppio attacco.]]></LOCALISED_TEXT>
      <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[コーの決闘者が装備しているかぎり、それは二段攻撃を持つ。]]></LOCALISED_TEXT>
      <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[As long as Kor Duelist is equipped, it has double strike.]]></LOCALISED_TEXT>
      <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Пока Кор-Дуэлянт снаряжен, он имеет Двойной удар.]]></LOCALISED_TEXT>
      <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Enquanto Duelista Kor estiver equipado, ele terá golpe duplo.]]></LOCALISED_TEXT>
      <CONTINUOUS_ACTION layer="6">
         if IsEquipped( EffectSource() ) then
            local characteristics = Object():GetCurrentCharacteristics()
            characteristics:Characteristic_Set( CHARACTERISTIC_DOUBLE_STRIKE, 1 )
         end
      </CONTINUOUS_ACTION>
   </STATIC_ABILITY>
   <SFX text="COMBAT_BLADE_LARGE_ATTACK" power_boundary_min="4" power_boundary_max="-1" />
   <SFX text="COMBAT_BLADE_SMALL_ATTACK" power_boundary_min="1" power_boundary_max="3" />
   <AI_BASE_SCORE score="150" zone="ZONE_IN_PLAY" />
</CARD_V2>
You reference TDX files using the ARTID tags on cards. When the game loads a card it will look for an image with the name specified as the value in the ARTID tag. So for your Kor Duelist (fixed) it will look for KOR_DUELIST_177542.TDX in the ART_ASSETS\ILLUSTRATIONS directory. I don't know if there is a length limit for image names, but most people tend to use shorter names (not that a longer name is bad). Since I already explained how to convert from regular images and TDXs using Gibbed.Duels.TdxConvert you should have enough information to manage your images now.