Skip to content

Struggle should receive type-based item boosts in Gen 2-4 #816

Description

@SnowyMouse

In Gen 2-4, Struggle is boosted by the Silk Scarf (and Pink Bow/Polkadot Bow in Gen 2). It probably won't have any effect on competitive battling, but it should probably still be implemented for the sake of accuracy.

Gen 2

In Gen 2, the type-based boosts are done in the damage calculation function.

https://github.com/pret/pokecrystal/blob/06ec23ccee71ad25bfa0779d66270bd53f48ffce/engine/battle/effect_commands.asm#L2984-L2990

Unlike with the type effectiveness function (mis-labeled as STAB - this function does all of type effectiveness), the actual damage calculation does not check that the move is Struggle for applying item boosts.

https://github.com/pret/pokecrystal/blob/06ec23ccee71ad25bfa0779d66270bd53f48ffce/engine/battle/effect_commands.asm#L1214-L1219

Struggle is still coded as a Normal type move, however! In fact, it has the same effect as any other recoil-inducing move (like Take Down), except that the game is hardcoded to disable type effectiveness if Struggle is being calced.

https://github.com/pret/pokecrystal/blob/06ec23ccee71ad25bfa0779d66270bd53f48ffce/data/moves/moves.asm#L181

This was tested in Gen 2. I made a YouTube video about this (and how typeless damage actually works in Gen 2):

https://www.youtube.com/watch?v=2Z7o4RQDtzU

Gen 3

Like in Gen 2, Struggle is technically coded as a Normal type move that inflicts recoil (like Take Down).

https://github.com/pret/pokeemerald/blob/c2dcc629fd97b3d58fedc07c9e02653eabed9136/src/data/battle_moves.h#L2148-L2158

Like in Gen 2, Struggle skips type effectiveness with a hardcoded check.

https://github.com/pret/pokeemerald/blob/c2dcc629fd97b3d58fedc07c9e02653eabed9136/src/battle_script_commands.c#L1542-L1543
https://github.com/pret/pokeemerald/blob/c2dcc629fd97b3d58fedc07c9e02653eabed9136/src/battle_script_commands.c#L1360-L1364

Like in Gen 2, damage calculation does not check that the move is Struggle for applying item boosts.

https://github.com/pret/pokeemerald/blob/c2dcc629fd97b3d58fedc07c9e02653eabed9136/src/pokemon.c#L3170-L3182

I also tested Struggle in Gen 3 with an Abra that cannot OHKO Roxanne's Nosepass without a crit (but could if Struggle was boosted by the Silk Scarf).

Image Image

Gen 4

Like in Gen 2-3, damage calculation does not check that the move is Struggle for applying item boosts.

https://github.com/pret/pokeheartgold/blob/ad7a3afa0cfc144fe6837c410cb95b2727217f54/src/battle/overlay_12_0224E4FC.c#L5635-L5640

Unfortunately this decomp is incomplete, so I don't have any hard proof that Struggle is coded as a Normal type move (though when I hacked Struggle in as a move on a Pokémon's moveset with PkHex, it did appear to be a Normal type move). It also seems in Gen 4+, they also do give it a separate effect index besides just being a recoil move, though it didn't seem to matter here.

However, I did test Struggle in Gen 4 with an Abra that cannot OHKO Falkner's Pidgeotto without a crit (but could with Pound with the Silk Scarf - damage calc screenshot is from AxewKairiSora on Discord).

Image Image

Gen 5?

This does not seem to be the case anymore...

This is a screenshot and quote from Salamence on Discord:

struggle is not boosted by silk scarf in gen 5. unlike previous generations
Lvl 53 0 Atk Magikarp Struggle vs. Lvl 14 0 HP 12 IVs / 0 Def 12 IVs Panpour: 32-38 (82 - 97.4%) -- guaranteed 2HKO
Lvl 53 0 Atk Silk Scarf Magikarp Tackle vs. Lvl 14 0 HP 12 IVs / 0 Def 12 IVs Panpour: 39-46 (100 - 117.9%) -- guaranteed OHKO

Image

So it seems it's just Gen 2-4 where this quirk exists. Unless it was re-added in later generations, but Gen 2-3 have solid evidence through decomps, and Gen 4 has some evidence and a screenshot of it occurring.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions