Page 1 of 1

[fix]Footbottom Feast can't be cast for 0-no draw if 0

PostPosted: 21 Aug 2018, 16:25
by Aswan jaguar
Describe the Bug:
Footbottom Feast can't be cast for 0 targets and if you have a target but you don't select one you don't can't to draw a card.

Which card did behave improperly?
Footbottom Feast

Which update are you using? (date, name)Which type? (duel, gauntlet, sealed deck)
Manalink dev 778ccb5 version - duel

What exactly should be the correct behavior/interaction?
Footbottom Feast - Put any number of target creature cards from your graveyard on top of your library.
10/1/2007 You can cast this with zero targets. If you do, you’ll get to draw a card. However, if you cast this with at least one target and all of those targets become illegal, the spell won’t resolve and you won’t get to draw a card.

Are any other cards possibly affected by this bug?
-

Re: Footbottom Feast can't be cast for 0-no draw if select 0

PostPosted: 03 Aug 2019, 10:39
by Aswan jaguar
With below code in bone_harvest_impl() and change in select_multiple_cards_from_graveyard() to accept 0, I made it to draw a card with 0 targets in graveyard. However everything I tried, so it doesn't draw a card if you target a card in graveyard and the targeted card is then removed to honor the mentioned above ruling has failed.
Code: Select all
int bone_harvest_impl(int player, int card, event_t event, int draw_else_slowtrip){

   if( ! IS_GS_EVENT(player, card, event) ){
      return 0;
   }

   test_definition_t test;
   new_default_test_definition(&test, TYPE_CREATURE, "Select any target creature cards.");

   card_instance_t* instance = get_card_instance(player, card);

   if (event == EVENT_CAN_CAST){
      return generic_spell(player, card, event, 0, NULL, NULL, 0, 0);
   }

   if (event == EVENT_CAST_SPELL && affect_me(player, card)){
      int max_targ = MIN(count_graveyard_by_type(player, TYPE_CREATURE), 18);
      instance->info_slot = select_multiple_cards_from_graveyard(player, player, 0, AI_MAX_VALUE, &test, max_targ, &instance->targets[0]);
   }

   if (event == EVENT_RESOLVE_SPELL){
      int i, num_validated = 0, selected;
      for (i = 0; i < instance->info_slot; ++i){
         if( (selected = validate_target_from_grave(player, card, player, i)) != -1){
            int card_added = add_card_to_hand(player, get_grave(player)[selected]);
            remove_card_from_grave(player, selected);
            put_on_top_of_deck(player, card_added);
            ++num_validated;
         }
      }

      if (num_validated == 0){
         if( draw_else_slowtrip ){
            draw_a_card(player);
         }
         else{
            cantrip(player, card, 1);
         }
         spell_fizzled = 1;
      }
      else{
         rearrange_top_x(player, player, num_validated);
         if( draw_else_slowtrip ){
            draw_a_card(player);
         }
         else{
            cantrip(player, card, 1);
         }
      }

      kill_card(player, card, KILL_DESTROY);
   }

   return 0;
}
Code: Select all
int select_multiple_cards_from_graveyard(int player, int targ_player, int must_select_all /*if < 0, not enforced; but failing to select all is considered cancelling */, int ai_selection_mode, test_definition_t* this_test /*optional*/, int max_targets, target_t* ret_location){
   // no reason this won't work on higher except that 1) the sort will take forever, and 2) it won't be storable in a card's target array.
   ASSERT(max_targets >= 0 && max_targets <= 19);
........"rest of code" .....

Re: Footbottom Feast can't be cast for 0-no draw if select 0

PostPosted: 14 Aug 2019, 12:35
by Aswan jaguar
Fix Footbottom Feast respect ruling in afa6b8e8.