Wave

Settling the debate once and for all: Is Shedinja legal in a Nuzlocke ruleset for Pokémon Emerald?

Forbidden Tempura

Table of Content


Context

What is a Nuzlocke?

To set the stage, let's first provide some context to the curious-but-unfamiliar reader as is tradition in essays that portray niche topics that are only ever read by the curious-but-definitely-familiar reader.

The “Nuzlocke” ruleset refers to a particular set of rules to create a self-imposed challenge in Pokémon games. These go back to a web comic called Nuzlocke (content warning: swearing, intentional misgendering), later renamed to Pokémon: Hard Mode to differentiate them from other web comics now hosted on the site called Nuzlocke. The original Nuzlocke challenge had two rules written exactly as follows:

> release a pokemon if it faints
> have to catch the 1st pokemon in each area and nothing else

Subsequently, internet autists did what internet autists did best and tried this kind of challenge for their own. Today, you can find a sprawling set of rulesets all derived therefrom. Out of these, I only would like to examine one more: dupes clause, which states that duplicates must be skipped. E.g. given an encounter of a Ralts as first Pokémon on a route, a subsequent first encounter of Ralts, Kirlia, Gardevoir or Gallade doesn't count as the first encounter, leaving the encounter slot for that route open until a non-duplicate is encountered on that route.

The rules interact in funny ways with Pokémon not caught on routes, thereby triggering various debates.

What is Shedinja?

Shedinja is a Pokémon. What makes it special is not just its maximum HP value, which is always a constant value of 1, or its ability Wonder Guard, which makes it impervious to damaging moves of non-super-effective types, but also its method of being obtained.

To obtain Shedinja in gameplay, one must evolve Nincada into Ninjask. As a byproduct if and only if there is room in the party, a Shedinja is also put in the party.

From Ruby's Pokédex entry:

It is believed that this Pokémon will steal the spirit of anyone peering into its hollow body from its back.

Therefore, if you have ever played Shedinja and seen its back sprite, you are now dead inside. This is, of course, a joke. Because nobody who would read articles about Nuzlocke rulesets is truly alive inside to begin with.

Defining defined definitions

Let's revisit the seemingly innocent rule 2:

> have to catch the 1st pokemon in each area and nothing else

So what happens if you obtain a Pokémon through other means? What even is an area? This is where debates spark.

One could argue that a gift Pokémon isn't “caught” and thereby exempt from this rule. One could also argue that “catch” actually means “obtain.” After all, catching and obtaining Pokémon are technically different acts, the latter at most constituting part of the latter if a capture is successful. For the purposes of this post, I will be choosing the most strict interpretation possible to ensure the most strict ruleset to evaluate Shedinja under. Therefore, I extend the meaning of “catch” to also mean “obtain” in this context.

More importantly, what even counts as an area? There are three ways to define the area:

  • Different technical map IDs are distinct areas. Some routes are technically composed of separate maps. Cave/Tower floors are distinct areas and e.g. the inside of a house in Pokémon Emerald is a distinct area from the city the house warp is located on are also distinct areas.
  • Some kind of real-world-based thinking on what counts as an area.
  • Met area in the Pokémon data.

The technical map ID allows trivially expanding to several Pokémon per logical area. The real-world-based thinking (1) involves the real world (ew) and (2) is hard to actually formally define, much less verify. This only leaves the met area in the Pokémon data.

So what happens when Shedinja is created?

I'll be following the pokeemerald decompilation, src/evolution_scene.c. Game Freak has left these decompilations up for so long that it can only be taken as an implicit sanctioning thereof. It is functionally impossible for them to not be aware.

The evolution process is mainly handled in Task_EvolutionScene() over several steps. For our purposes, there are two important steps:

static void Task_EvolutionScene(u8 taskId)
{
    u32 var;
    struct Pokemon *mon = &gPlayerParty[gTasks[taskId].tPartyId];
    // ...
    switch (gTasks[taskId].tState)
    {
    // ...
    case EVOSTATE_SET_MON_EVOLVED:
        if (IsCryFinished())
        {
            StringExpandPlaceholders(gStringVar4, gText_CongratsPkmnEvolved);
            BattlePutTextOnWindow(gStringVar4, B_WIN_MSG);
            PlayBGM(MUS_EVOLVED);
            gTasks[taskId].tState++;
            SetMonData(mon, MON_DATA_SPECIES, (void *)(&gTasks[taskId].tPostEvoSpecies));
            CalculateMonStats(mon);
            EvolutionRenameMon(mon, gTasks[taskId].tPreEvoSpecies, gTasks[taskId].tPostEvoSpecies);
            GetSetPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskId].tPostEvoSpecies), FLAG_SET_SEEN);
            GetSetPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskId].tPostEvoSpecies), FLAG_SET_CAUGHT);
            IncrementGameStat(GAME_STAT_EVOLVED_POKEMON);
        }
        break;
    // ...
    }
}

We learn: During an evolution, a Pokémon is not normally created anew. Instead, it is edited in place using the SetMonData() function, which changes its species ID to the target species ID.

In the same function:

    // ...
    switch (gTasks[taskId].tState)
    {
    // ...
    case EVOSTATE_END:
        if (!gPaletteFade.active)
        {
            if (!(gTasks[taskId].tBits & TASK_BIT_LEARN_MOVE))
            {
                StopMapMusic();
                Overworld_PlaySpecialMapMusic();
            }
            if (!gTasks[taskId].tEvoWasStopped)
                CreateShedinja(gTasks[taskId].tPreEvoSpecies, mon);

            DestroyTask(taskId);
            FreeMonSpritesGfx();
            FREE_AND_SET_NULL(sEvoStructPtr);
            FreeAllWindowBuffers();
            SetMainCallback2(gCB2_AfterEvolution);
        }
        break;
    // ...
    }

Shedinja is created right as the evolution process is ending. The CreateShedinja() function itself is also important.

static void CreateShedinja(u16 preEvoSpecies, struct Pokemon *mon)
{
    u32 data = 0;
    if (gEvolutionTable[preEvoSpecies][0].method == EVO_LEVEL_NINJASK && gPlayerPartyCount < PARTY_SIZE)
    {
        s32 i;
        struct Pokemon *shedinja = &gPlayerParty[gPlayerPartyCount];

        CopyMon(&gPlayerParty[gPlayerPartyCount], mon, sizeof(struct Pokemon));
        SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_SPECIES, &gEvolutionTable[preEvoSpecies][1].targetSpecies);
        SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_NICKNAME, gSpeciesNames[gEvolutionTable[preEvoSpecies][1].targetSpecies]);
        SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_HELD_ITEM, &data);
        SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_MARKINGS, &data);
        SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_ENCRYPT_SEPARATOR, &data);

        for (i = MON_DATA_COOL_RIBBON; i < MON_DATA_COOL_RIBBON + CONTEST_CATEGORIES_COUNT; i++)
            SetMonData(&gPlayerParty[gPlayerPartyCount], i, &data);
        for (i = MON_DATA_CHAMPION_RIBBON; i <= MON_DATA_UNUSED_RIBBONS; i++)
            SetMonData(&gPlayerParty[gPlayerPartyCount], i, &data);

        SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_STATUS, &data);
        data = MAIL_NONE;
        SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_MAIL, &data);

        CalculateMonStats(&gPlayerParty[gPlayerPartyCount]);
        CalculatePlayerPartyCount();

        GetSetPokedexFlag(SpeciesToNationalPokedexNum(gEvolutionTable[preEvoSpecies][1].targetSpecies), FLAG_SET_SEEN);
        GetSetPokedexFlag(SpeciesToNationalPokedexNum(gEvolutionTable[preEvoSpecies][1].targetSpecies), FLAG_SET_CAUGHT);

        // ...rename Japanese-originating Nincada to Japanese name...
}

Shedinja is created using the CopyMon() function directly into an empty party slot.

This means that, at the time Shedinja is obtained, it is obtained as a copy of the Ninjask in the party. This means that anyone playing with any form of duplicate clause will, no matter the definition of the area, have to pass on Shedinja because it starts as a clone of Ninjask and therefore a dupe.

Worse yet, even if one were to disregard dupes clause, the two will always have the same met area because this data is copied over in CopyMon(), leading to a second Pokémon being obtained in the same location.

Conclusions

Obtaining and using Shedinja is only valid under this specific variation of the Nuzlocke ruleset:

  • Rule 2 is interpreted to mean the location of where the evolution process for Nincada takes place rather than the met area.
  • Dupes clause is not applied.

Discussion

I hate being autistic.

About the Author

Forbidden Tempura

I am good at being angry about video games.

Mia Rose WinterReviewer

This might also interest you

Word of mouth in the age of the ad-driven internet

Sara Gerretsen 12/28/2025

If you're my age or older, you probably knew the era where google was actual magic. No matter what you wanted to find, it was there at your fingertips. No matter how specialised or generic, you could find it, if not in one search, then definitely in two. But none of that exists any more. Profit incentives pulled the search engine owners' interests and those of the engine's users apart. Two searches make more money than one. And the advertising model is showing cracks big enough to spook the industry to the next false promise of infinite growth. Now the users of search engines are left with half-functioning and intentionally dysfunctional products. With very little sign it'll improve soon. A problem analysis What does a search engine give the user. Answers to questions yes, but more importantly, a way to discover the internet. The Pre-AI Problem A simple thought experiment, how would you browse the internet without a search engine? What if google, bing, yahoo, kagi, searx and all the me

OtherOpinion

The Quest for Ethical AI: Actually saving time with generated commit message bodies

Mia Rose Winter 11/11/2025

The Total Hatred For AI in Tech If you have existed on the planet earth in the last 36 months you have been undoubtedly been exposed to a slew of AI tools and integrations, half of which are questionably executed and the other half is questionable if it even is AI. With all of that, coming right off of the crypto boom especially the tech-savvy have immediately questioned this hype and over the months grew to hate it with a fury. I do not except myself from that, I was there. For the first months what I previously followed as promising new tech got turned on its head overnight by capitalist pieces of shit at openAI and friends and completely soured my mood for anything that has proclaimed itself AI, and I myself got caught in the rumor hate mill: AI uses 200 quadrillion times more power than a google search, AI uses oceans of water, we need to double data centers because of AI, AI will kill us all, AI stolen my bicycle. As I do not like blindly hating and I also started to distrust how

AITutorial

A Mystery Involving Hardware Security Modules and Value Tokens

Forbidden Tempura 10/7/2025

Context Historical context In July, 2021, the phenomenon known as the &ldquo;Gigaleak&rdquo; continued. The Gigaleak was a drip-feed of part of the ill-gotten data from the 2018 Nintendo data breach. On July 20, 2021, the iqcvs.tar.xz file was uploaded to the now-defunct file sharing website anonfiles.com and thereby made available to the public by The Hacker Known as 4chan. This file contains a dump of CVS repositories. The repository sw contains the BroadOn network infrastructure around the middle of the year 2006. This is shortly before the Nintendo Wii launched. The network infrastructure was initially launched alongside the iQue Player, a variant of the Nintendo 64 featuring downloadable games and some anti-piracy measures of questionable quality (non-HTTPS link) intended for the Chinese market, which was and still is notorious for being particularly prone to piracy. It was developed by a company then called BroadOn Communications Corp., a California corporation. The iQue Player u

ITInfodump
Powered by Wave