Page 1 of 1

[fixed]Kaya, Ghost Assassin exile ability

PostPosted: 11 Jun 2018, 15:30
by Korath
Describe the Bug:
  1. You can't choose to exile the planeswalker itself with Kaya, Ghost Assassin's first ability.
  2. You get a cancel button instead of a done (or decline) one. If it's meant to cancel, it doesn't.
  3. If it's meant to mean done/decline, and you click it, the game dumps twice immediately, then segfaults at your next upkeep.
    Code: Select all
    bad parameters
    get_card_instance(-1, -1)
    functions/show_backtrace.c:19:show_backtrace(...)
    functions/deck.c:307:get_card_instance(...)
    functions/deck.c:440:get_original_internal_card_id(...)
    cards/conspiracy-take-the-crown.c:1921:card_kaya_ghost_assassin(...)
    call_cards_function<eax>(card_data_t *cd<eax>, int player, int card, event_t event)
    fx_activation_906(int player, int card, event_t event)
    call_card_fn_impl(...)
    functions/events.c:36:call_card_fn(...)
    functions/events.c:259:dispatch_event_to_single_card(...)
    resolve_top_card_on_stack()
    functions/engine.c:1596:finalize_activation(...)
    main_phase(int player, int a4, int a5)
    switch_phase(int a3)
    start_duel()
    start_duel_thread(int a1)
    0x7672d2e9
    0x775c1603
    0x775c15d6

    bad parameters
    get_card_instance(-1, -1)
    functions/show_backtrace.c:19:show_backtrace(...)
    functions/deck.c:307:get_card_instance(...)
    functions/functions.c:12322:get_owner(...)
    cards/conspiracy-take-the-crown.c:1922:card_kaya_ghost_assassin(...)
    call_cards_function<eax>(card_data_t *cd<eax>, int player, int card, event_t event)
    fx_activation_906(int player, int card, event_t event)
    call_card_fn_impl(...)
    functions/events.c:36:call_card_fn(...)
    functions/events.c:259:dispatch_event_to_single_card(...)
    resolve_top_card_on_stack()
    functions/engine.c:1596:finalize_activation(...)
    main_phase(int player, int a4, int a5)
    switch_phase(int a3)
    start_duel()
    start_duel_thread(int a1)
    0x7672d2e9
    0x775c1603
    0x775c15d6

    #0  0x020d5856 in kaya_ghost_assassin_legacy (player=<optimized out>, card=<optimized out>, event=<optimized out>) at cards/conspiracy-take-the-crown.c:1844
    #1  0x00000001 in ?? ()
    #2  0x0000000a in ?? ()
    #3  0x0000007e in ?? ()
    #4  0x000000c9 in ?? ()
    #5  0x004f00f8 in sub_4E9564 ()
    #6  0x00457e4a in fx_custom_903 ()
    #7  0x024ee695 in call_card_fn_impl () from ./manalinkeh.dll
    #8  0x024962dd in call_card_fn (address=0x457e10, instance=0x4f00f8, player=player@entry=0, card=10, card@entry=1168010808, event=event@entry=EVENT_RESOLVE_TRIGGER) at functions/events.c:34
    #9  0x02496e44 in dispatch_event_raw (event=event@entry=EVENT_RESOLVE_TRIGGER) at functions/events.c:105
    #10 0x024971f6 in dispatch_trigger_to_one_card (player=0, card=10, event=EVENT_RESOLVE_TRIGGER) at functions/events.c:317
    #11 0x004367c3 in resolve_top_card_on_stack ()
    #12 0x02497330 in resolve_trigger (player=0, card=10, TENTATIVE_reason_for_trigger_controller=0) at functions/events.c:581
    #13 0x004766dc in sub_475A30 ()
    #14 0x0249657f in dispatch_trigger_impl (player=player@entry=0, trig=trig@entry=TRIGGER_UPKEEP, xtrig=xtrig@entry=0, prompt=prompt@entry=0x739c20 "Begin Upkeep", TENTATIVE_allow_response=<optimized out>, TENTATIVE_allow_response@entry=0) at functions/events.c:400
    #15 0x02496c17 in dispatch_trigger (player=player@entry=0, trig=trig@entry=TRIGGER_UPKEEP, prompt=prompt@entry=0x739c20 "Begin Upkeep", TENTATIVE_allow_response=TENTATIVE_allow_response@entry=0) at functions/events.c:491
    #16 0x024b32ca in upkeep_phase (player=<optimized out>) at functions/engine.c:373
    #17 0x00439983 in switch_phase ()
    #18 0x0047902c in start_duel ()
    #19 0x004946e9 in start_duel_thread ()
    #20 0x7672d2e9 in KERNEL32!BaseThreadInitThunk () from c:/Windows/system32/kernel32.dll
    #21 0x775c1603 in ntdll!RtlInitializeExceptionChain () from c:/Windows/system32/ntdll.dll
    #22 0x775c15d6 in ntdll!RtlInitializeExceptionChain () from c:/Windows/system32/ntdll.dll
    #23 0x00000000 in ?? ()
    The stack overflow over frames 1-4 is of particular note.
Which card did behave improperly ?
Kaya, Ghost Assassin.

Which update are you using?(date,name)Which type(Duel,Gauntlet,Sealed Deck)
Dev master head, cde9295.

What exactly should be the correct behavior/interaction ?
You can do any of four things for the first ability: exile Kaya; exile a target creature; exile nothing; or cancel activation.

Are any other cards possibly affected by this bug ?

Re: [confirmed]Kaya, Ghost Assassin exile ability

PostPosted: 31 Mar 2022, 17:30
by gnomefry
Describe the Bug:

Korath's 2018 above reported bugs remain true for the current release version.

In addition, Kaya, Ghost Assassin can exile only creatures you control. It allows you to target an opponent's creature and even displays a brief activation animation, but there is no exile.

Which update are you using? (date, name)Which type? (duel, gauntlet, sealed deck)

Holidays 2021 ad1a6f8 - gauntlet

What exactly should be the correct behavior/interaction?

Venser, the Sojourner can exile itself. Vanish into Memory can exile target creature and return it during your next upkeep. Can these two cards have a baby?

Are any other cards possibly affected by this bug?

Re: [confirmed]Kaya, Ghost Assassin exile ability

PostPosted: 01 Apr 2022, 19:28
by drool66
These bugs aren't difficult to fix, but I think we should really have a more flexible function for "exile [something] until [time]." Or rather, several functions that each govern a different time frame, eg. remove_until_your_next_upkeep(), remove_until_[whenever]()... What I see we have are "exile [something] until eot," "exile [something] until [something else] leaves the bf," and "exile [something] and bring it back into play immediately." Vanish into Memory uses remove_until_eot(); without checking, that seems incorrect. Maybe someone can correct me if I'm wrong.

[EDIT] clarity

Re: [confirmed]Kaya, Ghost Assassin exile ability

PostPosted: 03 Apr 2022, 17:44
by Aswan jaguar
I don't mind having different functions for different time restrictions as long as they work correctly. However I see your point of having one function "exile [something] until [time]."

For clause "exile [something] until [something else] leaves the bf," which is a bit different case I am against of squeezing it into a universal exile time restriction function in IMHO we are asking unnecessarily for trouble.

Re: [fixed]Kaya, Ghost Assassin exile ability

PostPosted: 08 May 2022, 19:46
by drool66
Fixed in 03bc323