Difference between revisions of "DotP 2014: Core Fixes"

From RSN Magic
Jump to: navigation, search
(Cards)
(Items Included)
Line 142: Line 142:
 
** Fixed "Defending Player" behavior in Two-Headed Giant.
 
** Fixed "Defending Player" behavior in Two-Headed Giant.
  
=== Functions - RSN_ANNIHILATOR.LOL ===
+
=== RSN_ANNIHILATOR.LOL ===
 
* [[#RSN_Annihilator_Player_Choosing|RSN_Annihilator_Player_Choosing]]()
 
* [[#RSN_Annihilator_Player_Choosing|RSN_Annihilator_Player_Choosing]]()
 
* [[#RSN_Annihilator_Permanent_Choosing|RSN_Annihilator_Permanent_Choosing]]( nAmount )
 
* [[#RSN_Annihilator_Permanent_Choosing|RSN_Annihilator_Permanent_Choosing]]( nAmount )
Line 183: Line 183:
 
  RSN_Annihilator_Sacrificing()
 
  RSN_Annihilator_Sacrificing()
 
  </RESOLUTION_TIME_ACTION>
 
  </RESOLUTION_TIME_ACTION>
 +
 +
=== RSN_DEFENDING_PLAYER.LOL ===
 +
* [[#Defending Player Constants|Defending Player Constants]]
 +
* [[#RSN_ChooseDefendingPlayer|RSN_ChooseDefendingPlayer]]( oCard, oDefending )
 +
* [[#RSN_GetDefendingPlayer|RSN_GetDefendingPlayer]]( oCard )
 +
* [[#RSN_SetDefendingPlayer|RSN_SetDefendingPlayer]]( oCard, oDefending )
 +
 +
==== Defending Player Constants ====
 +
* RSN_REGISTER_DEFENDING_PLAYER_INFO_CHEST = 81920010
 +
* RSN_REGISTER_DEFENDING_PLAYER_TARGET_CHEST = 81920011
 +
 +
==== RSN_ChooseDefendingPlayer ====
 +
This function will properly select and set the defending player in all game types with a minimum of annoyance to the player.  This means that in a FFA game regardless of how many players there are no question will be asked and the defending player will be set automatically since there is only one player per team.  In 2HG games the controller of the "card" will get to choose the defending player only once per attack for this "card" regardless of how many effects need a defending player.
 +
 +
'''Parameters:'''
 +
* oCard - This is the card for which to set the Defending Player for (should always be a creature since only creatures can attack).  Should always use LKI versions of card pointers in case the card has changed zones prior to access.
 +
* oDefending - This is the Player who the game engine considers to be the "Defending Player" this will be set as the Defending Player in the case that the defending team only has one player.
 +
 +
'''Returns:''' None.
 +
 +
'''Usage Example:'''
 +
<RESOLUTION_TIME_ACTION>
 +
RSN_ChooseDefendingPlayer( EffectSourceLKI(), SecondaryPlayer() )
 +
</RESOLUTION_TIME_ACTION>
 +
 +
==== RSN_GetDefendingPlayer ====
 +
This function will return the stored defending player if any.  If for whatever reason this can't be done (such as defending player not set due to coding error) it will return nil.
 +
 +
'''Parameters:'''
 +
* oCard - This is the card to check to see if a "Defending Player" has already been set.  Should always use LKI versions of card pointers in case the card has changed zones prior to access.
 +
 +
'''Returns:'''
 +
* Player Pointer - If a Defending Player has already been set for this specific attack.
 +
* nil - All other cases (pointer not set, new attack, chest not created, etc...).
 +
 +
'''Usage Examples:'''
 +
local oDefendingPlayer = RSN_GetDefendingPlayer( EffectSourceLKI() )
 +
 +
RSN_GetDefendingPlayer( EffectSourceLKI() ):DiscardRandomCard()
 +
 +
==== RSN_SetDefendingPlayer ====
 +
This function will forcibly set a defending player for later retrieval.  This is so that cards that can't use the RSN_ChooseDefendingPlayer() function can still make use of the defending player and be as multiple effect friendly as possible.
 +
 +
'''Parameters:'''
 +
* oCard - This is the card for which to set the Defending Player for (should always be a creature since only creatures can attack).  Should always use LKI versions of card pointers in case the card has changed zones prior to access.
 +
* oDefending - This is the player to set the Defending Player to.
 +
 +
'''Returns:''' None.
 +
 +
'''Usage Example:''' ''(Taken from Colossal Whale)''
 +
<TRIGGER value="ATTACKING" simple_qualifier="self" />
 +
<TARGET tag="CARD_QUERY_CHOOSE_CREATURE_TO_EXILE" definition="0" compartment="0" count="1" />
 +
<MAY />
 +
<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
 +
filter:Add( FE_CONTROLLER, OP_IS, oDefending )
 +
else
 +
filter:Add( FE_TEAM, OP_IS, TriggerPlayer():GetTeam() )
 +
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>
  
 
=== Text Entries ===
 
=== Text Entries ===

Revision as of 14:03, 16 April 2014

This mod contains fixes for cards included in the DotP 2014 official game. As such you will not find art, decks, or other game changes in this mod.

Requirements

Installation

Just drop the wad into the DotP 2014 game directory (along with its requirements) and you're done.

Items Included

Cards

  • Admonition Angel (ADMONITION_ANGEL_357876)
    • Can now target other instances of Admonition Angel (changed FE_CARD_NAME to FE_CARD_INSTANCE).
  • Artisan of Kozilek (ARTISAN_OF_KOZILEK_357892)
    • Rework of Annihilator to prevent sacrificing of invisible tokens and correct behavior in 2-Headed Giant games.
  • Blightsteel Colossus (BLIGHTSTEEL_COLOSSUS_348457)
    • Last ability will no longer prevent Blightsteel Colossus from being discarded.
    • Shuffles owner's library now instead of EffectController's (for example after being taken by Act of Treason, then sacrificed).
  • Butcher Ghoul (BUTCHER_GHOUL_337736)
    • Undying fixed so that it actually enters the battlefield with a +1/+1 counter instead of getting one after it enters.
    • Undying updated to use simpler code (no more delayed trigger).
  • Colossal Whale (COLOSSAL_WHALE_357883)
    • Fixed "Defending Player" behavior in Two-Headed Giant.
  • Commandeer (COMMANDEER_357890)
    • Fixed alternate cost text problem by changing the text id to CARD_QUERY_EXILE_2_BLUE_CARDS.
  • Cyclops Gladiator (CYCLOPS_GLADIATOR_348865)
    • Fixed "Defending Player" behavior in Two-Headed Giant.
  • Dimir Cutpurse (DIMIR_CUTPURSE_375081)
    • Fixed "Defending Player" behavior in Two-Headed Giant.
  • Dinrova Horror (DINROVA_HORROR_365868)
    • Changed GetPlayer() to GetOwner() so that the correct player is forced to discard.
  • Doomsday Specter (DOOMSDAY_SPECTER_365870)
    • Fixed "Defending Player" behavior in Two-Headed Giant.
  • Drove of Elves (DROVE_OF_ELVES_348519)
    • Layer corrected from 7B to 7A
    • Added STATIC_ABILITY to set P/T in Exile zone.
  • Dungrove Elder (DUNGROVE_ELDER_348462)
    • Added STATIC_ABILITY to set P/T in Exile zone.
  • Eldrazi Conscription (ELDRAZI_CONSCRIPTION_338013)
    • Rework of Annihilator to prevent sacrificing of invisible tokens and correct behavior in 2-Headed Giant games.
  • Form of the Dragon (FORM_OF_THE_DRAGON_349284)
    • Fixed Two-Headed Giant behavior in the prevention of attacks by non-flying creatures.
  • Geist-Honored Monk (GEISTHONORED_MONK_337863)
    • Added STATIC_ABILITY to set P/T in Exile zone.
  • Geralf's Messenger (GERALFS_MESSENGER_348993)
    • Undying fixed so that it actually enters the battlefield with a +1/+1 counter instead of getting one after it enters.
    • Undying updated to use simpler code (no more delayed trigger).
  • Ghastlord of Fugue (GHASTLORD_OF_FUGUE_357888)
    • Fixed "Defending Player" behavior in Two-Headed Giant.
  • Green Sun's Zenith (GREEN_SUNS_ZENITH_348854)
    • Will now shuffle twice as per the rules (can be important for cards like Psychogenic Probe).
  • Heedless One (HEEDLESS_ONE_348872)
    • Layer corrected from 7B to 7A
    • Added STATIC_ABILITY to set P/T in Exile zone.
  • Heedless One (HEEDLESS_ONE_CH7)
    • Layer corrected from 7B to 7A
    • Added STATIC_ABILITY to set P/T in Exile zone.
  • Hellcarver Demon (HELLCARVER_DEMON_348933)
    • Fixed a logic bug that was skipping cards to exile at the top of the deck.
  • Hypnotic Specter (HYPNOTIC_SPECTER_345373)
    • Fixed "Defending Player" behavior in Two-Headed Giant.
  • Ink-Eyes, Servant of Oni (INKEYES_SERVANT_OF_ONI_359477)
    • Fixed "Defending Player" behavior in Two-Headed Giant.
  • It That Betrays (IT_THAT_BETRAYS_338017)
    • Rework of Annihilator to prevent sacrificing of invisible tokens and correct behavior in 2-Headed Giant games.
  • Jace's Mindseeker (JACES_MINDSEEKER_362753)
    • Changed Library_GetNth(1) to Library_GetNth(0) so that the top card is properly milled.
  • Jagged Poppet (JAGGED_POPPET_351065)
    • Fixed "Defending Player" behavior in Two-Headed Giant.
  • Krovikan Mist (KROVIKAN_MIST_337812)
    • Layer corrected from 7B to 7A
    • Added STATIC_ABILITY to set P/T in Exile zone.
  • Liliana's Reaver (LILIANAS_REAVER_362754)
    • Fixed "Defending Player" behavior in Two-Headed Giant.
  • Lobotomy (LOBOTOMY_357874)
    • Corrected a logic error in the filter than was preventing non-basic lands from being selected.
  • Lord of the Void (LORD_OF_THE_VOID_359687)
    • Fixed "Defending Player" behavior in Two-Headed Giant.
  • Master of Diversion (MASTER_OF_DIVERSION_345260)
    • Fixed "Defending Player" behavior in Two-Headed Giant.
  • Mikaeus, the Unhallowed (MIKAEUS_THE_UNHALLOWED_348996.XML)
    • Complete rework of the ability to grant Undying to other non-human creatures to have them actually enter the battlefield with +1/+1 counters instead of getting them afterwards.
    • Rework of the Undying grant ability again to remove the dependency on my Characteristics Functions.
    • Undying updated to use simpler code (no more delayed trigger).
  • Mindleech Mass (MINDLEECH_MASS_357873)
    • Extra check for nil to prevent errors in SCRIPT_LOG.
    • Fixed "Defending Player" behavior in Two-Headed Giant.
  • Mistblade Shinobi (MISTBLADE_SHINOBI_351053)
    • Fixed "Defending Player" behavior in Two-Headed Giant.
  • Multani, Maro-Sorcerer (MULTANI_MAROSORCERER_348443)
    • Added STATIC_ABILITY to set P/T in Exile zone.
  • Nemesis of Reason (NEMESIS_OF_REASON_349008)
    • Fixed "Defending Player" behavior in Two-Headed Giant.
  • Nightmare (NIGHTMARE_349014)
    • Added STATIC_ABILITY to set P/T in Exile zone.
  • Okiba-Gang Shinobi (OKIBAGANG_SHINOBI_351055)
    • Fixed "Defending Player" behavior in Two-Headed Giant.
  • Pathrazer of Ulamog (PATHRAZER_OF_ULAMOG_338018)
    • Rework of Annihilator to prevent sacrificing of invisible tokens and correct behavior in 2-Headed Giant games.
  • Primalcrux (PRIMALCRUX_348957)
    • Added STATIC_ABILITY to set P/T in Exile zone.
  • Primalcrux (PRIMALCRUX_CH7)
    • Added STATIC_ABILITY to set P/T in Exile zone.
  • Primeval Titan (PRIMEVAL_TITAN_348409)
    • Added QUERY_FLAG_UP_TO so that player may choose only one land land if they desire.
  • Protean Hydra (PROTEAN_HYDRA_345321)
    • 2nd Ability changed so it no longer adds counters if Protean Hydra changes zones before end of turn.
  • Ranger's Guile (RANGERS_GUILE_350617)
    • Can no longer target other player's creatures.
  • Scion of Darkness (SCION_OF_DARKNESS_373694)
    • Fixed "Defending Player" behavior in Two-Headed Giant.
  • Silent-Blade Oni (SILENTBLADE_ONI_375102)
    • Fixed "Defending Player" behavior in Two-Headed Giant.
  • Skullsnatcher (SKULLSNATCHER_351056)
    • Fixed "Defending Player" behavior in Two-Headed Giant.
  • Spirit Mantle (SPIRIT_MANTLE_345358)
    • Added workaround so that Protection is properly lost when LoseAllAbilities() is called.
  • Stave Off (STAVE_OFF_348515)
    • Added workaround so that Protection is properly lost when LoseAllAbilities() is called.
  • Sword of War and Peace (SWORD_OF_WAR_AND_PEACE_350179)
    • Fixed "Defending Player" behavior in Two-Headed Giant.
  • Thalia, Guardian of Thraben (THALIA_GUARDIAN_OF_THRABEN_348998)
    • Added a land exclusion to the trigger so that untapped mana producing land is not required to play land.
  • Throat Slitter (THROAT_SLITTER_351057)
    • Fixed "Defending Player" behavior in Two-Headed Giant.
  • Ulamog's Crusher (ULAMOGS_CRUSHER_338023)
    • Rework of Annihilator to prevent sacrificing of invisible tokens and correct behavior in 2-Headed Giant games.
  • Unquestioned Authority (UNQUESTIONED_AUTHORITY_365919)
    • Added workaround so that Protection is properly lost when LoseAllAbilities() is called.
  • Vengeful Vampire (VENGEFUL_VAMPIRE_350086)
    • Undying fixed so that it actually enters the battlefield with a +1/+1 counter instead of getting one after it enters.
    • Undying updated to use simpler code (no more delayed trigger).
  • Virulent Sliver (VIRULENT_SLIVER_348535)
    • Fixed "Defending Player" behavior in Two-Headed Giant.
  • Vorapede (VORAPEDE_348984)
    • Undying fixed so that it actually enters the battlefield with a +1/+1 counter instead of getting one after it enters.
    • Undying updated to use simpler code (no more delayed trigger).
  • Wild Pair (WILD_PAIR_350214)
    • Made finding a card during the library search optional (in compliance with the rules).
    • Added a missing ShuffleLibrary() call to the ability.
  • Wrexial, the Risen Deep (WREXIAL_THE_RISEN_DEEP_375077)
    • Fixed "Defending Player" behavior in Two-Headed Giant.

RSN_ANNIHILATOR.LOL

RSN_Annihilator_Player_Choosing

This function is used to have the player choose the target for the Annihilator ability (first RESOLUTION_TIME_ACTION). In Free-For-All games this is handled automatically since the only choice is the defending player. In 2-Headed Giant games the controller will get to choose between the players on the defending team.

Parameters: None.

Returns: None.

Usage Example:

<RESOLUTION_TIME_ACTION>
	RSN_Annihilator_Player_Choosing()
</RESOLUTION_TIME_ACTION>

RSN_Annihilator_Permanent_Choosing

This function is used for the second RESOLUTION_TIME_ACTION for Annihilator abilities and will force the chosen player to sacrifice the appropriate number of permanents for this Annihilator ability.

Parameters:

  • nAmount - The amount of Annihilator the card has, will be 2 for Annihilator 2 abilities, 3 for Annihilator 3, etc....

Returns: None.

Usage Example:

<RESOLUTION_TIME_ACTION>
	RSN_Annihilator_Permanent_Choosing( 2 )
</RESOLUTION_TIME_ACTION>

RSN_Annihilator_Sacrificing

This function is used for the third RESOLUTION_TIME_ACTION for Annihilator abilities and will handle sacrificing all chosen permanents regardless of the amount.

Parameters: None.

Returns: None.

Usage Example:

<RESOLUTION_TIME_ACTION>
	RSN_Annihilator_Sacrificing()
</RESOLUTION_TIME_ACTION>

RSN_DEFENDING_PLAYER.LOL

Defending Player Constants

  • RSN_REGISTER_DEFENDING_PLAYER_INFO_CHEST = 81920010
  • RSN_REGISTER_DEFENDING_PLAYER_TARGET_CHEST = 81920011

RSN_ChooseDefendingPlayer

This function will properly select and set the defending player in all game types with a minimum of annoyance to the player. This means that in a FFA game regardless of how many players there are no question will be asked and the defending player will be set automatically since there is only one player per team. In 2HG games the controller of the "card" will get to choose the defending player only once per attack for this "card" regardless of how many effects need a defending player.

Parameters:

  • oCard - This is the card for which to set the Defending Player for (should always be a creature since only creatures can attack). Should always use LKI versions of card pointers in case the card has changed zones prior to access.
  • oDefending - This is the Player who the game engine considers to be the "Defending Player" this will be set as the Defending Player in the case that the defending team only has one player.

Returns: None.

Usage Example:

<RESOLUTION_TIME_ACTION>
	RSN_ChooseDefendingPlayer( EffectSourceLKI(), SecondaryPlayer() )
</RESOLUTION_TIME_ACTION>

RSN_GetDefendingPlayer

This function will return the stored defending player if any. If for whatever reason this can't be done (such as defending player not set due to coding error) it will return nil.

Parameters:

  • oCard - This is the card to check to see if a "Defending Player" has already been set. Should always use LKI versions of card pointers in case the card has changed zones prior to access.

Returns:

  • Player Pointer - If a Defending Player has already been set for this specific attack.
  • nil - All other cases (pointer not set, new attack, chest not created, etc...).

Usage Examples:

local oDefendingPlayer = RSN_GetDefendingPlayer( EffectSourceLKI() )
RSN_GetDefendingPlayer( EffectSourceLKI() ):DiscardRandomCard()

RSN_SetDefendingPlayer

This function will forcibly set a defending player for later retrieval. This is so that cards that can't use the RSN_ChooseDefendingPlayer() function can still make use of the defending player and be as multiple effect friendly as possible.

Parameters:

  • oCard - This is the card for which to set the Defending Player for (should always be a creature since only creatures can attack). Should always use LKI versions of card pointers in case the card has changed zones prior to access.
  • oDefending - This is the player to set the Defending Player to.

Returns: None.

Usage Example: (Taken from Colossal Whale)

<TRIGGER value="ATTACKING" simple_qualifier="self" />
<TARGET tag="CARD_QUERY_CHOOSE_CREATURE_TO_EXILE" definition="0" compartment="0" count="1" />
<MAY />
<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
		filter:Add( FE_CONTROLLER, OP_IS, oDefending )
	else
		filter:Add( FE_TEAM, OP_IS, TriggerPlayer():GetTeam() )
	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>

Text Entries

  • Tribal Enchantment (COMPOUND_TYPE_ENCHANTMENT_TRIBAL)

Change History

  • v1.12
    • Fixed Hellcarver Demon, logic bug was skipping cards at the top of the deck when exiling (thanks to sumomole).
    • Simplified Undying code, no more need for a delayed trigger (thanks to thefiremind).
  • v1.11
    • Fixed Drove of Elves, Dungrove Elder, Geist-Honored Monk, Heedless One, Krovikan Mist, Multani, Maro-Sorcerer, Nightmare, and Primalcrux so they now properly set their Power/Toughness in the Exile zone (thanks to thefiremind).
    • Fixed the Expansion's Heedless One to put it's Power/Toughness set on the proper layer of 7A.
    • Updated order attribute to ensure proper overriding of expansion cards.
  • v1.10
    • Fixed Ranger's Guile, it now only allows targeting of your creatures (thanks to Nay).
    • Chinese translations for all fixed cards (thanks to Tigertooth for providing them).
  • v1.09
    • Rework of Mikaeus, the Unhallowed as we now know that we can access resource abilities from a granted ability (this was not possible in DotP 2013). As a nice side-effect this mod no longer has any requirements other than the DotP 2014 itself.
    • Fixed Form of the Dragon to work properly in preventing attacks in Two-Headed Giant games by non-flying creatures in compliance with rule 810.7c of the Comprehensive Rules.
  • v1.08
    • Added a workaround for Protection not being removed by calls to LoseAllAbilities() for Spirit Mantle, Stave Off, and Unquestioned Authority.
  • v1.07
    • Fixed Blightsteel Colossus, can now be discarded and shuffles owner's library (thanks to sumomole).
    • Fixed Green Sun's Zenith, it now shuffles the deck twice as per the rules (thanks to sumomole).
    • Fixed Lobotomy, logic error was preventing the selection of non-basic lands (thanks to sumomole).
  • v1.06
    • Fixed wrong alternate cost text on Commandeer (thanks to Miraika)
  • v1.05
    • Finally fixed Mikaeus, the Unhallowed.
    • Added Tribal Enchantment text fix. (thanks to thefiremind)
    • This mod now requires my Characteristics and ObjectDC functions to work properly.
  • v1.04
    • Reverting Mikaeus, the Unhallowed until I can come up with a proper fix for his granted Undying ability.
  • v1.03
    • Additional nil check on Mindleech Mass.
    • Undying fixed on Butcher Ghoul, Geralf's Messenger, Mikaeus, the Unhallowed, Vengeful Vampire, and Vorapede (thanks to sumomole and thefiremind).
  • v1.02
    • Layers fixed on Drove of Elves, Heedless One, and Krovikan Mist (thanks to thefiremind)
  • v1.01
    • Protean Hydra fixed (thanks to sumomole)
  • v1.0 - Initial Release

Download

File:Data DLC Core Fixes.wad