It is currently 08 Jul 2021, 04:46
   
Text Size

[fixed/closed]Hokori, Dust Drinker

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

[fixed/closed]Hokori, Dust Drinker

Postby Aswan jaguar » 26 Dec 2013, 09:07

Describe the Bug:
Hokori, Dust Drinker has probably a bug with equipments(Umezawa's Jitte and Sword of Body and Mind tested). When he is equipped and the equipment triggers (not always) or if maybe even if he is re-equipped he looses his ability.I had this behaviour in 2-3 games. ability stops working if he gets tapped.
NOTE- It is weird also that in this savegame when Hokori, Dust Drinker activates Umezawa's Jitte to boost it and although just before I have killed Karn,Silver Golem with Shickening Shoal in stack it shows the Karn,Silver Golem being boost by Umezawa's Jitte the boost is correctly applied to Hokori, Dust Drinker.

Which card did behave improperly ?
Hokori, Dust Drinker - Equipments?

Which update are you using?(date,name)Which type(Duel,Gauntlet,Sealed Deck)
16/11/2013 : Portals to Theros - DUEL

What exactly should be the correct behavior/interaction ?
Hokori, Dust Drinker doesn't loose his ability from cards (equipments)that they don't make card loose their abilities.

Are any other cards possibly affected by this bug ?
Attachments
2013-12-26_110328.jpg
weird activation
2013-12-26_105911 hokori 1.jpg
all my lands untapped
2013-12-26_105850 hokori.jpg
my lands tapped
hokori -umezawa's jitter.rar
(2.35 KiB) Downloaded 158 times
Last edited by BAgate on 13 Jan 2014, 05:53, edited 9 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: Hokori, Dust Drinker - equipments

Postby BAgate » 26 Dec 2013, 10:28

Actually has nothing to do with equipment (I think). The turn after Hokori deals combat damage its ability doesn't work, even if he is unequipped.
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: [confirmed]Hokori, Dust Drinker

Postby Korath » 26 Dec 2013, 11:26

It's because he's tapped. He's implemented simply as a legendary Winter Orb. (Which I've only just now noticed never got errata to preserve the "artifacts turn off when they're tapped" mechanic like Howling Mine did. Guess that needs fixing, too.)
User avatar
Korath
DEVELOPER
 
Posts: 3522
Joined: 02 Jun 2013, 05:57
Has thanked: 491 times
Been thanked: 1037 times

Re: [confirmed]Hokori, Dust Drinker

Postby Aswan jaguar » 26 Dec 2013, 11:46

So,Garagroz or Sonic have to see this to change the wording of Winter Orb so it represents the card better to something like:
"If Winter Orb is untapped,players can't untap more than one land during their untap steps."
or
"Players can't untap more than one land during their untap steps unless Winter Orb is tapped."

The first seems more accurate.
---
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: [confirmed]Hokori, Dust Drinker

Postby Korath » 26 Dec 2013, 12:50

Rather, we should change Winter Orb to not care if it's tapped. And Hokori, Dust Drinker to have a separate implementation, since it's only superficially similar. (Why isn't its autocard working for me?)
User avatar
Korath
DEVELOPER
 
Posts: 3522
Joined: 02 Jun 2013, 05:57
Has thanked: 491 times
Been thanked: 1037 times

Re: [confirmed]Hokori, Dust Drinker

Postby Aswan jaguar » 26 Dec 2013, 13:08

All these because they never reprinted the card to use the errata. #-o
May 2011 Update Bulletin:
Winter Orb
In the first versions of the Magic rules, the static abilities of an artifact turned off if the artifact was tapped. When this rule changed, three cards (Winter Orb, Static Orb, and Howling Mine) were issued errata to maintain this functionality. Since then, Static Orb and Howling Mine have been reprinted with this errata, but Winter Orb never was. If you pick up this card somewhere and you understand modern Magic rules, you'd never guess it would have to be untapped to function, and the once-common "tap my own Winter Orb at the end of my turn so I get to untap my lands" play would be utterly baffling. Well, we can't have that.

New wording
Players can't untap more than one land during their untap steps.
---
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: [confirmed]Hokori, Dust Drinker

Postby Korath » 26 Dec 2013, 14:13

Totally untested translation of the exe version:
Code: Select all
static int ai_choose_best_card_to_untap(int player, type_t type_to_untap)
{
  // 0x4BEB20.  Used for Winter Orb, Smoke, and Damping Field.

  if (player == -1)
    return -1;

  int c;
  int best_rating = -10;
  int best = -1;

  int highest_power = -1, highest_toughness = -1;
  if (type == TYPE_CREATURE)
    for (c = 0; c < active_cards_count[player]; ++c)
      if (in_play(player, c) && is_what(player, c, type_to_untap) && is_tapped(player, c))
        {
          int pow = get_power(player, c);
          if (pow > highest_power)
            highest_power = pow;

          int tgh = get_toughness(player, c);
          if (tgh > highest_toughness)
            highest_toughness = tgh;
        }

  for (c = 0; c < active_cards_count[player]; ++c)
    if (in_play(player, c) && is_what(player, c, type_to_untap) && is_tapped(player, c))
      {
        card_instance_t* instance = get_card_instance(player, c);
        if (!(instance->untap_status & 1))
          continue;

        int abils, rating = 0;
        switch (type_to_untap)
          {
            case TYPE_LAND:
              if (cards_data[instance->internal_card_id].extra_ability & EA_ACT_ABILITY)
                rating = 1;
              if (instance->state & STATE_NO_AUTO_TAPPING)
                rating = -1;
              break;

            case TYPE_CREATURE:
              if (get_power(player, c) == highest_power)
                rating += 3;
              if (get_toughness(player, c) == highest_toughness)
                rating += 2;

              abils = get_abilities(player, card, EVENT_ABILITIES, -1);
              if (abils & KEYWORD_FLYING)
                ++rating;
              if (abils & KEYWORD_FIRST_STRIKE)
                ++rating;

              rating += num_bits_set(abils & ~KEYWORD_NONABILITIES);

              if (cards_data[instance->internal_card_id].extra_ability & EA_MANA_SOURCE)
                ++rating;
              if (cards_data[instance->internal_card_id].extra_ability & EA_ACT_ABILITY)
                ++rating;

              break;

            case TYPE_ARTIFACT:
              if (is_what(player, c, TYPE_CREATURE))
                {
                  rating = get_power(player, c) + get_toughness(player, c);

                  if (abils & KEYWORD_FLYING)
                    ++rating;
                  if (abils & KEYWORD_FIRST_STRIKE)
                    ++rating;

                  abils = get_abilities(player, card, EVENT_ABILITIES, -1);

                  rating += num_bits_set(abils & ~KEYWORD_NONABILITIES);
                }

              if (cards_data[instance->internal_card_id].extra_ability & EA_MANA_SOURCE)
                ++rating;
              if (cards_data[instance->internal_card_id].extra_ability & EA_ACT_ABILITY)
                ++rating;

              rating += get_cmc(player, c);

              break;
          }

        if (rating > best_rating)
          best = c;
      }

  return best;
}

int card_winter_orb(int player, int card, event_t event)
{
  //0x426090

  card_instance_t* instance = get_card_instance(player, card);

  if (event == EVENT_CAST_SPELL && affect_me(player, card))
    {
      card_instance_t* instance = get_card_instance(player, card);
      if (!check_battlefield_for_id(2, CARD_ID_WINTER_ORB))
        ai_modifier += 12 * (total_power_of_creatures_by_color[AI][COLOR_ANY] - total_power_of_creatures_by_color[HUMAN][COLOR_ANY]);
      // int total_power_of_creatures_by_color[2][8];   0x739D60    updated at start of each turn
    }

  if (event == EVENT_UNTAP && in_play(affected_card_controller, affected_card) && is_what(affected_card_controller, affected_card, TYPE_LAND) && !is_tapped(player, card))
    {
      card_instance_t* aff = get_card_instance(affected_card_controller, affected_card);
      aff->untap_status &= ~2;  // aff doesn't automatically untap (but is able to, since bit 1 wasn't removed)
      types_that_dont_untap |= TYPE_LAND;   // doesn't actually prevent them from untapping, just advises cards that optionally untap like Old Man of the Sea
    }

  if (current_phase == UNTAP && affect_me(player, card))
    {
      target_definition_t td_land_will_untap;
      default_target_definition(player, card, &td_land_will_untap, TYPE_LAND);
      td_land_will_untap.who_chooses = current_turn;
      td_land_will_untap.allowed_controller = current_turn;
      td_land_will_untap.preferred_controller = current_turn;
      td_land_will_untap.illegal_abilities = 0;
      td_land_will_untap.allow_cancel = 0;
      td_land_will_untap.required_state = TARGET_STATE_CAN_UNTAP;   // Requires untap_status & 2.  A more accurate description is "is going to untap".

      target_definition_t td_land_can_untap;
      default_target_definition(player, card, &td_land_can_untap, TYPE_LAND);
      td_land_can_untap.who_chooses = current_turn;
      td_land_can_untap.allowed_controller = current_turn;
      td_land_can_untap.preferred_controller = current_turn;
      td_land_can_untap.illegal_abilities = 0;
      td_land_can_untap.allow_cancel = 0;
      td_land_can_untap.required_state = TARGET_STATE_CANNOT_UNTAP; // Requires untap_status & 1.  A more accurate description is "is able to untap".

      if (event == EVENT_TRIGGER
          && !can_target(&td_land_will_untap)   // no land already set to untap
          && can_target(&td_land_can_untap))    // at least one land able to untap
        event_result |= RESOLVE_TRIGGER_MANDATORY;

      if (event == EVENT_RESOLVE_TRIGGER)
        {
          instance->targets[0].player = current_turn;
          instance->targets[0].card = -1;
          if (current_turn == AI && !(trace_mode & 2))
            {
              chosen.card = ai_choose_best_card_to_untap(current_turn, TYPE_LAND);
              load_text(0, (int)"WINTERORB");
              do_dialog(player, player, card, chosen.player, chosen.card, text_lines[1], 0);
            }
          else
            {
              td_land_can_untap.required_state |= TARGET_STATE_TAPPED;

              pick_target(&td_land_can_untap, "WINTERORB");
            }

          instance->number_of_targets = 0;

          card_instance_t* tgt = get_card_instance(instance->targets[0].player, instance->targets[0].card);
          tgt->untap_status |= 2;

          int c;
          for (c = 0; c < active_cards_count[current_turn]; ++c)
            if (in_play(current_turn, c) && is_tapped(current_turn, c) && is_what(current_turn, TYPE_LAND))
              {
                tgt = get_card_instance(current_turn, c);
                if (!(c->untap_status & 2)) // not already going to untap
                  c->untap_status &= ~1;    // can't untap
              }
        }
    }
  return 0;
}
Damping Field and Smoke, at a not-very-thorough look, seem to be identical except for the type affected; Damping Field also uses artifact_count[] instead of total_power_of_creatures_by_color[] for its ai_modifier.

Its not at all clear that they'll interact properly with each other in the case of artifact lands, land creatures, or artifact creatures. Getting them to work with a Static Orb implementation that untaps during untap like these do instead of during upkeep like our current approximation will be an adventure, too. There anything else out there that's similar to these?
User avatar
Korath
DEVELOPER
 
Posts: 3522
Joined: 02 Jun 2013, 05:57
Has thanked: 491 times
Been thanked: 1037 times

Re: [confirmed]Hokori, Dust Drinker

Postby Aswan jaguar » 26 Dec 2013, 14:51

The most relevant we have besides those already mentioned are:
1- Stoic Angel that has to use the same code pointer as Smoke.
2- Kill Switch
3- Magnetic Mountain
4- Mist of Stagnation
5- Rising Waters
6- Shipbreaker Kraken ?
7- Thelon's Curse
---
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: [confirmed]Hokori, Dust Drinker

Postby Korath » 26 Dec 2013, 16:25

X's don't untap are easy, as are the variants that let you untap one or more of them during upkeep. Those add together normally; if you have a Hokori, Dust Drinker and two Rising Waters, they'd all make it so your lands don't untap, and they'd each let you untap one land at the start of each upkeep. (Or they would, if they didn't both just call Winter Orb.) It's just the "you can only untap 1/2/n X's during your untap step" that interact strangely with each other.
User avatar
Korath
DEVELOPER
 
Posts: 3522
Joined: 02 Jun 2013, 05:57
Has thanked: 491 times
Been thanked: 1037 times

Re: [confirmed]Hokori, Dust Drinker

Postby Gargaroz » 01 Jan 2014, 01:01

Well, for now I've redone the code of Hokori, Dust Drinker, and Rising Waters since the ruling is slightly different than Winter Orb, plus the "deactivated if tapped" bug is removed.
----
- Current / medium term task: adjusting the code for making Misdirection and such usable
- Long term task: inserting all the good stuff I left out from the "Golden Years" mod
Gargaroz
Programmer
 
Posts: 7095
Joined: 06 Nov 2009, 11:11
Has thanked: 82 times
Been thanked: 593 times

Re: [still bugged]Hokori, Dust Drinker

Postby BAgate » 10 Jan 2014, 07:38

Doesn't matter if Hokori is tapped, but now if either Hokori or Rising Waters is in play and you don't have a tapped land then you are asked to select target permanent, and since there is no option to cancel and no legal targets you get stuck.
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: [still bugged]Hokori, Dust Drinker

Postby Korath » 10 Jan 2014, 15:39

Plus, they kept everything from untapping instead of just lands, and activated when-this-becomes-targeted triggers. Fixed in b5cc51b.
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: No registered users and 3 guests

cron

Who is online

In total there are 3 users online :: 0 registered, 0 hidden and 3 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: No registered users and 3 guests

Login Form