Board index Programs with AI or Rules Enforcement Magic: The Gathering - Duels of the Planeswalkers New MTG Cards and Decks (2010, 2012, 2013, 2014, 2015, Magic Duels) 2014
[REL] DotP 2014 - Core Fixes Mod v2.01
Moderator: CCGHQ Admins
Re: [REL] DotP 2014 - Core Fixes Mod v1.12
by Ferrix » 02 Apr 2014, 21:19
Unfortunately, some stuff is still broken:
Having two Eldrazi Conscription on the same creature lets one target two different players in 2HG.
Lord of the Void is still broken in 2HG (i.e. doesn't allow to choose a target), and probably many more.
Still many thanks for the nice work!
Having two Eldrazi Conscription on the same creature lets one target two different players in 2HG.
Lord of the Void is still broken in 2HG (i.e. doesn't allow to choose a target), and probably many more.
Still many thanks for the nice work!
Re: [REL] DotP 2014 - Core Fixes Mod v1.12
by RiiakShiNal » 03 Apr 2014, 03:31
That is to be expected, I have my hands full (I'm currently working on trying to fix several cards in Two-Headed Giant as were reported in another thread, still working on an update to the Deck Builder, an update to my core mod to fix some problems there as well as add some more cards, still have my taxes to do, and dealing with a fallen tree) so I don't get around to checking every card in all situations (and some things just can't be fixed). As such I tend to rely on people reporting problems that they find.Ferrix wrote:Unfortunately, some stuff is still broken:
Noted, I'll see if I can fix that. This is already a workaround as DotP doesn't let you choose the defending player in Two-Headed Giant like it is supposed to (it only lets you attack the player immediately in front of you), so this may get even more tricky.Ferrix wrote:Having two Eldrazi Conscription on the same creature lets one target two different players in 2HG.
Lord of the Void hasn't been fixed yet (the complete list of "fixed" cards as well as what has been fixed for each card can be found on my wiki page for this mod) so I haven't made a version to call broken. Also technically the card isn't even broken what is broken is the engine. If it worked like it should then you would attack the "team" and then choose which player to deal damage to for each creature. Then these cards wouldn't need to be "fixed" because they would do damage to the proper defending player and the abilities would trigger properly.Ferrix wrote:Lord of the Void is still broken in 2HG (i.e. doesn't allow to choose a target), and probably many more.
If you want to fuss at someone about cards that are "still" broken, complain to WotC/Stainless for not fixing their own cards.
2014/04/04 - Update on the multiple choices for defending player if creature has multiple effects (like 2 Annihilator abilities due to Eldrazi Conscription): The new method of determining a defending player will require my ObjectDC functions to allow multiple effects to read the defending player that was first chosen for any given attack (it should allow to choose different defending players for the same creature for different attacks in the same turn). This should be a drop-in replacement method so any cards already using my Annihilator functions should not need to be changed they will use this new method automatically.
The new method works like this:
- Choosing a defending player:
- Check number of players on the defending team.
- If only 1 player then simply set the defending player in the ObjectDC to that player (no query).
- If more than 1 player on the team then get Turn Number and Combat Phases this turn (attacks, Interrogation query).
- Get the Defending Player Info chest from the ObjectDC.
- If the chest doesn't exist the create and initialize it with Turn Number = -1 and Combat Phases = -1.
- Compare the current Turn and Attacks to the stored Turn and Attacks.
- If Turn or Attacks is different from stored then it is a new attack and we store the new Turn and Attack information.
- If this is a new attack then let the creature's controller choose a defending player from all players on the defending team.
- Set the defending player in the ObjectDC to the selected player.
- Retrieving a defending player:
- Get the ObjectDC.
- If ObjectDC is not nil then get the target chest from the ObjectDC.
- If the target chest is not nil then get the chosen player.
- Return the chosen player or nil.
I know the above seems like a lot of work, but for Annihilator abilities implementing it will be the same as previously:
- Annihilator | Open
- Code: Select all
<TRIGGERED_ABILITY badge="BADGE_ANNIHILATOR">
<LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Annihilator 2]]></LOCALISED_TEXT>
<TRIGGER value="ATTACKING" simple_qualifier="self" />
<RESOLUTION_TIME_ACTION>
RSN_Annihilator_Player_Choosing()
</RESOLUTION_TIME_ACTION>
<RESOLUTION_TIME_ACTION>
RSN_Annihilator_Permanent_Choosing( 2 )
</RESOLUTION_TIME_ACTION>
<RESOLUTION_TIME_ACTION>
RSN_Annihilator_Sacrificing()
</RESOLUTION_TIME_ACTION>
</TRIGGERED_ABILITY>
I still have tests to run and other cards to update to use the new method. So it may still be a couple of days before there is a Core Fixes update.
2014/04/06 - I did think of another instance that I had to code for. Multiple abilities on a card that picks targets for example a Colossal Whale with Eldrazi Conscription on it (can't use a simple workaround like changing FE_CONTROLLER to FE_TEAM as that wouldn't work right if they chose a specific player for the Annihilator 2 ability, they should be forced to choose a creature that player controls), you should still only be able to choose the defending player once. So far the tests are proceeding well (no script errors and cards seem to be working the way they should), I should know by end of tomorrow whether all the pieces are working properly together.
The code for cards like Colossal Whale isn't as simple as you need to put in a new TARGET block, a new TARGET_DEFINITION block, and modify another TARGET_DEFINITION block, but the code still isn't too complex (assuming it works exactly as intended) and part can be moved into a function to make the TARGET_DEFINITION easier.
Just getting started: Xander9009's DotP 2014 Community Wad
Need a deck builder: DotP 2014 Deck Builder
Problems Modding: DotP 2014 Frequent Modding Mistakes
Need a deck builder: DotP 2014 Deck Builder
Problems Modding: DotP 2014 Frequent Modding Mistakes
- RiiakShiNal
- Programmer
- Posts: 2185
- Joined: 16 May 2011, 21:37
- Has thanked: 75 times
- Been thanked: 497 times
Re: [REL] DotP 2014 - Core Fixes Mod v1.12
by Ferrix » 07 Apr 2014, 02:04
I did in no way want to attack you with the Lord of the Void, I just thought it might be possible to create a similar LOL file for the data of such cards. Of course I know that it is broken because they didn't fix this bug that is around since the first game. I said "still" because of that, apologies since I'm a fluent English speaker but not native, so such subtleties of the language were in no way intended to cause harm but rather one of the few cases of missing knowledge on my part. I apologize for this!
Since Geist of Saint Traft works correctly (it lets you choose whom to attack with the token), isn't it possible to use something like that for creatures with Annihilator and other effects that go against a specific player?
I'm not a Magic coder, so probably it sounds easier than it is, but I thought it should be possible to choose the target when a creature attacks by using a similar code on self instead of the new token.
Courtesy the 2013 deck pack of GrovyleXShinyCelebi:
Since Geist of Saint Traft works correctly (it lets you choose whom to attack with the token), isn't it possible to use something like that for creatures with Annihilator and other effects that go against a specific player?
I'm not a Magic coder, so probably it sounds easier than it is, but I thought it should be possible to choose the target when a creature attacks by using a similar code on self instead of the new token.
Courtesy the 2013 deck pack of GrovyleXShinyCelebi:
- Geist of Saint Traft | Open
- Code: Select all
<?xml version="1.0"?>
<CARD_V2 ExportVersion="2">
<FILENAME text="GEIST_OF_SAINT_TRAFT_277037" />
<CARDNAME text="GEIST_OF_SAINT_TRAFT" />
<TITLE>
<LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Geist of Saint Traft]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Geist de Saint Traft]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Geist de San Traft]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Geist von Sankt Traft]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Geist di San Traft]]></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[Geist de Santo Traft]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="zh-CN"><![CDATA[圣沙弗的游魂]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="zh-HK"><![CDATA[聖沙弗的遊魂]]></LOCALISED_TEXT>
</TITLE>
<MULTIVERSEID value="277037" />
<ARTID value="139449" />
<ARTIST name="Igor Kieryluk" />
<CASTING_COST cost="{1}{W}{U}" />
<SUPERTYPE metaname="Legendary" />
<TYPE metaname="Creature" />
<SUB_TYPE metaname="Spirit" />
<SUB_TYPE metaname="Cleric" />
<EXPANSION value="DPG" />
<RARITY metaname="M" />
<POWER value="2" />
<TOUGHNESS value="2" />
<STATIC_ABILITY>
<LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Hexproof]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Défense talismanique]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Antimaleficio.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Fluchsicher]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Anti-malocchio]]></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[Resistência a magia]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="zh-CN"><![CDATA[辟邪]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="zh-HK"><![CDATA[辟邪]]></LOCALISED_TEXT>
<INTRINSIC characteristic="CHARACTERISTIC_HEXPROOF" />
</STATIC_ABILITY>
<TRIGGERED_ABILITY>
<LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Whenever Geist of Saint Traft attacks, put a 4/4 white Angel creature token with flying onto the battlefield tapped and attacking. Exile that token at end of combat.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[À chaque fois que le Geist de Saint Traft attaque, mettez sur le champ de bataille un jeton de créature 4/4 blanche Ange avec le vol, engagé et attaquant. Exilez ce jeton à la fin du combat.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Siempre que el Geist de San Traft ataque, pon en el campo de batalla una ficha de criatura Ángel blanco 4/4 con la habilidad de volar, girado y atacando. Exilia esa ficha al final del combate.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Immer wenn der Geist von Sankt Traft angreift, bringe einen 4/4 weißen Engel-Kreaturenspielstein mit Flugfähigkeit getappt und angreifend ins Spiel. Schicke den Spielstein am Ende des Kampfes ins Exil.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Ogniqualvolta il Geist di San Traft attacca, metti sul campo di battaglia una pedina creatura Angelo 4/4 bianca con volare TAPpata e attaccante. Esilia quella pedina alla fine del combattimento.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[聖トラフトの霊が攻撃するたび、タップ状態で攻撃している飛行を持つ白の4/4の天使・クリーチャー・トークンを1体戦場に出す。 戦闘終了時に、そのトークンを追放する。]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[성 트라프트의 심령이 공격할 때마다, 비행 능력을 가진 4/4 백색 천사 생물 토큰 한 개를 탭되어서 공격하고 있는 채로 전장에 놓는다. 전투종료에 그 토큰을 추방한다.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Каждый раз, когда Привидение Святого Трафта атакует, положите на поле битвы одну фишку существа 4/4 белый Ангел с Полетом повернутой и атакующей. Изгоните ту фишку в конце боя.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Toda vez que Geist de Santo Traft atacar, coloque no campo de batalha uma ficha de criatura branca 4/4 do tipo Anjo com voar virada e atacando. Exile aquela ficha no final do combate.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="zh-CN"><![CDATA[每当圣沙弗的游魂攻击时,将一个4/4白色,具飞行异能的天使衍生生物横置放进战场且正进行攻击。在战斗结束时放逐该衍生物。]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="zh-HK"><![CDATA[每當聖沙弗的遊魂攻擊時,將一個4/4白色,具飛行異能的天使衍生生物橫置放進戰場且正進行攻擊。在戰鬥結束時放逐該衍生物。]]></LOCALISED_TEXT>
<TRIGGER value="ATTACKING" simple_qualifier="self" />
<RESOLUTION_TIME_ACTION>
local filter = ClearFilter()
filter:SetFilterType( FILTER_TYPE_PLAYERS )
filter:Add( FE_TEAM, OP_NOT, EffectController():GetTeam() )
EffectController():ChooseItem( "CARD_QUERY_CHOOSE_PLAYER_TO_ANGEL", EffectDC():Make_Targets(0) )
</RESOLUTION_TIME_ACTION>
<RESOLUTION_TIME_ACTION>
local delayDC = EffectDC():Make_Chest(1)
local attacked_player = EffectDC():Get_Targets(0):Get_PlayerPtr(0)
if attacked_player ~= nil then
MTG():PutTokensOntoBattlefieldTappedAndAttacking( "TOKEN_ANGEL_4_4_F_277468", 1, EffectController(), attacked_player, delayDC:Make_Chest(0) )
end
</RESOLUTION_TIME_ACTION>
<RESOLUTION_TIME_ACTION>
local i = 0
local delayDC = EffectDC():Get_Chest(1)
local token_chest = delayDC:Get_Chest(0)
if token_chest ~= nil then
local token = token_chest:Get_NthCardPtr(i)
while (token ~= nil) do
i = i + 1
token = token_chest:Get_NthCardPtr(i)
end
delayDC:Set_Int(1, i)
MTG():CreateDelayedTrigger(2, delayDC)
end
</RESOLUTION_TIME_ACTION>
<CONTINUOUS_ACTION layer="8">
local i = 0
local token_chest = EffectDC():Get_Chest(1):Get_Chest(0)
if token_chest ~= nil then
local token = token_chest:Get_NthCardPtr(i)
while (token ~= nil) do
token:GetCurrentCharacteristics():AI_SetWorthless()
i = i + 1
token = token_chest:Get_NthCardPtr(i)
end
end
</CONTINUOUS_ACTION>
<DURATION>
return MTG():GetStep() == STEP_END_OF_COMBAT
</DURATION>
</TRIGGERED_ABILITY>
<TRIGGERED_ABILITY resource_id="2">
<TRIGGER value="BEGINNING_OF_STEP">
return MTG():GetStep() == STEP_END_OF_COMBAT
</TRIGGER>
<CLEANUP fire_once="1" />
<RESOLUTION_TIME_ACTION>
local token_count = EffectDC():Get_Int(1)
local token_chest = EffectDC():Get_Chest(0)
if token_chest ~= nil then
for i = 0, (token_count-1) do
local token = token_chest:Get_NthCardPtr(i)
if token ~= nil then
token:Exile()
end
end
end
</RESOLUTION_TIME_ACTION>
</TRIGGERED_ABILITY>
<TOKEN_REGISTRATION reservation="1" type="TOKEN_ANGEL_4_4_F_277468" />
<HELP title="MORE_INFO_BADGE_TITLE_10" body="MORE_INFO_BADGE_BODY_10" zone="ZONE_ANY" />
<HELP title="MORE_INFO_BADGE_TITLE_21" body="MORE_INFO_BADGE_BODY_21" 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="900" zone="ZONE_BATTLEFIELD" />
</CARD_V2>
Re: [REL] DotP 2014 - Core Fixes Mod v1.12
by RiiakShiNal » 07 Apr 2014, 04:01
Part of the subtlety with English is that sometimes a single line can be read multiple ways and taken in multiple contexts (and how it is taken can even vary by the current mood of the reader and/or time of day, and yes I know it is the same with other languages as well). It can be very difficult (and sometimes may even be impossible) to phrase things in a way that can't be misunderstood.
There are three things of note with Geist of Saint Traft:
Also Geist of Saint Traft can actually be made with less code as the modder uses some pieces of code that are actually unnecessary. For example instead of manually counting the tokens in the token chest you can use token_chest:Count(). There are instances where looping through all the pointers is necessary, but not usually to just count them.
Additionally, there is a bug in the code you posted where worthless will not be set on additional tokens if an earlier one has died (but that should not be too important since the tokens are exiled at end of combat). The way it is coded if you have something like Doubling Season in play and you get more than 1 token then if the first token dies before end of combat then it's pointer will become nil and thus break the loop prematurely (a for loop there from 0 to count - 1 would be more appropriate).
This is what my current version of Lord of the Void now looks like:
2014/04/08 - Update: I did not get to work on it at all yesterday, but I did manage to get the variation testing done today. My initial variation tests all worked, but were less than seamless as possible for players for abilities that TARGET (variations #2 and #3 in the list above). So after reworking them some I did manage to come up with something as seamless for the player as possible while still fixing the bugs with multiple abilities that target a defending player. The new method for targeted abilities doesn't require a new TARGET or TARGET_DEFINITION block, but will require modifications to the existing TARGET_DEFINITION blocks and an additional PLAY_TIME_ACTION block (which will need to be before any other PLAY_TIME_ACTIONs).
For example this is what the Scion of Darkness TARGET_DEFINITION block looked like before:
There are three things of note with Geist of Saint Traft:
- It was made by modders not by WotC/Stainless as such it is quite possible the modder was more careful about the rulings.
- Geist of Saint Traft works differently than cards which care about the defending player or who was attacked. The ability of Geist of Saint Traft does not specify that the token attacks the player that Geist attacked so the token should be able to attack any player other than someone on the controller's team.
- Geist of Saint Traft's ability doesn't have to worry about other effects also asking which player was attacked so it doesn't have to check what was chosen for other abilities or have other abilities check what was chosen for it.
Also Geist of Saint Traft can actually be made with less code as the modder uses some pieces of code that are actually unnecessary. For example instead of manually counting the tokens in the token chest you can use token_chest:Count(). There are instances where looping through all the pointers is necessary, but not usually to just count them.
Additionally, there is a bug in the code you posted where worthless will not be set on additional tokens if an earlier one has died (but that should not be too important since the tokens are exiled at end of combat). The way it is coded if you have something like Doubling Season in play and you get more than 1 token then if the first token dies before end of combat then it's pointer will become nil and thus break the loop prematurely (a for loop there from 0 to count - 1 would be more appropriate).
This is what my current version of Lord of the Void now looks like:
- Lord of the Void (not yet tested) | Open
- Code: Select all
<?xml version="1.0"?>
<CARD_V2 ExportVersion="15">
<FILENAME text="LORD_OF_THE_VOID_359687" />
<CARDNAME text="LORD_OF_THE_VOID" />
<TITLE>
<LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Lord of the Void]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Seigneur du vide]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Señor del vacío]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Fürst der Leere]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Signore del Vuoto]]></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[Senhor do Vácuo]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="zh-CN"><![CDATA[虚空领主]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="zh-HK"><![CDATA[虛空領主]]></LOCALISED_TEXT>
</TITLE>
<MULTIVERSEID value="359687" />
<ARTID value="147253" />
<ARTIST name="Chris Rahn" />
<CASTING_COST cost="{4}{B}{B}{B}" />
<TYPE metaname="Creature" />
<SUB_TYPE metaname="Demon" />
<EXPANSION value="DPI" />
<RARITY metaname="M" />
<POWER value="7" />
<TOUGHNESS value="7" />
<STATIC_ABILITY>
<LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Flying]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Vol]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Vuela.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Fliegend]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Volare]]></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[Voar]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="zh-CN"><![CDATA[飞行]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="zh-HK"><![CDATA[飛行]]></LOCALISED_TEXT>
<INTRINSIC characteristic="CHARACTERISTIC_FLYING" />
</STATIC_ABILITY>
<TRIGGERED_ABILITY>
<LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Whenever Lord of the Void deals combat damage to a player, exile the top seven cards of that player’s library, then put a creature card from among them onto the battlefield under your control.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[À chaque fois que le Seigneur du vide inflige des blessures de combat à un joueur, exilez les sept cartes du dessus de la bibliothèque de ce joueur puis mettez sur le champ de bataille, sous votre contrôle, une carte de créature parmi celles-ci.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Siempre que el Señor del vacío haga daño de combate a un jugador, exilia las primeras siete cartas de la parte superior de la biblioteca de ese jugador, luego pon en el campo de batalla bajo tu control una carta de criatura de entre ellas.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Immer wenn der Fürst der Leere einem Spieler Kampfschaden zufügt, schicke die obersten sieben Karten der Bibliothek dieses Spielers ins Exil und bringe dann eine Kreaturenkarte davon unter deiner Kontrolle ins Spiel.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Ogniqualvolta il Signore del Vuoto infligge danno da combattimento a un giocatore, esilia le prime sette carte del grimorio di quel giocatore, poi metti sul campo di battaglia sotto il tuo controllo una carta creatura scelta tra esse.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[虚無の王がプレイヤー1人に戦闘ダメージを与えるたび、そのプレイヤーのライブラリーの一番上から7枚のカードを追放する。その後、それらのカードの中からクリーチャー・カードを1枚あなたのコントロール下で戦場に出す。]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[공허의 군주가 플레이어에게 전투피해를 입힐 때마다, 그 플레이어의 서고 맨 위에서 카드 일곱 장을 추방한 다음 그중에서 생물 카드 한 장을 골라 당신의 조종하에 전장에 놓는다.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Каждый раз, когда Повелитель Пустоты наносит боевые повреждения игроку, изгоните семь верхних карт библиотеки того игрока, затем положите находящуюся среди них карту существа на поле битвы под вашим контролем.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Toda vez que Senhor do Vácuo causar dano de combate a um jogador, exile os sete cards do topo do grimório daquele jogador. Depois, coloque um card de criatura dentre eles no campo de batalha sob o seu controle.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="zh-CN"><![CDATA[每当虚空领主对任一牌手造成战斗伤害时,放逐该牌手牌库顶的七张牌,然后将其中一张生物牌在你的操控下放进战场。]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="zh-HK"><![CDATA[每當虛空領主對任一玩家造成戰鬥傷害時,放逐該玩家牌庫頂的七張牌,然後將其中一張生物牌在你的操控下放進戰場。]]></LOCALISED_TEXT>
<TRIGGER value="SOURCE_DEALS_DAMAGE_TO_PLAYER" simple_qualifier="self" damage_type="combat" />
<RESOLUTION_TIME_ACTION>
RSN_ChooseDefendingPlayer( EffectSourceLKI(), SecondaryPlayer() )
</RESOLUTION_TIME_ACTION>
<RESOLUTION_TIME_ACTION>
local voidDC = EffectDC():Make_Chest(0)
local answerDC = EffectDC():Make_Targets(1)
local secondaryPlayer = RSN_GetDefendingPlayer( EffectSourceLKI() )
local effectController = EffectController()
for i = 0,(7-1) do
local card = secondaryPlayer:Library_GetNth( i )
if card ~= nil then
voidDC:Set_CardPtr( i, card)
voidDC:Protect_CardPtr( i )
card:Exile()
if (card:GetCardType():Test(CARD_TYPE_CREATURE) == false) then
voidDC:QueryUnselect_CardPtr(i)
end
else
break
end
end
effectController:ChooseItemFromDC( "CARD_QUERY_CHOOSE_CREATURE_TO_PUT_ONTO_BATTLEFIELD", voidDC, answerDC )
</RESOLUTION_TIME_ACTION>
<RESOLUTION_TIME_ACTION>
local targetDC = EffectDC():Get_Targets(1)
if targetDC ~= nil then
local target = targetDC:Get_CardPtr(0)
if target ~= nil then
target:PutOntoBattlefield( EffectController() )
end
end
</RESOLUTION_TIME_ACTION>
</TRIGGERED_ABILITY>
<HELP title="MORE_INFO_BADGE_TITLE_10" body="MORE_INFO_BADGE_BODY_10" 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="600" zone="ZONE_BATTLEFIELD" />
</CARD_V2>
- Those that work completely at resolution time (like Lord of the Void and Annihilator effects). These are the simplest to update.
- Those that target when attacking (like Colossal Whale and Cyclops Gladiator). These require a more complex solution.
- Those that target after combat damage (like Ink-Eyes, Servant of Oni and Skullsnatcher). These use basically the same solution as #2 (but with different parameters).
2014/04/08 - Update: I did not get to work on it at all yesterday, but I did manage to get the variation testing done today. My initial variation tests all worked, but were less than seamless as possible for players for abilities that TARGET (variations #2 and #3 in the list above). So after reworking them some I did manage to come up with something as seamless for the player as possible while still fixing the bugs with multiple abilities that target a defending player. The new method for targeted abilities doesn't require a new TARGET or TARGET_DEFINITION block, but will require modifications to the existing TARGET_DEFINITION blocks and an additional PLAY_TIME_ACTION block (which will need to be before any other PLAY_TIME_ACTIONs).
For example this is what the Scion of Darkness TARGET_DEFINITION block looked like before:
- Code: Select all
<TARGET_DEFINITION id="0">
local filter = ClearFilter()
filter:Add( FE_TYPE, OP_IS, CARD_TYPE_CREATURE )
filter:SetZone( ZONE_GRAVEYARD, SecondaryPlayer() )
</TARGET_DEFINITION>
- Code: Select all
<TARGET_DEFINITION id="0">
local oDefending = RSN_GetDefendingPlayer( EffectSourceLKI() )
local filter = ClearFilter()
filter:Add( FE_TYPE, OP_IS, CARD_TYPE_CREATURE )
if (oDefending ~= nil) then
-- A defending player has already been defined so use that one.
filter:SetZone( ZONE_GRAVEYARD, oDefending )
elseif (SecondaryPlayer():GetTeam():GetNumberOfPlayers() > 1) then
-- No defending player defined and there is more than a single player on the team.
filter:Add( FE_TEAM, OP_IS, SecondaryPlayer():GetTeam() )
filter:SetZone( ZONE_GRAVEYARD )
else
-- No defending player defined and only one player on the team so use that player.
filter:SetZone( ZONE_GRAVEYARD, SecondaryPlayer() )
end
</TARGET_DEFINITION>
- Scion of Darkness (tested, likely final) | Open
- Code: Select all
<?xml version="1.0"?>
<CARD_V2 ExportVersion="15">
<FILENAME text="SCION_OF_DARKNESS_373694" />
<CARDNAME text="SCION_OF_DARKNESS" />
<TITLE>
<LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Scion of Darkness]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Scion des ténèbres]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Vástago de la oscuridad]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Spross der Dunkelheit]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Progenie dell’Oscurità]]></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[Herdeiro da Escuridão]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="zh-CN"><![CDATA[Scion of Darkness]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="zh-HK"><![CDATA[Scion of Darkness]]></LOCALISED_TEXT>
</TITLE>
<MULTIVERSEID value="373694" />
<ARTID value="47463" />
<ARTIST name="Mark Zug" />
<CASTING_COST cost="{5}{B}{B}{B}" />
<TYPE metaname="Creature" />
<SUB_TYPE metaname="Avatar" />
<EXPANSION value="DPI" />
<RARITY metaname="R" />
<POWER value="6" />
<TOUGHNESS value="6" />
<STATIC_ABILITY>
<LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Trample]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Piétinement]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Arrolla.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Verursacht Trampelschaden]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Travolgere]]></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[Atropelar]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="zh-CN"><![CDATA[践踏]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="zh-HK"><![CDATA[踐踏]]></LOCALISED_TEXT>
<INTRINSIC characteristic="CHARACTERISTIC_TRAMPLE" />
</STATIC_ABILITY>
<TRIGGERED_ABILITY>
<LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Whenever Scion of Darkness deals combat damage to a player, you may put target creature card from that player’s graveyard onto the battlefield under your control.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[À chaque fois que le Scion des ténèbres inflige des blessures de combat à un joueur, vous pouvez mettre sur le champ de bataille, sous votre contrôle, une carte de créature ciblée du cimetière de ce joueur.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Siempre que el Vástago de la oscuridad haga daño de combate a un jugador, puedes poner en el campo de batalla bajo tu control la carta de criatura objetivo del cementerio de ese jugador.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Immer wenn der Spross der Dunkelheit einem Spieler Kampfschaden zufügt, kannst du eine Kreaturenkarte aus dem Friedhof dieses Spielers unter deiner Kontrolle ins Spiel bringen.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Ogniqualvolta la Progenie dell’Oscurità infligge danno da combattimento a un giocatore, puoi mettere sul campo di battaglia sotto il tuo controllo una carta creatura bersaglio dal cimitero di quel giocatore.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[闇の末裔がプレイヤー1人に戦闘ダメージを与えるたび、そのプレイヤーの墓地にあるクリーチャー・カード1枚を対象とする。あなたはそれを、あなたのコントロール下で戦場に出してもよい。]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[어둠의 후계자가 플레이어에게 전투피해를 입힐 때마다, 그 플레이어의 무덤에 있는 생물 카드 한 장을 목표로 정한다. 당신은 그 카드를 당신의 조종하에 전장에 놓을 수 있다.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Каждый раз, когда Отпрыск Тьмы наносит боевые повреждения игроку, вы можете положить целевую карту существа из кладбища того игрока на поле битвы под вашим контролем.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Toda vez que Herdeiro da Escuridão causa dano de combate a um jogador, você pode colocar o card de criatura alvo do cemitério daquele jogador no campo de batalha sob seu controle.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="zh-CN"><![CDATA[Whenever Scion of Darkness deals combat damage to a player, you may put target creature card from that player’s graveyard onto the battlefield under your control.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="zh-HK"><![CDATA[Whenever Scion of Darkness deals combat damage to a player, you may put target creature card from that player’s graveyard onto the battlefield under your control.]]></LOCALISED_TEXT>
<TRIGGER value="SOURCE_DEALS_DAMAGE_TO_PLAYER" simple_qualifier="self" damage_type="combat" />
<MAY />
<TARGET tag="CARD_QUERY_CHOOSE_CREATURE_TO_PUT_ONTO_BATTLEFIELD" definition="0" compartment="0" count="1" />
<TARGET_DEFINITION id="0">
local oDefending = RSN_GetDefendingPlayer( EffectSourceLKI() )
local filter = ClearFilter()
filter:Add( FE_TYPE, OP_IS, CARD_TYPE_CREATURE )
if (oDefending ~= nil) then
-- A defending player has already been defined so use that one.
filter:SetZone( ZONE_GRAVEYARD, oDefending )
elseif (SecondaryPlayer():GetTeam():GetNumberOfPlayers() > 1) then
-- No defending player defined and there is more than a single player on the team.
filter:Add( FE_TEAM, OP_IS, SecondaryPlayer():GetTeam() )
filter:SetZone( ZONE_GRAVEYARD )
else
-- No defending player defined and only one player on the team so use that player.
filter:SetZone( ZONE_GRAVEYARD, SecondaryPlayer() )
end
</TARGET_DEFINITION>
<PLAY_TIME_ACTION>
local oTarget = EffectDC():Get_Targets(0):Get_CardPtr(0)
if (oTarget ~= nil) then
RSN_SetDefendingPlayer( EffectSourceLKI(), oTarget:GetPlayer() )
end
</PLAY_TIME_ACTION>
<RESOLUTION_TIME_ACTION>
local target = EffectDC():Get_Targets(0):Get_CardPtr(0)
if target ~= nil then
target:PutOntoBattlefield( EffectController() )
end
</RESOLUTION_TIME_ACTION>
</TRIGGERED_ABILITY>
<ACTIVATED_ABILITY active_zone="ZONE_HAND">
<LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Cycling {3}]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Recyclage {3}]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Ciclo {3}.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Umwandlung {3}]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Ciclo {3}]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[サイクリング {3}]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[순환 {3}]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Цикл {3}]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Reciclar {3}]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="zh-CN"><![CDATA[循环{3}]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="zh-HK"><![CDATA[循環{3}]]></LOCALISED_TEXT>
<COST mana_cost="{3}" type="Mana" />
<COST type="DiscardSelf" />
<PLAY_TIME_ACTION>
MTG():FireTrigger( TRIGGER_CYCLED, EffectSource() )
</PLAY_TIME_ACTION>
<RESOLUTION_TIME_ACTION>
EffectController():DrawCards(1)
</RESOLUTION_TIME_ACTION>
<AI_AVAILABILITY window_step="end_of_turn" window_turn="their_turn" type="window" />
<AI_AVAILABILITY window_step="main_1" window_turn="my_turn" type="window" />
<AI_AVAILABILITY window_step="main_2" window_turn="my_turn" type="window" />
<AI_AVAILABILITY window_step="end_of_turn" window_turn="their_turn" type="window" />
<AI_AVAILABILITY window_step="declare_attackers" window_turn="their_turn" type="window" />
<AI_AVAILABILITY window_step="main_2" window_turn="my_turn" type="window" />
<AI_AVAILABILITY window_step="main_1" window_turn="my_turn" type="window" />
<AI_AVAILABILITY type="in_response" response_source="1" />
<AI_AVAILABILITY window_step="declare_blockers" type="window" />
<AI_AVAILABILITY type="in_response" response_target="1" />
</ACTIVATED_ABILITY>
<HELP title="MORE_INFO_BADGE_TITLE_1" body="MORE_INFO_BADGE_BODY_1" zone="ZONE_ANY" />
<HELP title="MORE_INFO_TITLE_CYCLING" body="MORE_INFO_BODY_CYCLING" zone="ZONE_ANY" />
<SFX text="COMBAT_PESTS_LARGE_ATTACK" power_boundary_min="4" power_boundary_max="-1" />
<SFX text="COMBAT_PESTS_SMALL_ATTACK" power_boundary_min="1" power_boundary_max="3" />
<AI_BASE_SCORE score="1200" zone="ZONE_BATTLEFIELD" />
</CARD_V2>
Just getting started: Xander9009's DotP 2014 Community Wad
Need a deck builder: DotP 2014 Deck Builder
Problems Modding: DotP 2014 Frequent Modding Mistakes
Need a deck builder: DotP 2014 Deck Builder
Problems Modding: DotP 2014 Frequent Modding Mistakes
- RiiakShiNal
- Programmer
- Posts: 2185
- Joined: 16 May 2011, 21:37
- Has thanked: 75 times
- Been thanked: 497 times
Re: [REL] DotP 2014 - Core Fixes Mod v1.12
by Ferrix » 14 Apr 2014, 09:17
Wild Pair of the 2014 core is broken (when searching one MUST put something onto the battlefield instead of being able to find nothing). Maybe you can also fix this when you have some more time, please?
Re: [REL] DotP 2014 - Core Fixes Mod v1.12
by RiiakShiNal » 14 Apr 2014, 12:28
Well, there are actually 2 parts to this card:Ferrix wrote:Wild Pair of the 2014 core is broken (when searching one MUST put something onto the battlefield instead of being able to find nothing). Maybe you can also fix this when you have some more time, please?
- You may search your library. This part works correctly as you are allowed to not search at all (assuming you have turned off the "Always use optional abilities" option in the game settings).
- Then according to the rules when you are searching a private zone you are allowed to not find something even if it is there. This part was not implemented because they did not include QUERY_FLAG_MAY in the ChooseItemFromDC() call.
This is an easy fix as it is just adding a flag. It will be in the next version (along with all the 2HG fixes mentioned previously).
Just getting started: Xander9009's DotP 2014 Community Wad
Need a deck builder: DotP 2014 Deck Builder
Problems Modding: DotP 2014 Frequent Modding Mistakes
Need a deck builder: DotP 2014 Deck Builder
Problems Modding: DotP 2014 Frequent Modding Mistakes
- RiiakShiNal
- Programmer
- Posts: 2185
- Joined: 16 May 2011, 21:37
- Has thanked: 75 times
- Been thanked: 497 times
Re: [REL] DotP 2014 - Core Fixes Mod v1.12
by Ferrix » 14 Apr 2014, 14:00
Yes, I realised the "may" part is there for if you want to search (I mistook it first and thought the card to be broken twice, but it auto-triggers as I saw when checking the XML for the card), but - as you said - not when searching already.
I think there is not much practical use in the decks I saw so far, but since by searching and not finding anything one can shuffle his library (and by not searching one can keep the library as it is) there could be decks where it has a practical use, for instance in connection with the Oracle of Mul'Daya.
The only uses I found so far is in the Yeva Deck to keep that fling spider in the library if it is the only one, one has a synergetic card on the hand and expects the opponent to play a flier, or just if one expects a wipe. This is rare but there are certainly other uses for searching and not finding a creature if one makes custom decks.
So I thought I should report it. Thank you for the work!
I think there is not much practical use in the decks I saw so far, but since by searching and not finding anything one can shuffle his library (and by not searching one can keep the library as it is) there could be decks where it has a practical use, for instance in connection with the Oracle of Mul'Daya.
The only uses I found so far is in the Yeva Deck to keep that fling spider in the library if it is the only one, one has a synergetic card on the hand and expects the opponent to play a flier, or just if one expects a wipe. This is rare but there are certainly other uses for searching and not finding a creature if one makes custom decks.
So I thought I should report it. Thank you for the work!
Re: [REL] DotP 2014 - Core Fixes Mod v2.0
by RiiakShiNal » 16 Apr 2014, 21:23
Version 2.0 is now up and contains an additional 22 fixed cards, new Defending Player functions, updates to Annihilator functions to work properly in cases of multiple Defending Player effects, updates Mindleech Mass to use the new defending player functions.
IMPORTANT NOTE: Version 2.0 of the Core Fixes now requires my ObjectDC functions as they are needed for the Defending Player functions to work properly.
IMPORTANT NOTE: Version 2.0 of the Core Fixes now requires my ObjectDC functions as they are needed for the Defending Player functions to work properly.
Just getting started: Xander9009's DotP 2014 Community Wad
Need a deck builder: DotP 2014 Deck Builder
Problems Modding: DotP 2014 Frequent Modding Mistakes
Need a deck builder: DotP 2014 Deck Builder
Problems Modding: DotP 2014 Frequent Modding Mistakes
- RiiakShiNal
- Programmer
- Posts: 2185
- Joined: 16 May 2011, 21:37
- Has thanked: 75 times
- Been thanked: 497 times
Re: [REL] DotP 2014 - Core Fixes Mod v2.0
by Luchian » 18 Apr 2014, 21:07
I found a bug in their Gigantiform. It's kicker activates every time the card is cast. Here is the fixed trigger section for the card.
- Code: Select all
<TRIGGER value="ZONECHANGE_END" simple_qualifier="self" to_zone="ZONE_BATTLEFIELD" >
return EffectSource():WasKicked() == true
</TRIGGER>
<RESOLUTION_TIME_ACTION>
if EffectSource() ~= nil then
local effectController = EffectController()
local filter = ClearFilter()
filter:SetZone( ZONE_LIBRARY, effectController )
filter:Add( FE_CARD_NAME, OP_IS, "GIGANTIFORM")
effectController:ChooseItem("CARD_QUERY_CHOOSE_CARD_NAMED_GIGANTIFORM", EffectDC():Make_Targets(1) )
end
</RESOLUTION_TIME_ACTION>
<RESOLUTION_TIME_ACTION>
local targetDC = EffectDC():Get_Targets(1)
if targetDC ~= nil then
local target = targetDC:Get_CardPtr(0)
if target ~= nil then
target:PutOntoBattlefield( EffectController() )
end
end
</RESOLUTION_TIME_ACTION>
<RESOLUTION_TIME_ACTION>
EffectController():ShuffleLibrary()
</RESOLUTION_TIME_ACTION>
<MAY />
</TRIGGERED_ABILITY>
Re: [REL] DotP 2014 - Core Fixes Mod v2.0
by thefiremind » 18 Apr 2014, 22:16
To be more precise, the ability triggers everytime, but it allows you to search for another Gigantiform only when it was really kicked. Anyway it's still a bug, even if a minor one.Luchian wrote:I found a bug in their Gigantiform. It's kicker activates every time the card is cast.
EDIT: I have a doubt, though: is the check
- Code: Select all
if EffectSource() ~= nil then
Note that the official card would throw an error in this scenario, so the card needs a fix, no matter who's right.
< Former DotP 2012/2013/2014 modder >
Currently busy with life...
Currently busy with life...
-
thefiremind - Programmer
- Posts: 3515
- Joined: 07 Nov 2011, 10:55
- Has thanked: 118 times
- Been thanked: 721 times
Re: [REL] DotP 2014 - Core Fixes Mod v2.0
by RiiakShiNal » 19 Apr 2014, 13:48
Given how Gigantiform is written and the rules on how things should work, the ability should be written with an INTERVENING_IF (though I do recognize that it is pretty pointless to check it again after the trigger) and needs to use EffectSourceLKI() for the WasKicked() check. The triggered ability remains on the stack independent of the card once it has been triggered and will properly resolve regardless of whether the original card is still on the battlefield or not.
So the EffectSource() check in the RESOLUTION_TIME_ACTION is a problem as it would cause the ability not to resolve if the card leaves the battlefield before resolution (in contradiction to rules).
In some respects both of you are right, though triggering every time when cast technically isn't a problem because there isn't a card for which this extra interaction and delay would matter, it's only a minor annoyance to the player(s). Regardless, I will have a fixed version up shortly.
Edit: New version, v2.01, is now up.
So the EffectSource() check in the RESOLUTION_TIME_ACTION is a problem as it would cause the ability not to resolve if the card leaves the battlefield before resolution (in contradiction to rules).
In some respects both of you are right, though triggering every time when cast technically isn't a problem because there isn't a card for which this extra interaction and delay would matter, it's only a minor annoyance to the player(s). Regardless, I will have a fixed version up shortly.
Edit: New version, v2.01, is now up.
Just getting started: Xander9009's DotP 2014 Community Wad
Need a deck builder: DotP 2014 Deck Builder
Problems Modding: DotP 2014 Frequent Modding Mistakes
Need a deck builder: DotP 2014 Deck Builder
Problems Modding: DotP 2014 Frequent Modding Mistakes
- RiiakShiNal
- Programmer
- Posts: 2185
- Joined: 16 May 2011, 21:37
- Has thanked: 75 times
- Been thanked: 497 times
Re: [REL] DotP 2014 - Core Fixes Mod v2.01
by Luchian » 19 Apr 2014, 14:46
I'm still pretty new at card coding, just trying to help.
I know it can't find another copy of Gigantiform as they only put one in the deck, but when you cast their version the effect forces you to shuffle your library. You shouldn't be doing that if you didn't kick it and that's what I was trying to fix.
I know it can't find another copy of Gigantiform as they only put one in the deck, but when you cast their version the effect forces you to shuffle your library. You shouldn't be doing that if you didn't kick it and that's what I was trying to fix.
Re: [REL] DotP 2014 - Core Fixes Mod v2.01
by RiiakShiNal » 19 Apr 2014, 16:02
Actually, you can have 3 copies of Gigantiform in the Enchanter's Arsenal deck (2 from unlocks and 1 from the promos).Luchian wrote:I'm still pretty new at card coding, just trying to help.
I know it can't find another copy of Gigantiform as they only put one in the deck, but when you cast their version the effect forces you to shuffle your library. You shouldn't be doing that if you didn't kick it and that's what I was trying to fix.
Actually, you don't have to activate the ability even if you did kick it (it uses the may keyword in the ability and the ability is correctly marked with the MAY tag) so you can simply choose not to activate it (though why you wouldn't activate it if you paid the kicker cost I don't know). Regardless it is fixed now so there is no point going through it again and again.
Just getting started: Xander9009's DotP 2014 Community Wad
Need a deck builder: DotP 2014 Deck Builder
Problems Modding: DotP 2014 Frequent Modding Mistakes
Need a deck builder: DotP 2014 Deck Builder
Problems Modding: DotP 2014 Frequent Modding Mistakes
- RiiakShiNal
- Programmer
- Posts: 2185
- Joined: 16 May 2011, 21:37
- Has thanked: 75 times
- Been thanked: 497 times
Re: [REL] DotP 2014 - Core Fixes Mod v2.01
by NEMESiS » 20 Jun 2014, 19:00
Here is one late entry; Grand Abolisher will prevent you from cycling cards on your opponents turn.
-
NEMESiS - Posts: 460
- Joined: 03 Jan 2013, 04:02
- Location: Pools of Becoming
- Has thanked: 70 times
- Been thanked: 21 times
Re: [REL] DotP 2014 - Core Fixes Mod v2.01
by thefiremind » 20 Jun 2014, 19:39
If Grand Abolisher is controlled by the opponent who's playing the current turn, then that's fine, cycling is an activated ability.NEMESiS wrote:Here is one late entry; Grand Abolisher will prevent you from cycling cards on your opponents turn.
< Former DotP 2012/2013/2014 modder >
Currently busy with life...
Currently busy with life...
-
thefiremind - Programmer
- Posts: 3515
- Joined: 07 Nov 2011, 10:55
- Has thanked: 118 times
- Been thanked: 721 times
68 posts
• Page 4 of 5 • 1, 2, 3, 4, 5
Who is online
Users browsing this forum: No registered users and 12 guests