• Snag some vintage SPL team logo merch over at our Teespring store before January 12th!

Research Scarlet & Violet Battle Mechanics Research

Covert cloak actually prevents poison touch from activating, which can be seen in debug mode. I tested it on cartridge too and it works the same (but I can't record it)
1688060560492.png
 
Last edited:
Each status has an equal chance to my knowledge, no accounting for order of roll if any though (i.e. Roll 16.67% Poison, if no Poison then roll Paralyze, etc) which could slightly skew the frequency of them over a large enough sample size.

Actually, they all have an equal chance of being picked, and there isn't a bias for a particular status. The game does these checks in this order when Dire Claw is used:
1. Rand 3 to decide the status, where 0 = poison, 1 = paralyze, 2 = sleep
2. Rand 100 and if less than 50, Dire Claw's secondary will trigger.
3. If Poison Touch is present, Rand 100 and if less than 30, Poison Touch will trigger.

These checks occur even if the opponent is already statused.
If both Dire Claw and Poison Touch trigger, then Dire Claw goes off first.
If the target is immune to Dire Claw's status effect, then nothing happens. The effect isn't rerolled.

I believe that's consistent with pyuk's earlier explanation and how Tri Attack works.
Regarding the Poison Touch interaction, Bulbapedia claims the move’s secondary applies first, and can even use up the target’s Lum berry before Poison Touch procs, and I was able to confirm that this interaction still happens in S/V (after like 15 pecha berries using poison touch poison fangs). This suggests that Dire Claw will roll its own status attempt before Poison Touch can kick in, making the overall status chance 1/6 sleep, 1/6 paralysis, and 19/60 (~1/3) poison.
 
If a Landorus used Taunt on Gholdengo, causing it to fail, does that trigger the boosted power on Stomping Tantrum for the next turn?
It would appear so, first tantrum left it comfortable in the yellow, after a taunt into Good as Gold however they where a clean ohko. Thanks to smudgerox for helping test that (who can also confirm the ghold stats where all practically identical if need be)
 
If you were to hack Battle Bond on a non-bonded Greninja, would it keep its effect?
Greninja has to have a specific form and have the Ability Battle Bond for it to work. So if you hack Battle Bond on regular Greninja, taking a KO won't boost stats (or transform to Ash-Greninja in previous generations). If you give that specific form Greninja another Ability, it doesn't have a built-in Battle Bond either or something like that.
 
Thought I'd write a bit about "hackable species/forms" here since BH is having a relevant policy discussion.

As you may know, the personal table is how the Pokémon games handle data for a species/form. There's a notable difference between the SV and SWSH personal tables in terms of what data is included: SWSH had no data for dexited species (they were all 0'd out in the personal table). SV has data for every species and form! So yes, this means that Pokémon not available or transferrable into SV have stats, and they can be hacked in where they are usable in game and in local battles. I suppose this is analogous to how every move has data, but dexited moves are blocked behind a check that prevents you from clicking them.

Example of Mega Gyarados in a local battle:
1690176019940.png


If you trigger the "restore backup data" function in SV, it can actually show more than 400 species. SV is tracking Pokémon you've encountered that aren't in the Paldea dex.

2023072400513900-B6CE40797459B0890BF7CEF68A4CE587.jpg


Similar to SV, Pokémon not in the game default to a Pikachu model. For forms in SV that don't exist, but the species does, the game uses form 0's model, e.g. Eternal Flower Floette appears as Red, Mega Rayquaza appears as regular Rayquaza, though there seem to be some hitbox/camera differences.

Why is it then that Crowned Zamazenta and Eternamax Eternatus don't seem to work then? This is because the game actually has specific code to revert certain forms. This behavior is new in SV, and did not occur in SWSH which allowed you to hack any of these species-forms in freely. The reversion code is triggered when I hover over a Pokémon in the box, and at some point when setting up a local battle (as in, I was not able to create a party, then hack a mon into the battle party, then start a match and have it keep its form). Here's the table of species, form to convert from, form to convert into:

Code:
421, 1, 0, // Cherrim-Sunshine -> Cherrim
555, 1, 0, // Darmanitan-Zen -> Darmanitan
555, 3, 2, // Darmanitan-Galar-Zen -> Darmanitan-Galar
681, 1, 0, // Aegislash-Sword -> Aegislash
746, 1, 0, // Wishiwashi-School -> Wishiwashi
778, 1, 0, // Mimikyu-Busted -> Mimikyu
845, 1, 0, // Cramorant-Gulping -> Cramorant
845, 2, 0, // Cramorant-Gorging -> Cramorant
888, 1, 0, // Zacian-Crowned -> Zacian
889, 1, 0, // Zamazenta-Crowned -> Zamazenta
890, 1, 0, // Eternatus-Eternamax -> Eternatus
875, 1, 0, // Eiscue-Noice -> Eiscue
877, 1, 0, // Morpeko-Hangry -> Morpeko
351, 2, 0, // Castform-Rainy -> Castform
351, 3, 0, // Castform-Snowy -> Castform
351, 1, 0, // Castform-Sunny -> Castform
648, 1, 0, // Meloetta-Pirouette -> Meloetta
716, 1, 0, // Xerneas-Active -> Xerneas
718, 4, 0, // Zygarde-Complete -> Zygarde
774, 0, 7, // Minior-Meteor (Red) -> Minior-Red
774, 1, 8, // Minior-Meteor (Orange) -> Minior-Orange
774, 2, 9, // Minior-Meteor (Yellow) -> Minior-Yellow
774, 3, 10, // Minior-Meteor (Green) -> Minior-Green
774, 4, 11, // Minior-Meteor (Blue) -> Minior-Blue
774, 5, 12, // Minior-Meteor (Indigo) -> Minior-Indigo
774, 6, 13, // Minior-Meteor (Violet) -> Minior-Violet
934, 1, 0, // Palafin-Hero -> Palafin

I verified that this code and table are what's responsible for the reversion by disabling it, which allowed me to demonstrate Eternamax stat overflow:
1690175514126.png


Some examples of how it works:
- Hack in a Rayquaza, set its form to 1. It will use the Mega's stats. It will appear as a regular Rayquaza since Mega has no specific model.
- Hack in a Blastoise, set its form to 1. It will use the Mega's stats. It will appear as a Pikachu since Blastoise is not in the game.
- Hack in an Eternatus, set its form to 1. It will revert and become regular Eternatus-0.
- Hack in a Morpeko, set its form to 1. It will revert to Morpeko-0 and appear as a Pikachu since it's not in the game.
(This does not cover in-battle form changes, just if you put them in a box, take them out, and try to start a battle with them.)

Example of Mega Blastoise and Blastoise side by side, both 6 IV.
2023072400181900-B6CE40797459B0890BF7CEF68A4CE587.jpg
2023072400181700-B6CE40797459B0890BF7CEF68A4CE587.jpg


Example of Red Flower Floette and Eternal Flower Floette side by side, both 6 IV.
2023072400220000-B6CE40797459B0890BF7CEF68A4CE587.jpg
2023072400220300-B6CE40797459B0890BF7CEF68A4CE587.jpg


It's worth noting that just because they use the same model as form 0 does not mean they're indistinguishable. Here, I switch Rayquaza into Mega Rayquaza and something about the model makes it vanish at the same angle.
https://imgur.com/a/Wh4wB7z
 
Last edited:
Thought I'd write a bit about "hackable species/forms" here since BH is having a relevant policy discussion.

As you may know, the personal table is how the Pokémon games handle data for a species/form. There's a notable difference between the SV and SWSH personal tables in terms of what data is included: SWSH had no data for dexited species (they were all 0'd out in the personal table). SV has data for every species and form! So yes, this means that Pokémon not available or transferrable into SV have stats, and they can be hacked in where they are usable in game and in local battles. I suppose this is analogous to how every move has data, but dexited moves are blocked behind a check that prevents you from clicking them.

Example of Mega Gyarados in a local battle:
View attachment 537444

If you trigger the "restore backup data" function in SV, it can actually show more than 400 species. SV is tracking Pokémon you've encountered that aren't in the Paldea dex.

View attachment 537451

Similar to SV, Pokémon not in the game default to a Pikachu model. For forms in SV that don't exist, but the species does, the game uses form 0's model, e.g. Eternal Flower Floette appears as Red, Mega Rayquaza appears as regular Rayquaza, though there seem to be some hitbox/camera differences.

Why is it then that Crowned Zamazenta and Eternamax Eternatus don't seem to work then? This is because the game actually has specific code to revert certain forms. The reversion code is triggered when I hover over a Pokémon in the box, and at some point when setting up a local battle (as in, I was not able to create a party, then hack a mon into the battle party, then start a match and have it keep its form). Here's the table of species, form to convert from, form to convert into:

Code:
421, 1, 0, // Cherrim-Sunshine -> Cherrim
555, 1, 0, // Darmanitan-Zen -> Darmanitan
555, 3, 2, // Darmanitan-Galar-Zen -> Darmanitan-Galar
681, 1, 0, // Aegislash-Sword -> Aegislash
746, 1, 0, // Wishiwashi-School -> Wishiwashi
778, 1, 0, // Mimikyu-Busted -> Mimikyu
845, 1, 0, // Cramorant-Gulping -> Cramorant
845, 2, 0, // Cramorant-Gorging -> Cramorant
888, 1, 0, // Zacian-Crowned -> Zacian
889, 1, 0, // Zamazenta-Crowned -> Zamazenta
890, 1, 0, // Eternatus-Eternamax -> Eternatus
875, 1, 0, // Eiscue-Noice -> Eiscue
877, 1, 0, // Morpeko-Hangry -> Morpeko
351, 2, 0, // Castform-Rainy -> Castform
351, 3, 0, // Castform-Snowy -> Castform
351, 1, 0, // Castform-Sunny -> Castform
648, 1, 0, // Meloetta-Pirouette -> Meloetta
716, 1, 0, // Xerneas-Active -> Xerneas
718, 4, 0, // Zygarde-Complete -> Zygarde
774, 0, 7, // Minior-Meteor (Red) -> Minior-Red
774, 1, 8, // Minior-Meteor (Orange) -> Minior-Orange
774, 2, 9, // Minior-Meteor (Yellow) -> Minior-Yellow
774, 3, 10, // Minior-Meteor (Green) -> Minior-Green
774, 4, 11, // Minior-Meteor (Blue) -> Minior-Blue
774, 5, 12, // Minior-Meteor (Indigo) -> Minior-Indigo
774, 6, 13, // Minior-Meteor (Violet) -> Minior-Violet
934, 1, 0, // Palafin-Hero -> Palafin

I verified that this code and table are what's responsible for the reversion by disabling it, which allowed me to demonstrate Eternamax stat overflow:
View attachment 537439

Some examples of how it works:
- Hack in a Rayquaza, set its form to 1. It will use the Mega's stats. It will appear as a regular Rayquaza since Mega has no specific model.
- Hack in a Blastoise, set its form to 1. It will use the Mega's stats. It will appear as a Pikachu since Blastoise is not in the game.
- Hack in an Eternatus, set its form to 1. It will revert and become regular Eternatus-0.
- Hack in a Morpeko, set its form to 1. It will revert to Morpeko-0 and appear as a Pikachu since it's not in the game.

Example of Mega Blastoise and Blastoise side by side, both 6 IV.
View attachment 537441View attachment 537443

Example of Red Flower Floette and Eternal Flower Floette side by side, both 6 IV.
View attachment 537446View attachment 537447

It's worth noting that just because they use the same model as form 0 does not mean they're indistinguishable. Here, I switch Rayquaza into Mega Rayquaza and something about the model makes it vanish at the same angle.
https://imgur.com/a/Wh4wB7z
Ok I have to ask: does that personal table with data on all the past Pokemon and formes include the Pokestars from BW2? I wouldn’t be surprised if it doesn’t, but I wouldn’t put it past Game Freak to have just left those in there.
 
Thought I'd write a bit about "hackable species/forms" here since BH is having a relevant policy discussion.

As you may know, the personal table is how the Pokémon games handle data for a species/form. There's a notable difference between the SV and SWSH personal tables in terms of what data is included: SWSH had no data for dexited species (they were all 0'd out in the personal table). SV has data for every species and form! So yes, this means that Pokémon not available or transferrable into SV have stats, and they can be hacked in where they are usable in game and in local battles. I suppose this is analogous to how every move has data, but dexited moves are blocked behind a check that prevents you from clicking them.

Example of Mega Gyarados in a local battle:
View attachment 537444

If you trigger the "restore backup data" function in SV, it can actually show more than 400 species. SV is tracking Pokémon you've encountered that aren't in the Paldea dex.

View attachment 537451

Similar to SV, Pokémon not in the game default to a Pikachu model. For forms in SV that don't exist, but the species does, the game uses form 0's model, e.g. Eternal Flower Floette appears as Red, Mega Rayquaza appears as regular Rayquaza, though there seem to be some hitbox/camera differences.

Why is it then that Crowned Zamazenta and Eternamax Eternatus don't seem to work then? This is because the game actually has specific code to revert certain forms. The reversion code is triggered when I hover over a Pokémon in the box, and at some point when setting up a local battle (as in, I was not able to create a party, then hack a mon into the battle party, then start a match and have it keep its form). Here's the table of species, form to convert from, form to convert into:

Code:
421, 1, 0, // Cherrim-Sunshine -> Cherrim
555, 1, 0, // Darmanitan-Zen -> Darmanitan
555, 3, 2, // Darmanitan-Galar-Zen -> Darmanitan-Galar
681, 1, 0, // Aegislash-Sword -> Aegislash
746, 1, 0, // Wishiwashi-School -> Wishiwashi
778, 1, 0, // Mimikyu-Busted -> Mimikyu
845, 1, 0, // Cramorant-Gulping -> Cramorant
845, 2, 0, // Cramorant-Gorging -> Cramorant
888, 1, 0, // Zacian-Crowned -> Zacian
889, 1, 0, // Zamazenta-Crowned -> Zamazenta
890, 1, 0, // Eternatus-Eternamax -> Eternatus
875, 1, 0, // Eiscue-Noice -> Eiscue
877, 1, 0, // Morpeko-Hangry -> Morpeko
351, 2, 0, // Castform-Rainy -> Castform
351, 3, 0, // Castform-Snowy -> Castform
351, 1, 0, // Castform-Sunny -> Castform
648, 1, 0, // Meloetta-Pirouette -> Meloetta
716, 1, 0, // Xerneas-Active -> Xerneas
718, 4, 0, // Zygarde-Complete -> Zygarde
774, 0, 7, // Minior-Meteor (Red) -> Minior-Red
774, 1, 8, // Minior-Meteor (Orange) -> Minior-Orange
774, 2, 9, // Minior-Meteor (Yellow) -> Minior-Yellow
774, 3, 10, // Minior-Meteor (Green) -> Minior-Green
774, 4, 11, // Minior-Meteor (Blue) -> Minior-Blue
774, 5, 12, // Minior-Meteor (Indigo) -> Minior-Indigo
774, 6, 13, // Minior-Meteor (Violet) -> Minior-Violet
934, 1, 0, // Palafin-Hero -> Palafin

I verified that this code and table are what's responsible for the reversion by disabling it, which allowed me to demonstrate Eternamax stat overflow:
View attachment 537439

Some examples of how it works:
- Hack in a Rayquaza, set its form to 1. It will use the Mega's stats. It will appear as a regular Rayquaza since Mega has no specific model.
- Hack in a Blastoise, set its form to 1. It will use the Mega's stats. It will appear as a Pikachu since Blastoise is not in the game.
- Hack in an Eternatus, set its form to 1. It will revert and become regular Eternatus-0.
- Hack in a Morpeko, set its form to 1. It will revert to Morpeko-0 and appear as a Pikachu since it's not in the game.

Example of Mega Blastoise and Blastoise side by side, both 6 IV.
View attachment 537441View attachment 537443

Example of Red Flower Floette and Eternal Flower Floette side by side, both 6 IV.
View attachment 537446View attachment 537447

It's worth noting that just because they use the same model as form 0 does not mean they're indistinguishable. Here, I switch Rayquaza into Mega Rayquaza and something about the model makes it vanish at the same angle.
https://imgur.com/a/Wh4wB7z
With the reversion code disabled, can you hold a local battle with Eternamax overflow on full display and/or Zamazenta-C holding an item other than Rusted Shield? If so, essentially pulling off that Gen 8 video with Zacian-C freed in local battle would be one argument in favour of keeping the in-game forms free in Hackmons.
 
It's worth noting that just because they use the same model as form 0 does not mean they're indistinguishable. Here, I switch Rayquaza into Mega Rayquaza and something about the model makes it vanish at the same angle.
https://imgur.com/a/Wh4wB7z
another thing worth noting is that, from my limited testing at least, you can tell if a forme is a "phantom" by the size of the tera crown. with things that appear as pikachu, the crown is comically oversized:
20230723_151325.jpg
(this is a mega latios)
 
Ok I have to ask: does that personal table with data on all the past Pokemon and formes include the Pokestars from BW2? I wouldn’t be surprised if it doesn’t, but I wouldn’t put it past Game Freak to have just left those in there.
No, those went the way of Spiky-Eared Pichu and the cosplay Pikachu. I included a json and table of personal. Note that like pretty much everything else in the game, they're sorted by internal ID, and one of the fields is the National Dex ID that humans use.

With the reversion code disabled, can you hold a local battle with Eternamax overflow on full display and/or Zamazenta-C holding an item other than Rusted Shield? If so, essentially pulling off that Gen 8 video with Zacian-C freed in local battle would be one argument in favour of keeping the in-game forms free in Hackmons.
Are you asking whether it's possible to play a romhack? I had to edit the code execution to get that image. In the same way, this would be how you can give every Pokémon 1 HP, or change every model into an upside-down Rayquaza, or enable every move and turn them all into Fissure. I considered writing "THIS IS A MOD" under that example because it's not doable by simple save-editing. Imo, it's actually an argument to disallow specifically those battle-only forms in the table, because the game actively prevents you from using them. But that's a policy discussion, not for here.

(It's imprecise to say "battle-only forms" because many battle-only forms such as Megas and Ash Greninja are not in the list, and thus do not revert. It's strictly a hard-coded table of the forms that do get reverted.)

EDIT: now includes a text dump of all species/forms as well as json and table
 

Attachments

Last edited:
No, those went the way of Spiky-Eared Pichu and the cosplay Pikachu. I included a json and table of personal. Note that like pretty much everything else in the game, they're sorted by internal ID, and one of the fields is the National Dex ID that humans use.


Are you asking whether it's possible to play a romhack? I had to edit the code execution to get that image. In the same way, this would be how you can give every Pokémon 1 HP, or change every model into an upside-down Rayquaza, or enable every move and turn them all into Fissure. I considered writing "THIS IS A MOD" under that example because it's not doable by simple save-editing. Imo, it's actually an argument to disallow specifically those battle-only forms in the table, because the game actively prevents you from using them. But that's a policy discussion, not for here.

(It's imprecise to say "battle-only forms" because many battle-only forms such as Megas and Ash Greninja are not in the list, and thus do not revert. It's strictly a hard-coded table of the forms that do get reverted.)
At this point, I'm wondering if the person who created that SwSh video with freed Zacian-C in local battle holding not-Rusted Sword also did the same hack as you. We might never know if they did, but if they did, I'd support having Gen 9 Hackmons go the same way as Gen 8 Hackmons and keep all the in-battle-only forms free (yes, at the cost of freeing Eternamax in Gen 9 PH).
 
At this point, I'm wondering if the person who created that SwSh video with freed Zacian-C in local battle holding not-Rusted Sword also did the same hack as you. We might never know if they did, but if they did, I'd support having Gen 9 Hackmons go the same way as Gen 8 Hackmons and keep all the in-battle-only forms free (yes, at the cost of freeing Eternamax in Gen 9 PH).
You can bring Pokemon like Eternamax or Zacian-C in Gen 8 local battles without disabling any internal functions. It's not akin to what you have to do in Gen 9.

Interestingly, it doesn't seem to change the abilities of the pokemons (Blastoise still have torrent)
This is all hackmons behavior; you could change the Ability to be whatever you want.
 
Code:
421, 1, 0, // Cherrim-Sunshine -> Cherrim
555, 1, 0, // Darmanitan-Zen -> Darmanitan
555, 3, 2, // Darmanitan-Galar-Zen -> Darmanitan-Galar
681, 1, 0, // Aegislash-Sword -> Aegislash
746, 1, 0, // Wishiwashi-School -> Wishiwashi
778, 1, 0, // Mimikyu-Busted -> Mimikyu
845, 1, 0, // Cramorant-Gulping -> Cramorant
845, 2, 0, // Cramorant-Gorging -> Cramorant
888, 1, 0, // Zacian-Crowned -> Zacian
889, 1, 0, // Zamazenta-Crowned -> Zamazenta
890, 1, 0, // Eternatus-Eternamax -> Eternatus
875, 1, 0, // Eiscue-Noice -> Eiscue
877, 1, 0, // Morpeko-Hangry -> Morpeko
351, 2, 0, // Castform-Rainy -> Castform
351, 3, 0, // Castform-Snowy -> Castform
351, 1, 0, // Castform-Sunny -> Castform
648, 1, 0, // Meloetta-Pirouette -> Meloetta
716, 1, 0, // Xerneas-Active -> Xerneas
718, 4, 0, // Zygarde-Complete -> Zygarde
774, 0, 7, // Minior-Meteor (Red) -> Minior-Red
774, 1, 8, // Minior-Meteor (Orange) -> Minior-Orange
774, 2, 9, // Minior-Meteor (Yellow) -> Minior-Yellow
774, 3, 10, // Minior-Meteor (Green) -> Minior-Green
774, 4, 11, // Minior-Meteor (Blue) -> Minior-Blue
774, 5, 12, // Minior-Meteor (Indigo) -> Minior-Indigo
774, 6, 13, // Minior-Meteor (Violet) -> Minior-Violet
934, 1, 0, // Palafin-Hero -> Palafin
Something interesting I noticed about this list is that Zygarde-Complete appears to be set to revert to the wrong forme. It changes to the base Zygarde with Aura Break, not Power Construct, which I believe should be incapable of transforming back into Zygarde-Complete even if hacked to have Power Construct anyway. This leads me to three questions. First, do these forced forme changes affect the Pokémon’s ability at all? Would Zygarde-Complete with Power Construct become Zygarde-0 with Aura Break? Would Huge Power Zacian-Crowned still have Huge Power as Zacian-Hero, or would its ability become Intrepid Sword? Second, what if that hacked-in Zacian-Crowned holds a Rusted Sword? Third, do forme change abilities for dexited Pokémon even work at all?
 
Something interesting I noticed about this list is that Zygarde-Complete appears to be set to revert to the wrong forme. It changes to the base Zygarde with Aura Break, not Power Construct, which I believe should be incapable of transforming back into Zygarde-Complete even if hacked to have Power Construct anyway. This leads me to three questions. First, do these forced forme changes affect the Pokémon’s ability at all? Would Zygarde-Complete with Power Construct become Zygarde-0 with Aura Break? Would Huge Power Zacian-Crowned still have Huge Power as Zacian-Hero, or would its ability become Intrepid Sword? Second, what if that hacked-in Zacian-Crowned holds a Rusted Sword? Third, do forme change abilities for dexited Pokémon even work at all?
The reversion logic/table are only used to keep you from having those species-form combos in the box or when starting a battle. When the correction occurs, the game checks for the correct ability/gender for the expected form and sets them.

The game doesn't care what ability or item it had before reverting, only that it has the species-form combo.

This also has no effect on whether abilities work in battle.

Code:
bool __fastcall correct_battle_forms(pml::pokepara::CoreParam *param)
{
  unsigned __int16 MonsNo; // w20
  unsigned __int16 FormNo; // w8
  bool result; // w0
  __int64 index; // x8
  unsigned __int16 v6; // w8

  MonsNo = pml::pokepara::Accessor::GetMonsNo(param->accessor);
  FormNo = pml::pokepara::Accessor::GetFormNo(param->accessor);
  result = 0;
  if ( MonsNo <= 773u )
  {
    if ( MonsNo > 680u )
    {
      if ( MonsNo > 717u )
      {
        if ( MonsNo == 746 )
        {
          if ( FormNo == 1 )
          {
            index = 4LL;
            goto LABEL_15;
          }
        }
        else
        {
          if ( MonsNo != 718 )
            return result;
          if ( FormNo == 4 )
          {
            index = 18LL;
            goto LABEL_15;
          }
        }
      }
      else if ( MonsNo == 681 )
      {
        if ( FormNo == 1 )
        {
          index = 3LL;
          goto LABEL_15;
        }
      }
      else
      {
        if ( MonsNo != 716 )
          return result;
        if ( FormNo == 1 )
        {
          index = 17LL;
          goto LABEL_15;
        }
      }
    }
    else if ( MonsNo > 554u )
    {
      if ( MonsNo == 555 )
      {
        if ( FormNo == 1 )
        {
          index = 1LL;
          goto LABEL_15;
        }
        if ( FormNo == 3 )
        {
          index = 2LL;
          goto LABEL_15;
        }
      }
      else
      {
        if ( MonsNo != 648 )
          return result;
        if ( FormNo == 1 )
        {
          index = 16LL;
          goto LABEL_15;
        }
      }
    }
    else
    {
      if ( MonsNo != 421 )
      {
        if ( MonsNo == 351 )                    // Castform
        {
          v6 = FormNo - 1;
          if ( v6 < 3u )
          {
            index = castform_indices[v6];
            goto LABEL_15;
          }
          return 0;
        }
        return result;
      }
      if ( FormNo == 1 )
      {
        index = 0LL;
        goto LABEL_15;
      }
    }
    return 0;
  }
  if ( MonsNo > 887u )
  {
    if ( MonsNo > 889u )
    {
      if ( MonsNo == 890 )
      {
        if ( FormNo == 1 )
        {
          index = 10LL;
          goto LABEL_15;
        }
      }
      else
      {
        if ( MonsNo != 934 )
          return result;
        if ( FormNo == 1 )
        {
          index = 26LL;
          goto LABEL_15;
        }
      }
    }
    else if ( MonsNo == 888 )
    {
      if ( FormNo == 1 )
      {
        index = 8LL;
        goto LABEL_15;
      }
    }
    else if ( FormNo == 1 )
    {
      index = 9LL;
      goto LABEL_15;
    }
    return 0;
  }
  if ( MonsNo > 874u )
  {
    if ( MonsNo == 875 )
    {
      if ( FormNo == 1 )
      {
        index = 11LL;
        goto LABEL_15;
      }
    }
    else
    {
      if ( MonsNo != 877 )
        return result;
      if ( FormNo == 1 )
      {
        index = 12LL;
        goto LABEL_15;
      }
    }
    return 0;
  }
  switch ( MonsNo )
  {
    case 778u:
      if ( FormNo == 1 )
      {
        index = 5LL;
        goto LABEL_15;
      }
      return 0;
    case 845u:
      if ( FormNo == 1 )
      {
        index = 6LL;
        goto LABEL_15;
      }
      if ( FormNo == 2 )
      {
        index = 7LL;
        goto LABEL_15;
      }
      return 0;
    case 774u:
      if ( FormNo < 7u )
      {
        index = FormNo + 19LL;
LABEL_15:
        set_corrected_form_if_battle_form(param, form_reversion_table[3 * index + 2], 0LL);
        return 1;
      }
      return 0;
  }
  return result;
}
Code:
__int64 __fastcall set_corrected_form_if_battle_form(
        pml::pokepara::CoreParam *param,
        unsigned int expected_form,
        _WORD *a3)
{
  unsigned int MonsNo; // w21
  __int64 result; // x0
  char abilityno; // w0
  unsigned int abilityval; // w0
  unsigned int v10; // w0
  char v11; // w0

  MonsNo = pml::pokepara::Accessor::GetMonsNo(param->accessor);
  result = pml::pokepara::Accessor::GetFormNo(param->accessor);
  if ( result != expected_form )
  {
    correct_zacian_zamazenta_kyurem_moves_for_form(param, expected_form, a3);
    pml::pokepara::Accessor::SetFormNo(param->accessor, expected_form);
    abilityno = pml_get_abilityno(param);
    abilityval = get_ability_value(MonsNo, expected_form, abilityno);
    pml::pokepara::Accessor::SetAbilityNumber(param->accessor, abilityval);
    v10 = sub_7100AFCB80(param->accessor);
    v11 = sub_71012FACB0(MonsNo, expected_form, v10);
    pml::pokepara::Accessor::SetGender(param->accessor, v11);
    return sub_7100D2EBE8(param, 1);
  }
  return result;
}

So that means:
- You cannot have any Zygarde-4 in the box or at the start of a battle, regardless of what ability it has.
- Any Zygarde-4 that's reverted will become Zygarde-0 with Aura Break, regardless of what ability it previously had.
- Zygarde-0, Zygarde-1, Zygarde-2, and Zygarde-3 aren't reverted at all regardless of ability, because they're not in the reversion list. You can hack anything you want onto them.
- Zygarde-3 (10% with Power Construct) still becomes Zygarde-4 (Complete Forme) if it loses enough HP in battle. https://imgur.com/bnpIPBG
- Even though it corrects the moves for Zacian, Zamazenta, and Kyurem, you can still hack Behemoth Blade and Behemoth Bash onto Hero forms, because form 0 = Hero isn't in the reversion table. Likewise, you can give form 0 any ability you want after the fact.
 
hi hello did a little more testing:
Would Huge Power Zacian-Crowned still have Huge Power as Zacian-Hero, or would its ability become Intrepid Sword?
This was basically answered above, but hacking in Gorilla Tactics Zacian-C / Moody Meloetta-P resulted in them reverting to their base formes with base abilities (ISword and SGrace, respectively).

Meloetta has weird interactions with Relic Song and a non-standard ability. So long as you stay in, Relic Song changes your forme but keeps the same ability (I had a Moody Meloetta-A, used Relic Song, and become Moody Meloetta-P; the reverse also holds). If you switch out after having used Relic Song, regardless of which forme you switched out as, you'll switch back in as Serene Grace Meloetta-A. If you switch out as Meloetta-A without having used Relic Song, you keep Moody.

I also tested the Shaymin-Sky Freeze interaction. Shaymin-Sky had Moody, and upon getting frozen, it became regular Shaymin with Natural Cure. Switching out and back in stayed as Natural Cure Shaymin.
 
(It's imprecise to say "battle-only forms" because many battle-only forms such as Megas and Ash Greninja are not in the list, and thus do not revert. It's strictly a hard-coded table of the forms that do get reverted.)
I've heard contrasting statements on this, can you confirm whether you were able to use ashgren in battle?
 
I've heard contrasting statements on this, can you confirm whether you were able to use ashgren in battle?
You can quickly look to see that species 658 is not in the table or the pseudocode, so it isn't handled at all by this code.
So yes, you can use bonded Ash Greninja (form 2) in battle, and yes, Water Shuriken always does 3 hits of 20 BP if used by one.

Both of these are 6 IV, Timid, 252 SpA / 6 SpD / 252 Spe in a local battle.
Left is Greninja-1, right is Greninja-2.
2023072622165400-B6CE40797459B0890BF7CEF68A4CE587.jpg
2023072622165500-B6CE40797459B0890BF7CEF68A4CE587.jpg


Here are videos comparing Water Shuriken when used by a Greninja-1 and Greninja-2.
One of them only hit 2 times with BP of 15, and the other hit 3 times with BP of 20.
https://imgur.com/a/XoWsSV4

As previously stated, forms that don't have a model simply use form 0's model if it exists, which is why they all look like regular Greninja.
 
Last edited:
Back
Top