• Smogon Premier League is here and the team collection is now available. Support your team!

Sticky Orange Islands SQSA Thread

Okay, so scratch what I said about the DS possibly not being modified. I should have used the term "kiosk" as, after some searching, I found an article & video explaining that there were Kiosk DSs which had their wireless function (at least to connect to other DSs) turned off as they were only meant to either download demos from a Nintendo server its programmed to connect to or play whatever game that was plugged into it. A notable about these DSs is that when you turn it on it automatically loaded the game that was in it. Also, while these DSs came with a display shell, they were just normal model DSs inside so stores could easily just take them out (which they would have to do to slot in a game). So now my answer is the opposite: it was probably a normal copy of HGSS, but it may have been playing off a Kiosk DS.

Oh great find! Thanks. Never heard of this (though not surprised it's a thing that exists)
 
Simple ZA question of which I probably already know the answer (it's no) but I rather check if I missed something.

Is there any way to obtain the Greninjite on a (physical) game that is on a Switch with no NSO?
 
Simple ZA question of which I probably already know the answer (it's no) but I rather check if I missed something.

Is there any way to obtain the Greninjite on a (physical) game that is on a Switch with no NSO?
The Gen 6 & 3 starter stones and Baxcalibur are exclusive to the ranked rewards, so no.

on the bright side they're all still in the rewards iirc so by the time swampert is out you can just get one of those free weeks and get them al in one go!
 
In FRLG, what determines the sprite a trainer will take on in the Union Room? (e.g. Bug Catcher, Cooltrainer)

Seems like in every other title this is customisable in some fashion, but I haven't seen anywhere how these games do it.
 
In FRLG, what determines the sprite a trainer will take on in the Union Room? (e.g. Bug Catcher, Cooltrainer)

Seems like in every other title this is customisable in some fashion, but I haven't seen anywhere how these games do it.
https://github.com/pret/pokefirered/blob/338ec9d956fcd39f4bbb361b444ded3eec8e9425/src/union_room_player_avatar.c#L127

C:
// Gender and trainer id are used to determine which sprite a player appears as
static u8 GetUnionRoomPlayerGraphicsId(u32 gender, u32 id)
{
    return sUnionRoomObjGfxIds[gender][id % NUM_UNION_ROOM_CLASSES];
}

https://github.com/pret/pokefirered/blob/master/src/union_room_player_avatar.c#L32
C:
// + 2 is just to match, those elements are empty and never read
// Graphics ids should correspond with the classes in gUnionRoomFacilityClasses
static const u8 sUnionRoomObjGfxIds[GENDER_COUNT][NUM_UNION_ROOM_CLASSES + 2] = {
    [MALE]   = {
        OBJ_EVENT_GFX_COOLTRAINER_M,
        OBJ_EVENT_GFX_BLACKBELT,
        OBJ_EVENT_GFX_CAMPER,
        OBJ_EVENT_GFX_YOUNGSTER,
        OBJ_EVENT_GFX_BOY,
        OBJ_EVENT_GFX_BUG_CATCHER,
        OBJ_EVENT_GFX_MAN,
        OBJ_EVENT_GFX_ROCKER
    },
    [FEMALE] = {
        OBJ_EVENT_GFX_COOLTRAINER_F,
        OBJ_EVENT_GFX_CHANNELER,
        OBJ_EVENT_GFX_PICNICKER,
        OBJ_EVENT_GFX_LASS,
        OBJ_EVENT_GFX_WOMAN_1,
        OBJ_EVENT_GFX_BATTLE_GIRL,
        OBJ_EVENT_GFX_WOMAN_2,
        OBJ_EVENT_GFX_BEAUTY
    }
};

Pretty much just based on your gender and taking the trainer ID modulo 8 to get the corresponding array entry.

This calculator lists out the same results (with some more specific trainer class names) and also other phenomena determined by ID like Secret Base trainer sprites.
https://web.archive.org/web/20230328152848/http://pokecheats.net/tools/calculators.php?do=trainer
 
Last edited:
https://github.com/pret/pokefirered/blob/338ec9d956fcd39f4bbb361b444ded3eec8e9425/src/union_room_player_avatar.c#L127

C:
// Gender and trainer id are used to determine which sprite a player appears as
static u8 GetUnionRoomPlayerGraphicsId(u32 gender, u32 id)
{
    return sUnionRoomObjGfxIds[gender][id % NUM_UNION_ROOM_CLASSES];
}

https://github.com/pret/pokefirered/blob/master/src/union_room_player_avatar.c#L32
C:
// + 2 is just to match, those elements are empty and never read
// Graphics ids should correspond with the classes in gUnionRoomFacilityClasses
static const u8 sUnionRoomObjGfxIds[GENDER_COUNT][NUM_UNION_ROOM_CLASSES + 2] = {
    [MALE]   = {
        OBJ_EVENT_GFX_COOLTRAINER_M,
        OBJ_EVENT_GFX_BLACKBELT,
        OBJ_EVENT_GFX_CAMPER,
        OBJ_EVENT_GFX_YOUNGSTER,
        OBJ_EVENT_GFX_BOY,
        OBJ_EVENT_GFX_BUG_CATCHER,
        OBJ_EVENT_GFX_MAN,
        OBJ_EVENT_GFX_ROCKER
    },
    [FEMALE] = {
        OBJ_EVENT_GFX_COOLTRAINER_F,
        OBJ_EVENT_GFX_CHANNELER,
        OBJ_EVENT_GFX_PICNICKER,
        OBJ_EVENT_GFX_LASS,
        OBJ_EVENT_GFX_WOMAN_1,
        OBJ_EVENT_GFX_BATTLE_GIRL,
        OBJ_EVENT_GFX_WOMAN_2,
        OBJ_EVENT_GFX_BEAUTY
    }
};

Pretty much just based on your gender and taking the trainer ID modulo 8 to get the corresponding array entry.

This calculator lists out the same results (with some more specific trainer class names) and also other phenomena determined by ID like Secret Base trainer sprites.
https://web.archive.org/web/20230328152848/http://pokecheats.net/tools/calculators.php?do=trainer

Ah, I thought it'd probably be the same as RSE. Thanks. Also just remembered you can't actually change it in those games (as opposed to DPPTHGSS).
 
I'm curious, does the Repeat Ball have any functionality in the Orre-based games?

The only situation I could think of this actually affecting would be on the Electabuzz in XD if you got the Elekid from Hordel and evolved it, but just wondering.
 
almost any shadow mon in XD is technically possible to take advantage of since you can just get them from Miror B rematches after trading is unlocked, plus a few in colosseum like Togetic and the starters would also be possible. All of this would require trading the mons in after that functionality is unlocked though
 
Is it possible to trade eggs between RS and FRLG?
Is it possible to bring back the roaming Pokemon in FRLG if it escaped by using roar?
It is possible to trade eggs (assuming that FRLG has completed the Celio quest or the Pokémon contained is in the Kanto dex).
It is not possible to respawn Raikou/Entei if they flee with Roar reset your game without saving if that happens or lose the beast forever.
 
Why does the glitch happen? Has anyone ever disassembled the game to find out?
I don't have the decompilation handy, but it seems pretty self-explanatory. When the battle ends, the game needs to check how it ends to know if it should despawn the roamer or not. Exit via roar either mistakenly has the despawn flag enabled like catching or KOing does, or (in my opinion the more likely scenario) it lacks the flag to keep the roamer around like either party running does.
 
I don't have the decompilation handy, but it seems pretty self-explanatory. When the battle ends, the game needs to check how it ends to know if it should despawn the roamer or not. Exit via roar either mistakenly has the despawn flag enabled like catching or KOing does, or (in my opinion the more likely scenario) it lacks the flag to keep the roamer around like either party running does.

Though something to remember about this is that this is only a glitch in the Western Versions. In Japanese versions if Entei or Raikou used Roar they'll still be roaming.

This still can work with what Ironmage said. I somewhat agree with their opinion that Roaming Pokemon have a flag which designates them as currently roaming; however I think that when you encounter them the flag becomes disabled and needs to be reenabled if the Roamer runs away (I think GF would prefer this approach as, incase a glitch happened, it's more likely the flag will remain disabled (thus no more will spawn, sucks for the player but the player could always reset in such extreme cases) instead of the flag remaining active thus giving letting players catch multiples of the same Legendary). Since GF decided to be jerks make things more challening by giving them Roar to circumvent trapping Moves, they had to specifically program that Roar and Whirlwind reenable the flag (if you're wondering about Teleport, it's considered Running Away which reenables the flag). Once you catch or defeat them that's when the flag is left disabled (it won't be until Platinum that entering the Hall of Fame respawns KOed roamers).

Translating a game from one language to another has many nuances, one being you need to make sure any translation done in one place in the code is carried out throughout all the coding; and that's when oversights can easily happen. This is only a hypothesis, but my guess is when they translated the code for Roar and Whirlwind they didn't realize the roamer's flag had exceptions programmed in for those Moves that the translated code has now disconnected. Thus, when they use Roar or you use Whirlwind on them in the Western versions, the flag isn't reenabled and thus they're permanetly lost.
 
Is it possible to trade eggs between RS and FRLG?
Is it possible to bring back the roaming Pokemon in FRLG if it escaped by using roar?
It is possible to trade eggs (assuming that FRLG has completed the Celio quest or the Pokémon contained is in the Kanto dex).
It is not possible to respawn Raikou/Entei if they flee with Roar reset your game without saving if that happens or lose the beast forever.

Trading Eggs is locked behind having the National Dex specifically, and the check would prevent all Eggs in general even those containing Kanto mons.
https://github.com/pret/pokefirered/blob/7e3f822652ecce0c99b626d74f455c3b93660377/src/trade.c#L2759

Why does the glitch happen? Has anyone ever disassembled the game to find out?

This is kind of relevant now that FRLG 2026 has patched it, and it turns out this was related to fixing an undocumented RS bug all along in terms of why it was introduced.


C:
        if (gBattleTypeFlags & BATTLE_TYPE_ROAMER)
        {
            UpdateRoamerHPStatus(&gEnemyParty[0]);
#if defined(BUGFIX) || REVISION >= 0xA
            if ((gBattleOutcome == B_OUTCOME_WON) || gBattleOutcome == B_OUTCOME_CAUGHT || gBattleOutcome == B_OUTCOME_DREW)
#else
            if ((gBattleOutcome & B_OUTCOME_WON) || gBattleOutcome == B_OUTCOME_CAUGHT) // Bug: When Roar is used by roamer, gBattleOutcome is B_OUTCOME_PLAYER_TELEPORTED (5).
#endif                                                                                  // & with B_OUTCOME_WON (1) will return TRUE and deactivates the roamer.

In RS they didn't handle the draw outcome to despawn roamers, so if you explode on Latias/Latios and kill them while whiting out, they'll still be roaming at 0HP.

In GBA FRLG they check for gBattleOutcome & B_OUTCOME_WON (bitwise AND on 1) instead of == to handle both the WON (1) and DREW (3) cases, but this also leads to returning true on teleport/roars (5) which infamously despawns them.

So in Switch FRLG they just check equality for each win/catch/draw battle outcome individually to despawn the roamer now.
 
Back
Top