It is currently 08 Jul 2021, 00:17
   
Text Size

[fixed/closed]Necropotence

Moderators: BAgate, drool66, stassy, Aswan jaguar, gmzombie, CCGHQ Admins

[fixed/closed]Necropotence

Postby Aswan jaguar » 04 Jul 2013, 09:45

Describe the Bug:
1- Necropotence will not exile cards from other spells or abilities that cause you to discard.
2- The first time-turn it is in play and you draw a lot cards and you have to discard them at the end of turn AI at least doesn't discard the surplus cards in hand 7+ (next turns it seems to work fine)


Which card did behave improperly ?
Necropotence

Which update are you using?(date,name)Which type(Duel,Gauntlet,Sealed Deck)
ML3-JUNE.V2

What exactly should be the correct behavior/interaction ?
1- When in play cards that you discard have to go to exile.
2- Even in the first turn you have to discard the cards more that exceed 7.

Are any other cards possibly affected by this bug ?
Attachments
skirge familiar-necropotence.rar
(1.82 KiB) Downloaded 90 times
Last edited by BAgate on 18 Jan 2014, 02:42, edited 3 times in total.
Reason: closed
---
Trying to squash some bugs and playtesting.
User avatar
Aswan jaguar
Super Tester Elite
 
Posts: 7450
Joined: 13 May 2010, 12:17
Has thanked: 639 times
Been thanked: 351 times

Re: Necropotence

Postby stassy » 04 Jul 2013, 09:54

confirmed, tested with Gamble (Gamble go to gy upon resolution but also the random card)
stassy
Moderator
 
Posts: 5274
Joined: 25 Feb 2009, 07:06
Has thanked: 471 times
Been thanked: 337 times

[confirmed]Necropotence

Postby BAgate » 25 Nov 2013, 20:30

version PTT

Necropotence does not cause discarded cards to be exiled.

Gargaroz asked that this be broken off from a previous bug report, but it is listed in the unfixable section, so should we remove it, or has something changed?
Attachments
necropotence.rar
(2 KiB) Downloaded 87 times
Last edited by stassy on 26 Nov 2013, 06:20, edited 1 time in total.
Reason: bug confirmed
Working on: housekeeping and archived reports
User avatar
BAgate
Tester
 
Posts: 2445
Joined: 06 Mar 2012, 11:09
Has thanked: 117 times
Been thanked: 158 times

Re: Necropotence

Postby stassy » 26 Nov 2013, 06:19

We know that Korath took a peek at the unresolved/non fixable cards some time ago, so maybe he can have a try at this :P
stassy
Moderator
 
Posts: 5274
Joined: 25 Feb 2009, 07:06
Has thanked: 471 times
Been thanked: 337 times

Re: [confirmed]Necropotence

Postby Korath » 29 Nov 2013, 17:19

If it were worded, "If you would discard a card, exile it instead", this would be easy - discard() and discard_card() in the exe aren't terribly complicated, and we know how to safely add a new event for "this card is being discarded". It would probably be closer to correct than what we have now, too.

Tracking cards in the graveyard, though, is very hard in Manalink. (Try removing a card from near the bottom of your graveyard in response to Animate Dead, using something like Soldevi Digger. Poof! We lost track, and Animate Dead fizzles, even though the card it was targeting is still in the graveyard, since it's not at the exact same place it was before.) So I don't expect this'll interact properly with other "Whenever x discards a card, [do something with that card]" triggers anytime soon.

Hrm.

Looking a bit more closely, there's already a trigger being dispatched in the right place. TRIGGER_DISCARD with the being-dicsarded card in (trigger_cause_controller,trigger_cause), and set byte_786DD4 to 1 to suppress it being put in the graveyard.
Code: Select all
int
discard_card(int player, int card)
{ // 0x4337A0
  int old_tcc = trigger_cause_controller;
  int old_tc = trigger_cause;
  trigger_cause_controller = player;
  trigger_cause = card;
  byte_786DD4 = 0;
  dispatch_trigger_twice_once_with_each_player_as_reason(player, TRIGGER_DISCARD, str_draw_a_card, 0);
  trigger_cause = old_tc;
  trigger_cause_controller = old_tcc;
  if (byte_786DD4 != 1)
    {
      dispatch_event_to_single_card(player, card, EVENT_DISCARD, 1 - player, -1);
      put_card_in_graveyard(player, card);
      get_card_instance(player, card)->internal_card_id = -1; // which obliterates it
      call_sub_437E20_unless_ai_is_speculating(); // sub_437E20() is display-related; it probably flags the graveyard to be redrawn
      play_sound_effect(WAV_DISCARD);
      --hand_count[player];
    }
  return 0;
}
Workaround installed in 5f68803. This works like the "if you would discard a card, exile it instead" wording from above, so you won't, for example, have a chance to resolve the trigger on Darksteel Colossus and shuffle him into your library before it gets exiled; it never actually gets into your graveyard. And it'll probably break when interacting with Madness cards, since madness' implementation looks nonsensical to me; I can't follow it all. (On the other hand, madness is apparently not working anyway.) But still, closer than it was.
User avatar
Korath
DEVELOPER
 
Posts: 3522
Joined: 02 Jun 2013, 05:57
Has thanked: 491 times
Been thanked: 1037 times


Return to Archived Reports

Who is online

Users browsing this forum: Bing [Bot] and 4 guests


Who is online

In total there are 5 users online :: 1 registered, 0 hidden and 4 guests (based on users active over the past 10 minutes)
Most users ever online was 1922 on 07 Jun 2021, 06:01

Users browsing this forum: Bing [Bot] and 4 guests

Login Form