Why does the move Leech Seed have so many odd quirks?

The move Leech Seed sets a volatile status on the opponent Pokemon, draining its HP. However, I've noticed there are several strange quirks that are unique to this move that make me think it is somehow unique or fundamentally different from other moves. It's not the only move that casts a volatile status effect, so I can't think of anything that would make it truly unique. The particular quirks I've noticed are:

  • If the move misses (e.g. due to low Accuracy or a foe's high Evasiveness), the text given is not that the move missed, but that the foe "evaded the attack". This also happens if the move does not affect the opponent because the opponent has already been seeded, which is confusing.

  • For some odd reason, even with a foe that is under the influence of Attract, it seems like Leech Seed will never fail. The opponent is never immobilized by infatuation. No other move does this.

Is there any specific reason, technical or not, why this move has so many quirks?


Just in case it helps, I'm posting what I know so far from the disassembly of Pokemon Emerald.

I'm looking through the disassembly, and have found the relevant source code that causes the first quirk, although I still have no idea why it is done this way. From the function atk7F_setseeded:

if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT || gStatuses3[gBattlerTarget] & STATUS3_LEECHSEED)
{
    gMoveResultFlags |= MOVE_RESULT_MISSED;
    gBattleCommunication[MULTISTRING_CHOOSER] = 1;
}

This is in the function that is called whenever an attempt to seed the opponent is made. This tells me that, if the move has no effect for whatever reason, it communicates the string at position 1 (note that in C, arrays are zero-indexed, so position 1 is the second element). In gLeechSeedStringIds:

const u16 gLeechSeedStringIds[] =
{

    STRINGID_PKMNSEEDED, STRINGID_PKMNEVADEDATTACK,
    STRINGID_ITDOESNTAFFECT, STRINGID_PKMNSAPPEDBYLEECHSEED, STRINGID_ITSUCKEDLIQUIDOOZE,
};

In other words, if the move results flag contains MOVE_RESULT_NO_EFFECT, then the string that is given is STRINGID_PKMNEVADEDATTACK, which just states that the opponent evaded the attack.


Solution 1:

Leech Seed has been present since the 1st generation games. In those games, it had extra mechanics unique to it compared to other volatile statuses. It was the only volatile status that could not affect every Pokemon - it failed against Grass-type Pokemon. The text that the foe "evaded the attack" would appear when used against opposing Grass-types, and also foes who were already seeded. Leech Seed also had its damage multiplier increased when Toxic damage increased over time.

My impression is that due to the different mechanics, it was coded differently from the other volatile statuses. With this different code, the code for the message when the move failed had to be different. This led to a different message. The message being different may or may not have been intentional by Game Freak; it is possible that different coders wrote different messages for Leech Seed and other volatile statuses and didn't coordinate.

As it already happened in generation 1, the gamemakers may have decided to write different code and message in subsequent generations as well. The reason for this is unclear; they could have been using the previous code as a template for its new code, or they intentionally kept the message for nostalgia for old Pokemon fans. Due to the different code for Leech Seed, it could not trigger the chance to be infatuated when affected by Attract. This may have been an unintentional bug (in my opinion this is likely, but it's impossible to confirm).