It is currently 16 Apr 2024, 20:27
   
Text Size

Lands Only Request Thread

User-made mods in DLC (Downloadable Content) form.
Get MTG cards here for your DotP that aren't available anywhere else!

Moderator: CCGHQ Admins

Re: Lands Only Request Thread

Postby sumomole » 08 May 2013, 12:43

Blue Ghost wrote:I'm currently working on Alchemist's Refuge. I can't get it working, and I can't figure out why. Can someone help?
The last ability of Alchemist's Refuge applies to nonland cards in any zone, provided something is allowing you to cast them. For example, you could cast a sorcery with flashback as though it had flash.

PS: "as though they had flash" doesn't mean the flash characteristic, it can't be found by Mystical Teachings and other similar effect, so I suggest that only includes the top card of the deck when you control Future Sight or other similar effect.
User avatar
sumomole
Programmer
 
Posts: 611
Joined: 07 Jun 2011, 08:34
Has thanked: 51 times
Been thanked: 234 times

Re: Lands Only Request Thread

Postby Blue Ghost » 09 May 2013, 04:50

Thanks for the help, guys! Here's Alchemist's Refuge. Couldn't find an image on Google. Is there a better place to look for images?
Attachments
ALCHEMISTS_REFUGE_240194.zip
(1.45 KiB) Downloaded 486 times
Blue Ghost
 
Posts: 52
Joined: 07 Apr 2013, 20:41
Has thanked: 6 times
Been thanked: 0 time

Re: Lands Only Request Thread

Postby thefiremind » 09 May 2013, 09:09

Blue Ghost wrote:Couldn't find an image on Google. Is there a better place to look for images?
When you can't find a good picture anywhere else, go for the scans made by this forum's scan team:
viewtopic.php?f=15&t=445
You could also find some art through the trick explained here:
http://community.wizards.com/go/thread/ ... rt_Gallery
but not for cards that are too old or too recent, and scans are usually better than the 300px pictures you usually find this way.
< Former DotP 2012/2013/2014 modder >
Currently busy with life...
User avatar
thefiremind
Programmer
 
Posts: 3515
Joined: 07 Nov 2011, 10:55
Has thanked: 118 times
Been thanked: 721 times

Re: Lands Only Request Thread

Postby Kieran » 11 May 2013, 13:19

Blue Ghost, thanks! I've updated the first post to reflect your contribution. Alchemist's Refuge is a land I really wanted for a Simic deck I'm putting together.
Kieran
 
Posts: 232
Joined: 03 Nov 2012, 01:09
Has thanked: 21 times
Been thanked: 16 times

Re: Lands Only Request Thread

Postby NEMESiS » 12 May 2013, 18:15

Here are some of the lands that I have made:

Crumbling Necropolis
Urzatron (Urza's Tower, Urza's Power Plant, Urza's Mine)
Akoum Refuge
Jwar Isle Refuge


I will try to make few more later.

EDIT: Note that Crumbling Necropolis, Akoum Refuge and Jwar Isle Refuge need the functions folder to work. "Urzatron" its stand alone.
Attachments
Lands.zip
(1.56 MiB) Downloaded 513 times
Last edited by NEMESiS on 13 May 2013, 12:40, edited 1 time in total.
User avatar
NEMESiS
 
Posts: 460
Joined: 03 Jan 2013, 04:02
Location: Pools of Becoming
Has thanked: 70 times
Been thanked: 21 times

Re: Lands Only Request Thread

Postby East Bay » 12 May 2013, 20:01

It's not on you're list but I did Wasteland

Code: Select all
<?xml version='1.0' encoding='UTF-8'?>
<CARD_V2>
  <FILENAME text="WASTELAND_4944" />
  <CARDNAME text="WASTELAND" />
  <TITLE>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Wasteland]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Wasteland]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Wasteland]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Wasteland]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Wasteland]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[Wasteland]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[Wasteland]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Wasteland]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Wasteland]]></LOCALISED_TEXT>
  </TITLE>
  <MULTIVERSEID value="4944" />
  <ARTID value="WASTELAND" />
  <ARTIST name="Una Fricker" />
  <CASTING_COST cost="" />
  <FLAVOURTEXT>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[“The land promises nothing and keeps its promise.”
Oracle en-Vec]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[“The land promises nothing and keeps its promise.”
Oracle en-Vec]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[“The land promises nothing and keeps its promise.”
Oracle en-Vec]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[“The land promises nothing and keeps its promise.”
Oracle en-Vec]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[“The land promises nothing and keeps its promise.”
Oracle en-Vec]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[“The land promises nothing and keeps its promise.”
Oracle en-Vec]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[“The land promises nothing and keeps its promise.”
Oracle en-Vec]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[“The land promises nothing and keeps its promise.”
Oracle en-Vec]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[“The land promises nothing and keeps its promise.”
Oracle en-Vec]]></LOCALISED_TEXT>
  </FLAVOURTEXT>
  <TYPE metaname="Land" />
  <EXPANSION value="TE" />
  <RARITY metaname="U" />
  <MANA_ABILITY>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[{T}: Add {1} to your mana pool.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[{T}: Add {1} to your mana pool.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[{T}: Add {1} to your mana pool.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[{T}: Add {1} to your mana pool.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[{T}: Aggiungi {1} alla tua riserva di mana.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[{T}: Add {1} to your mana pool.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[{T}: Add {1} to your mana pool.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[{T}: Add {1} to your mana pool.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[{T}: Add {1} to your mana pool.]]></LOCALISED_TEXT>
    <COST type="TapSelf" />
    <PRODUCES amount="{1}" />
  </MANA_ABILITY>
  <ACTIVATED_ABILITY>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[{T}, Sacrifice Wasteland: Destroy target nonbasic land.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[{T}, Sacrifice Wasteland: Destroy target nonbasic land.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[{T}, Sacrifice Wasteland: Destroy target nonbasic land.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[{T}, Sacrifice Wasteland: Destroy target nonbasic land.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[{T}, Sacrifica le Lande Desolate: Distruggi una terra non base bersaglio.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[{T}, Sacrifice Wasteland: Destroy target nonbasic land.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[{T}, Sacrifice Wasteland: Destroy target nonbasic land.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[{T}, Sacrifice Wasteland: Destroy target nonbasic land.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[{T}, Sacrifice Wasteland: Destroy target nonbasic land.]]></LOCALISED_TEXT>
    <COST type="TapSelf" />
    <COST type="SacrificeSelf" />
    <TARGET_DEFINITION id="0">
    local filter = Object():GetFilter()
    filter:Clear()
    filter:AddExtra( FILTER_EXTRA_FLIP_SUPER_TYPES )
    filter:AddSupertype( SUPERTYPE_BASIC )
    filter:AddCardType( CARD_TYPE_LAND )
    filter:AddExtra( FILTER_EXTRA_FLIP_COLOUR )
    filter:SetHint( HINT_ENEMY_ONLY, EffectController() )
    filter:SetZone( ZONE_IN_PLAY )
    </TARGET_DEFINITION>
    <TARGET_DETERMINATION>
    return AtLeastOneTargetFromDefinition(0)
    </TARGET_DETERMINATION>
    <PLAY_TIME_ACTION target_choosing="1">
    EffectController():ChooseTarget( 0, "CARD_QUERY_CHOOSE_LAND_TO_DESTROY", EffectDC():Make_Targets(0) )
    </PLAY_TIME_ACTION>
    <RESOLUTION_TIME_ACTION>
    local target = EffectDC():Get_Targets(0):Get_CardPtr(0)
    if target ~= nil then   
       target:Destroy() 
    end
    </RESOLUTION_TIME_ACTION>
    <DURATION simple_duration="UntilEOT" />
    <AI_AVAILABILITY step="main_1" turn="my_turn" />
    <AI_AVAILABILITY step="declare_blockers" blocking_or_blocked="1" />
  </ACTIVATED_ABILITY>
</CARD_V2>
Attachments
WASTELAND.rar
(219.28 KiB) Downloaded 552 times
User avatar
East Bay
 
Posts: 85
Joined: 17 Mar 2013, 02:05
Has thanked: 33 times
Been thanked: 30 times

Re: Lands Only Request Thread

Postby Kieran » 12 May 2013, 23:19

Thanks for the lands. Your contributions are noted on the front page.
@ East Bay: Any lands are welcome here. The list is just a compilation of cards I personally wanted to create / request. Plus, land destruction cards are especially sacred. It's perhaps the quickest way to make a person stand up and kick over the table. Lol! I've actually experienced that before and it was priceless! Again, thanks!
Kieran
 
Posts: 232
Joined: 03 Nov 2012, 01:09
Has thanked: 21 times
Been thanked: 16 times

Re: Lands Only Request Thread

Postby Tejahn » 14 May 2013, 01:45

Fair greetings to all. I would like to request Creeping Tar Pit and Lavaclaw Reaches? Actually, I would like to request any manlands but those are the ones I desperately need at the moment. I've been watching my brother Kieran become active on this forum and I decided to join so I can make request, provide feedback, and try to contribute to this site as well. I've been using decks we got from this site against his various custom made decks but it's time I started making my own custom decks to combat the annoying stuff he made keeps putting together. Also, the Keyrunes would be good to have. I need more utility.
Tejahn
 
Posts: 430
Joined: 14 May 2013, 01:35
Has thanked: 25 times
Been thanked: 25 times

Re: Lands Only Request Thread

Postby Scion of Darkness » 14 May 2013, 10:46

Kieran the code of the tokens was implemented some time ago, and it requires the .lol file too, if you want i can upload my multi lands with that badge thing and it auto selects the the mana granted and auto taps for mana too ;) (most of the times the land grants the best mana but if you need something else it just need to activate the ability and change the mana ability it grants) right now i have all the original dual lands and one multi land (those of 3 mana colors)
User avatar
Scion of Darkness
 
Posts: 235
Joined: 27 Aug 2012, 13:14
Has thanked: 17 times
Been thanked: 23 times

Re: Lands Only Request Thread

Postby Kieran » 14 May 2013, 12:48

Yes, that at-a-glance indicator would be wonderful to have. Thanks for the offer. And be sure to provide whatever lands you can. Also, where is the thread to study how the token codes are implemented? I performed a search but I've yet to pinpoint it.
Kieran
 
Posts: 232
Joined: 03 Nov 2012, 01:09
Has thanked: 21 times
Been thanked: 16 times

Re: Lands Only Request Thread

Postby Kieran » 14 May 2013, 13:06

Tejahn, nice of you to have finally joined. This is one of the most prolific sites dedicated to MTG. The community is always helpful and willing to provide any cards that can be coded. There are a few manlands already available. Blinkmoth Nexus, Inkmoth Nexus, Mutavault, and Treetop Village are all located in the Data_Core. I'm not sure if any Modder has made any manlands but I can take a look @ the codes of the aforementioned cards and see if I can fulfill your request. But most likely, one of the modders here will probably have them available before I finish my assignments. Good luck with your request.
Kieran
 
Posts: 232
Joined: 03 Nov 2012, 01:09
Has thanked: 21 times
Been thanked: 16 times

Re: Lands Only Request Thread

Postby Scion of Darkness » 14 May 2013, 13:29

The mana tokens use depends on the land you want to code, for example lands like city of brass that the mana ability have a life cost associated or creatures that you might need more control on tapping for mana mana tokens are the way to go and the firemind implementation here is fantastic http://www.slightlymagic.net/forum/viewtopic.php?f=63&t=7655&p=111220&hilit=mana+token#p111220 search the last thefiremind post (with this code no duplicated mana tokens will be made), for the dual, tri or 5 color lands i recommend using the automatic code i'll try to post it tonight here

but for a heads up my lands are a slightly tweaked version of this:

Code: Select all
<?xml version='1.0' encoding='UTF-8'?>

<CARD_V2>
  <FILENAME text="DRAGONSKULL_SUMMIT_249716" />
  <CARDNAME text="DRAGONSKULL_SUMMIT" />

  <ARTID value="DRAGONSKULL_SUMMIT_249716" />
  <ARTIST name="Jon Foster" />

  <TYPE metaname="Land" />
  <CASTING_COST cost="" />
  <MULTIVERSEID value="249716" />
  <EXPANSION value="DPE" />
  <RARITY metaname="R" />

  <TITLE>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Dragonskull Summit]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Drachenschädel-Pass]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Cumbre Cráneo de Dragón]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Sommet du Crânedragon]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Vetta del Teschio di Drago]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[竜髑髏の山頂]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[용두개골 봉우리]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Пик Драконьего Черепа]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Pico da Caveira de Dragão]]></LOCALISED_TEXT>
  </TITLE>

  <TRIGGERED_ABILITY filter_zone="ZONE_IN_PLAY" internal="1">
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Dragonskull Summit enters the battlefield tapped unless you control a Swamp or a Mountain.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Der Drachenschädel-Pass kommt getappt ins Spiel, falls du nicht einen Sumpf oder ein Gebirge kontrollierst.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[La Cumbre Cráneo de Dragón entra al campo de batalla girada a menos que controles un pantano o una montaña.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Le Sommet du Crânedragon arrive sur le champ de bataille engagé à moins que vous ne contrôliez un marais ou une montagne.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[La Vetta del Teschio di Drago entra nel campo di battaglia TAPpata a meno che tu non controlli una Palude o una Montagna.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[竜髑髏の山頂は、あなたが沼か山をコントロールしていないかぎり、タップ状態で戦場に出る。]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[용두개골 봉우리는 당신이 늪이나 산을 조종하지 않으면 탭된 채로 전장에 들어온다.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Пик Драконьего Черепа выходит на поле битвы повернутым, если только под вашим контролем нет Болота или Горы.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Pico da Caveira de Dragão entra no campo de batalha virado, a menos que você controle um Pântano ou uma Montanha.]]></LOCALISED_TEXT>

    <TRIGGER value="ZONECHANGE_END" simple_qualifier="self" to_zone="ZONE_IN_PLAY" />

    <RESOLUTION_TIME_ACTION>
    <![CDATA[
      MultiLand:TapUnlessPlayerControl(LAND_TYPE_SWAMP, LAND_TYPE_MOUNTAIN)
    ]]>
    </RESOLUTION_TIME_ACTION>
  </TRIGGERED_ABILITY>

  <ACTIVATED_ABILITY>
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[{T}: Add {B} or {R} to your mana pool.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[{T}: Erhöhe deinen Manavorrat um {B} oder {R}.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[{T}: Agrega {B} o {R} a tu reserva de maná.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[{T} : Ajoutez {B} ou {R} à votre réserve.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[{T}: Aggiungi {B} o {R} alla tua riserva di mana.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[{T}:あなたのマナ・プールに{B}か{R}を加える。]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[{T}: {B}나 {R}를 당신의 마나풀에 담는다.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[{T}: добавьте {B} или {R} в ваше хранилище маны.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[{T}: Adicione {B} ou {R} à sua reserva de mana.]]></LOCALISED_TEXT>

    <COST type="Generic">
      <TARGET_DETERMINATION>
      <![CDATA[
        return MultiLand:PlayableByUser()
      ]]>
      </TARGET_DETERMINATION>
    </COST>

    <PLAY_TIME_ACTION>
    <![CDATA[
      MultiLand:ColourDialog()
    ]]>
    </PLAY_TIME_ACTION>

    <RESOLUTION_TIME_ACTION>
    <![CDATA[
      MultiLand:ApplyUserChoice()
    ]]>
    </RESOLUTION_TIME_ACTION>
  </ACTIVATED_ABILITY>

  <STATIC_ABILITY filter_zone="ZONE_IN_PLAY">
    <CONTINUOUS_ACTION layer="6">
    <![CDATA[
      MultiLand:GrantAbility(COLOUR_BLACK, COLOUR_RED)
    ]]>
    </CONTINUOUS_ACTION>
  </STATIC_ABILITY>

  <MANA_ABILITY resource_id="2">
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[{T}: Add {R} to your mana pool.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[{T}: Erhöhe deinen Manavorrat um {R}.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[{T}: Agrega {R} a tu reserva de maná.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[{T} : Ajoutez {R} à votre réserve.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[{T}: Aggiungi {R} alla tua riserva di mana.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[{T}:あなたのマナ・プールに{R}を加える。]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[{T}: {R}를 당신의 마나풀에 담는다.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[{T}: добавьте {R} в ваше хранилище маны.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[{T}: Adicione {R} à sua reserva de mana.]]></LOCALISED_TEXT>

    <COST type="TapSelf" />
    <PRODUCES amount="{R}" />
  </MANA_ABILITY>

  <MANA_ABILITY resource_id="1">
    <LOCALISED_TEXT LanguageCode="en-US"><![CDATA[{T}: Add {B} to your mana pool.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[{T}: Erhöhe deinen Manavorrat um {B}.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[{T}: Agrega {B} a tu reserva de maná.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[{T} : Ajoutez {B} à votre réserve.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[{T}: Aggiungi {B} alla tua riserva di mana.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[{T}:あなたのマナ・プールに{B}を加える。]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[{T}: {B}를 당신의 마나풀에 담는다.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[{T}: добавьте {B} в ваше хранилище маны.]]></LOCALISED_TEXT>
    <LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[{T}: Adicione {B} à sua reserva de mana.]]></LOCALISED_TEXT>

    <COST type="TapSelf" />
    <PRODUCES amount="{B}" />
  </MANA_ABILITY>

  <TRIGGERED_ABILITY internal="1">
    <TRIGGER value="DREW_CARD" simple_qualifier="controller">
    <![CDATA[
      return MultiLand:PlayableByEngine()
    ]]>
    </TRIGGER>

    <RESOLUTION_TIME_ACTION>
    <![CDATA[
      MultiLand:ApplyEngineChoice()
    ]]>
    </RESOLUTION_TIME_ACTION>
  </TRIGGERED_ABILITY>

  <AI_BASE_SCORE score="150" zone="ZONE_IN_PLAY" />
</CARD_V2>
User avatar
Scion of Darkness
 
Posts: 235
Joined: 27 Aug 2012, 13:14
Has thanked: 17 times
Been thanked: 23 times

Re: Lands Only Request Thread

Postby Scion of Darkness » 14 May 2013, 13:33

Code: Select all
Mana generation abilities.

  This module contains the code behing the dual lands in this DLC. The main
  idea is to abstract as much code as posible and to keep in the card only the
  required abilities/triggers without lots of lua scripting.

  To make things clear we are going to continue with an example. The code here
  was taken from Razorverge Thicket (also in this DLC).

  The first step is to implement the "enters the battlefield" trigger, which
  in the case of Razorverge Thicket states:

    "Razorverge Thicket enters the battlefield tapped unless you control
     two or fewer other lands."

  Code:
    <TRIGGERED_ABILITY filter_zone="ZONE_IN_PLAY" internal="1">
      <TRIGGER value="ZONECHANGE_END" simple_qualifier="self" to_zone="ZONE_IN_PLAY" />
      <RESOLUTION_TIME_ACTION>
        MultiLand:TapIfPlayerControlMoreThan(2, CARD_TYPE_LAND)
      </RESOLUTION_TIME_ACTION>
    </TRIGGERED_ABILITY>

  As you can see only one line is required to get the ability working. Also if
  we were to implement Sunpetal Grove instead we can do it with:

  Code:
    MultiLand:TapUnlessPlayerControl(LAND_TYPE_FOREST, LAND_TYPE_PLAINS)

  The second step is to define a static ability to keep our mana abilities
  running. This ability is like a setup. The choices you make here will affect
  the behavioir of the rest of the interface.

  Code:
    <STATIC_ABILITY filter_zone="ZONE_IN_PLAY">
      <CONTINUOUS_ACTION layer="6">
        MultiLand:GrantAbility(COLOUR_GREEN, COLOUR_WHITE)
      </CONTINUOUS_ACTION>
    </STATIC_ABILITY>

  When you call MultiLand:GrantAbility() with two colours a simple rotation
  based switching will be used. If you three a multiple choice dialog will be
  used instead (four colour dialogs are not supported. The UI provided by the
  engine is limited to three options). When the special value
  MultiLand:MANA_COLOUR_ALL is used a colour dialog will be used instead.

  This dialogs are presented only to a human player. The interface for them
  is provided for an activated ability like this:

  Code:
    <ACTIVATED_ABILITY>
      <COST type="Generic">
        <TARGET_DETERMINATION>
          return MultiLand:PlayableByUser()
        </TARGET_DETERMINATION>
      </COST>

      <PLAY_TIME_ACTION>
        MultiLand:ColourDialog()
      </PLAY_TIME_ACTION>

      <RESOLUTION_TIME_ACTION>
        MultiLand:ApplyUserChoice()
      </RESOLUTION_TIME_ACTION>
    </ACTIVATED_ABILITY>

  For the AI to make choices we should provide a trigger to make some
  calculations based on the current state of the game.

  Code:
    <TRIGGERED_ABILITY internal="1">
      <TRIGGER value="DREW_CARD" simple_qualifier="controller">
        return MultiLand:PlayableByEngine()
      </TRIGGER>

      <RESOLUTION_TIME_ACTION>
        MultiLand:ApplyEngineChoice()
      </RESOLUTION_TIME_ACTION>
    </TRIGGERED_ABILITY>

  This trigger fire the calculations when the AI player draw a card for the
  first time in a turn.

  The final step is to provide the real mana abalities:

  Code:
    <MANA_ABILITY resource_id="2">
      <COST type="TapSelf" />
      <PRODUCES amount="{W}" />
    </MANA_ABILITY>

    <MANA_ABILITY resource_id="1">
      <COST type="TapSelf" />
      <PRODUCES amount="{G}" />
    </MANA_ABILITY>

  The resource ids are asigned sequentialy starting from 1, being 1 also the
  default ability. The match between id and colour is done when you call
  MultiLand:GrantAbility, the order of the parameters specify the order of the
  abilities. For The special value MultiLand.MANA_COLOUR_ALL the order is
  WUBRG, being W assigned to 1 and G to 5. (See Birds of Paradise for a
  concrete example).

  Known limitations:

    - Dynamic mana generation is not supported.
      Affects: Dark Ritual, Elvish Archdruid, etc.

    - Cards using this library are affected by spells targetting abilities.
      Examples: Linvala, Keeper of Silence; Burning-Tree Shaman; etc.
--]]

local COLOUR_DATA = {
  engine_colour_list  = {COLOUR_WHITE, COLOUR_BLUE, COLOUR_BLACK, COLOUR_RED, COLOUR_GREEN},

  [COLOUR_COLOURLESS] = {symbol = "{1}", message = "ADD_1_TO_YOUR_MANA_POOL"},
  [COLOUR_WHITE]      = {symbol = "{W}", message = "ADD_W_TO_YOUR_MANA_POOL", badge = BADGE_PLAINS_WALK  },
  [COLOUR_BLUE]       = {symbol = "{U}", message = "ADD_U_TO_YOUR_MANA_POOL", badge = BADGE_ISLAND_WALK  },
  [COLOUR_BLACK]      = {symbol = "{B}", message = "ADD_B_TO_YOUR_MANA_POOL", badge = BADGE_SWAMP_WALK   },
  [COLOUR_RED]        = {symbol = "{R}", message = "ADD_R_TO_YOUR_MANA_POOL", badge = BADGE_MOUNTAIN_WALK},
  [COLOUR_GREEN]      = {symbol = "{G}", message = "ADD_G_TO_YOUR_MANA_POOL", badge = BADGE_FOREST_WALK  },
}

local function get(compartment, default)
  if MultiLand[Object()] == nil then
    MultiLand[Object()] = {}
  end

  return (MultiLand[Object()][compartment] or default)
end

local function set(compartment, new_value)
  if MultiLand[Object()] == nil then
    MultiLand[Object()] = {}
  end

  MultiLand[Object()][compartment] = new_value
end

local function mana_available(colour)
  local amount_value  = 0
  local amount_string = COLOUR_DATA[colour].symbol

  while EffectController():CanAfford(amount_string) ~= 0 do
    amount_value  = amount_value + 1
    amount_string = amount_string .. COLOUR_DATA[colour].symbol
  end

  return amount_value
end

local function mana_required(colour, limit)
  local filter = Object():GetFilter()

  filter:Clear()
  filter:NotTargetted()
  filter:SetConvertedCostMax(limit)
  filter:SetPlayer(EffectController())
  filter:SetZone(ZONE_HAND)

  return filter:ChromaCount(colour)
end

MultiLand = setmetatable({
  ABILITY_COMPARTMENT        = 1,
  ABILITY_LIST_COMPARTMENT   = 2,
  SELECTION_MODE_COMPARTMENT = 3,

  MANA_COLOUR_ALL            = -1,
  MANA_ABILITY_DEFAULT       = 1,

  MODE_ROTATION              = 1,
  MODE_MULTIPLE_CHOICE       = 2,
  MODE_COLOUR_DIALOG         = 3,

  TapUnlessPlayerControl = function(self, ...)
    local filter = Object():GetFilter()
    local player = Object():GetPlayer()

    for _, subtype in ipairs(arg) do
      filter:Clear()
      filter:SetPlayer(player)
      filter:SetZone(ZONE_IN_PLAY)
      filter:AddSubType(subtype)

      if filter:CountStopAt(1) == 1 then
        return
      end
    end

    Object():ComesIntoPlayTapped()
  end,

  TapIfPlayerControlMoreThan = function(self, n, ...)
    local filter = Object():GetFilter()
    local player = Object():GetPlayer()

    filter:Clear()
    filter:SetPlayer(player)
    filter:SetZone(ZONE_IN_PLAY)
    filter:SetCardInstance(Object())
    filter:AddExtra(FILTER_EXTRA_FLIP_CARD_INSTANCE)

    for _, card_type in ipairs(arg) do
      filter:AddCardType(card_type)
    end

    if filter:Count() > n then
      Object():ComesIntoPlayTapped()
    end
  end,

  GrantAbility = function(self, ...)
    if get(self.ABILITY_LIST_COMPARTMENT) == nil then
      set(self.ABILITY_COMPARTMENT, self.MANA_ABILITY_DEFAULT)

      if arg.n == 1 and arg[1] == MultiLand.MANA_COLOUR_ALL then
        set(self.ABILITY_LIST_COMPARTMENT, COLOUR_DATA.engine_colour_list)
        set(self.SELECTION_MODE_COMPARTMENT, self.MODE_COLOUR_DIALOG)
      elseif arg.n == 2 then
        set(self.ABILITY_LIST_COMPARTMENT, arg)
        set(self.SELECTION_MODE_COMPARTMENT, self.MODE_ROTATION)
      else
        set(self.ABILITY_LIST_COMPARTMENT, arg)
        set(self.SELECTION_MODE_COMPARTMENT, self.MODE_MULTIPLE_CHOICE)
      end

      self:ApplyEngineChoice()
    end

    local current_ability = get(self.ABILITY_COMPARTMENT)
    local desired_colour  = get(self.ABILITY_LIST_COMPARTMENT)[current_ability]
    local current_badge   = COLOUR_DATA[desired_colour].badge
    local characteristics = Object():GetCurrentCharacteristics()

    characteristics:Badge_Set(current_badge)
    characteristics:GrantAbility(current_ability)
  end,

  ColourDialog = function(self)
    local mode   = get(self.SELECTION_MODE_COMPARTMENT)
    local player = EffectController()

    if mode == self.MODE_COLOUR_DIALOG then
      player:ChooseColour("CARD_QUERY_CHOOSE_COLOUR", 1)
    elseif mode == self.MODE_MULTIPLE_CHOICE then
      player:BeginNewMultipleChoice()

      for _, colour in ipairs(get(self.ABILITY_LIST_COMPARTMENT)) do
        player:AddMultipleChoiceAnswer(COLOUR_DATA[colour].message)
      end

      player:AskMultipleChoiceQuestion("CARD_QUERY_CHOOSE_COLOUR")
    end
  end,

  ApplyUserChoice = function(self)
    local mode = get(self.SELECTION_MODE_COMPARTMENT)

    if mode == self.MODE_COLOUR_DIALOG then
      set(self.ABILITY_COMPARTMENT, GetChosenColour())
    elseif mode == self.MODE_MULTIPLE_CHOICE then
      set(self.ABILITY_COMPARTMENT, 1 + Object():GetMultipleChoiceResult())
    elseif mode == self.MODE_ROTATION then
      local current  = get(self.ABILITY_COMPARTMENT)
      local list     = get(self.ABILITY_LIST_COMPARTMENT)
      local selected = 1

      while (selected <= #list and selected ~= current) do
        selected = selected + 1
      end

      selected = selected + 1

      if selected > #list then
        selected = 1
      end

      set(self.ABILITY_COMPARTMENT, selected)
    end
  end,

  PlayableByUser = function(self)
    return ((Object():Tapped() == 0 and EffectController():IsHuman() ~= 0) and 1 or 0)
  end,

  PlayableByEngine = function(self)
    local player = EffectController()

    return (
          player
      and player == TriggerPlayer()
      and player:IsAI() ~= 0
      and MTG():Interrogate_CardsDrawnThisTurn(player) == 1
    )
  end,

  ApplyEngineChoice = function(self)
    local ability_index = self.MANA_ABILITY_DEFAULT
    local ability_score = - math.huge
    local current_total = mana_available(COLOUR_COLOURLESS)
    local current_score

    for index, colour in ipairs(get(self.ABILITY_LIST_COMPARTMENT)) do
      required = mana_required(colour, 1 + current_total)

      if required > 0 then
        current_score = required - mana_available(colour)

        if current_score > ability_score then
          ability_score = current_score
          ability_index = index
        end
      end
    end

    set(self.ABILITY_COMPARTMENT, ability_index)
  end,
}, {__mode = "k"}) 
if you want to take a look this is the lol file that makes the magic, i only modded the land ability so the AI could choose the mana granted by looking at your hand
User avatar
Scion of Darkness
 
Posts: 235
Joined: 27 Aug 2012, 13:14
Has thanked: 17 times
Been thanked: 23 times

Re: Lands Only Request Thread

Postby Kieran » 14 May 2013, 13:45

Nice! I'll start looking into everything shortly.
Kieran
 
Posts: 232
Joined: 03 Nov 2012, 01:09
Has thanked: 21 times
Been thanked: 16 times

Re: Lands Only Request Thread

Postby Kieran » 20 May 2013, 17:16

NEMESiS, the credit for your contributions of Arcane Sanctum, Jungle Shrine, and Savage Lands have been added to the opening post. I'll actually provide a DL of all the lands currently available a little later. Thank you to everyone!
Kieran
 
Posts: 232
Joined: 03 Nov 2012, 01:09
Has thanked: 21 times
Been thanked: 16 times

PreviousNext

Return to New MTG Cards and Decks (2010, 2012, 2013, 2014, 2015, Magic Duels)

Who is online

Users browsing this forum: No registered users and 11 guests


Who is online

In total there are 11 users online :: 0 registered, 0 hidden and 11 guests (based on users active over the past 10 minutes)
Most users ever online was 4143 on 23 Jan 2024, 08:21

Users browsing this forum: No registered users and 11 guests

Login Form