Hacking Pokémon XY/ORAS – Play with Pokémon at Their Real Sizes

  • Thread starter Thread starter Zetta_D
  • Start date Start date
  • Views Views 4,272
  • Replies Replies 16
  • Likes Likes 11

Zetta_D

Well-Known Member
Member
Joined
Jun 25, 2019
Messages
142
Reaction score
129
Trophies
1
Age
23
Location
France
XP
743
Country
France
Hello, I recently showed a code in the Sango plugin thread.
I was asked to share the code so that it would be easier to distribute, so I made it in AR version, which is below.
Additionally, I’m including a commented C version of the code to help you understand it, or in case you want to adapt it for earlier versions. This was made on Pokémon Alpha Sapphire 1.4.
Here are a few demos (btw, Wailord is way too big to be displayed at its real size x'D).
I hope this will be useful for ROM hacks as well, like the No Outlines code.
I’ve only tested this on Citra, so if you encounter any bugs, please let me know.

Code:
[Fix Pokemon Size (AS v1.4) - Press R]
DD000000 00000100
0072560C EA02D03B
E07D9700 000000A0
E92D5FFF EB000002
E8BD5FFF E1A04000
EAFD2FBE E92D4070
E3A04050 E3A05001
E59F1068 E59FC068
E59FE068 E59F0068
E5913000 E3530000
0A000010 E2832E17
E1D220B0 E152000C
8A00000C E59E6A00
E1026482 E1D262B4
E1D223BC EE066A90
EE072A10 EEF86A66
EEB87A47 EEC67A87
EDC37A0D EDC37A0E
EDC37A0F E5C3504C
E2811004 E1510000
1AFFFFE8 E8BD8070
083F84C0 000002D1
00617000 083F84D8

C:
void FixPokemonSize( void )
{
  for ( u32 i = 0; i < 6; i++ )
  {
    u32 pkmMdl = *(u32*)( 0x83F84C0 + 4 * i ); // Base address of the 3D model
    if ( pkmMdl == 0 )
      continue;

    u16 pkmNum = *(u16*)( pkmMdl + 0x170 ); // Pokédex number
    if ( pkmNum >= 722 )
      continue;

    u32 pkmData       = *(u32*)0x617A00 + 0x50 * pkmNum;  // Personal data of the Pokémon
    float realSize    = (float)*(u16*)( pkmData + 0x24 ); // Actual height according to the Pokédex
    float defaultSize = (float)*(u16*)( pkmData + 0x3C ); // Default displayed size in battle
    float ratio       = realSize / defaultSize;

    // Update Pokémon scale
    *(float*)( pkmMdl + 0x34 ) = ratio;
    *(float*)( pkmMdl + 0x38 ) = ratio;
    *(float*)( pkmMdl + 0x3C ) = ratio;

    // Mark the model to be updated
    *(bool*)( pkmMdl + 0x4C ) = true;
  }
}

1757153976896.png

1757154193647.png

1757154345194.png
 
Can this be done for Ultra sun and Ultra Moon that have a bigger roster of Pokemon? that would be great
 
Does this work in actual hardware?
Yes, the .text section, land & heap memory are the same on old/new 3DS/2DS hardware and Citra.
Post automatically merged:

Can this be done for Ultra sun and Ultra Moon that have a bigger roster of Pokemon? that would be great
Yes, I described how the algorithm works above. All you need to do is find the addresses for the correct version of the game in question and apply it. I could take care of that when I have more time.
 
Yes, the .text section, land & heap memory are the same on old/new 3DS/2DS hardware and Citra.
Post automatically merged:


Yes, I described how the algorithm works above. All you need to do is find the addresses for the correct version of the game in question and apply it. I could take care of that when I have more time.
I dont know how to do anything like that, but Ill try and if I manage to make it work ill share it here, thanks for asnwering and for the code!
 
I haven't checked it out yet either, sorry x'D - I'm focused on the Pokémon ORAS plugin.
Np take your time.

Im playing Rutile Ruby V1.4 (on 3Ds not emu) and tried this code and it crash the game, I wonder if it is because this was made for Sapphire, only works on citra or its a hack rom
 
Np take your time.

Im playing Rutile Ruby V1.4 (on 3Ds not emu) and tried this code and it crash the game, I wonder if it is because this was made for Sapphire, only works on citra or its a hack rom
Send me a memory dump while you’re in battle (use CTRPF → Gateway RAM Dumps), and I’ll be able to tell you where the error comes from x)
 
I checked, and the memory is identical. However, your dump shows the crash occurring at address 0x0702DB48, which falls within the CTRPF memory range. It seems like CTRPF is what’s causing the crash.
I tested it on Citra, and it works fine with both the built-in cheat menu and CTRPF.
Try it with Luma3DS idk x)

1777117979024.png
 
  • Like
Reactions: Peanucomp
Oh well I guess ill wait to eventually use the cheat, for some reason USUM plays perfect on my PC with Citra/Azahar but Oras and XY are glitchy, hence why I installed Rutile on my 3ds. Ill way until someone ports this to USUM I guess, thanks so much for trying to help I know you are busy.

Edit: Tried it with regular Omega Ruby V1.4 and also the games freezes when I press R in the overworld, in both Citra and Azahar on PC and Android, im cooked I guess.
 
Last edited by Peanucomp,

Site & Scene News

Popular threads in this forum