From 7e456ca2844f3ddf9619b90946b76b7911e720fc Mon Sep 17 00:00:00 2001 From: Kaphotics Date: Sat, 27 Aug 2016 13:06:01 -0700 Subject: [PATCH] Add gen5 form bool setting SAV6 updated for visual parity, no functional change --- PKHeX/Saves/SAV5.cs | 42 ++++++++++++++++++++++++++++--------- PKHeX/Saves/SAV6.cs | 50 ++++++++++++++++++++++----------------------- 2 files changed, 56 insertions(+), 36 deletions(-) diff --git a/PKHeX/Saves/SAV5.cs b/PKHeX/Saves/SAV5.cs index 068006099..5f7870931 100644 --- a/PKHeX/Saves/SAV5.cs +++ b/PKHeX/Saves/SAV5.cs @@ -622,25 +622,47 @@ protected override void setDex(PKM pkm) int shiftoff = shiny * brSize * 2 + gender * brSize + brSize; // Set the Species Owned Flag - Data[PokeDex + bit / 8 + 0x8] |= (byte)(1 << (bit % 8)); + Data[PokeDex + 0x8 + bit / 8] |= (byte)(1 << (bit % 8)); // Set the [Species/Gender/Shiny] Seen Flag - Data[PokeDex + shiftoff + bit / 8 + 0x8] |= (byte)(1 << (bit % 8)); + Data[PokeDex + 0x8 + shiftoff + bit / 8] |= (byte)(1 << (bit % 8)); // Set the Display flag if none are set bool Displayed = false; - Displayed |= (Data[PokeDex + brSize * 5 + bit / 8 + 0x8] & (byte)(1 << (bit % 8))) != 0; - Displayed |= (Data[PokeDex + brSize * 6 + bit / 8 + 0x8] & (byte)(1 << (bit % 8))) != 0; - Displayed |= (Data[PokeDex + brSize * 7 + bit / 8 + 0x8] & (byte)(1 << (bit % 8))) != 0; - Displayed |= (Data[PokeDex + brSize * 8 + bit / 8 + 0x8] & (byte)(1 << (bit % 8))) != 0; - if (!Displayed) // offset is already biased by 0x60, reuse shiftoff but for the display flags. - Data[PokeDex + shiftoff + brSize * 4 + bit / 8 + 0x8] |= (byte)(1 << (bit % 8)); + Displayed |= (Data[PokeDex + 0x8 + brSize*5 + bit/8] & (byte)(1 << (bit%8))) != 0; + Displayed |= (Data[PokeDex + 0x8 + brSize*6 + bit/8] & (byte)(1 << (bit%8))) != 0; + Displayed |= (Data[PokeDex + 0x8 + brSize*7 + bit/8] & (byte)(1 << (bit%8))) != 0; + Displayed |= (Data[PokeDex + 0x8 + brSize*8 + bit/8] & (byte)(1 << (bit%8))) != 0; + if (!Displayed) // offset is already biased by brSize, reuse shiftoff but for the display flags. + Data[PokeDex + 0x8 + shiftoff + brSize*4 + bit/8] |= (byte)(1 << (bit%8)); // Set the Language if (lang < 0) lang = 1; - Data[PokeDexLanguageFlags + (bit * 7 + lang) / 8] |= (byte)(1 << ((bit * 7 + lang) % 8)); + Data[PokeDexLanguageFlags + (bit*7 + lang) / 8] |= (byte)(1 << ((bit*7 + lang) % 8)); - // Formes : todo + // Formes + int fc = Personal[pkm.Species].FormeCount; + int f = B2W2 ? SaveUtil.getDexFormIndexB2W2(pkm.Species, fc) : SaveUtil.getDexFormIndexBW(pkm.Species, fc); + if (f < 0) return; + + int FormLen = B2W2 ? 0xB : 0x9; + int FormDex = PokeDex + 0x8 + brSize*9; + bit = f + pkm.AltForm; + + // Set Form Seen Flag + Data[FormDex + FormLen*shiny + bit/8] |= (byte)(1 << (bit%8)); + + // Set Displayed Flag if necessary, check all flags + for (int i = 0; i < fc; i++) + { + bit = f + i; + if ((Data[FormDex + FormLen*2 + bit/8] & (byte)(1 << (bit%8))) != 0) // Nonshiny + return; // already set + if ((Data[FormDex + FormLen*3 + bit/8] & (byte)(1 << (bit%8))) != 0) // Shiny + return; // already set + } + bit = f + pkm.AltForm; + Data[FormDex + FormLen * (2 + shiny) + bit / 8] |= (byte)(1 << (bit % 8)); } } } diff --git a/PKHeX/Saves/SAV6.cs b/PKHeX/Saves/SAV6.cs index e18a4319d..9063f81ec 100644 --- a/PKHeX/Saves/SAV6.cs +++ b/PKHeX/Saves/SAV6.cs @@ -730,35 +730,33 @@ protected override void setDex(PKM pkm) if (lang < 0) lang = 1; Data[PokeDexLanguageFlags + (bit * 7 + lang) / 8] |= (byte)(1 << ((bit * 7 + lang) % 8)); - // Set Form flags - int fc = Personal[pkm.Species].FormeCount; - int f = ORAS ? SaveUtil.getDexFormIndexORAS(pkm.Species, fc) : SaveUtil.getDexFormIndexXY(pkm.Species, fc); - if (f >= 0) - { - int FormLen = ORAS ? 0x26 : 0x18; - int FormDex = PokeDex + 0x368; - bit = f + pkm.AltForm; - // Set Seen Flag - Data[FormDex + FormLen * shiny + bit / 8] |= (byte)(1 << (bit % 8)); - - // Set Displayed Flag if necessary, check all flags - bool FormDisplayed = false; - for (int i = 0; i < fc; i++) - { - bit = f + i; - FormDisplayed |= (Data[FormDex + FormLen * 2 + bit / 8] & (byte)(1 << (bit % 8))) != 0; // Nonshiny - FormDisplayed |= (Data[FormDex + FormLen * 3 + bit / 8] & (byte)(1 << (bit % 8))) != 0; // Shiny - } - if (!FormDisplayed) - { - bit = f + pkm.AltForm; - Data[FormDex + FormLen * (2 + shiny) + bit / 8] |= (byte)(1 << (bit % 8)); - } - } - // Set DexNav count (only if not encountered previously) if (ORAS && getEncounterCount(pkm.Species - 1) == 0) setEncounterCount(pkm.Species - 1, 1); + + // Set Form flags + int fc = Personal[pkm.Species].FormeCount; + int f = ORAS ? SaveUtil.getDexFormIndexORAS(pkm.Species, fc) : SaveUtil.getDexFormIndexXY(pkm.Species, fc); + if (f < 0) return; + + int FormLen = ORAS ? 0x26 : 0x18; + int FormDex = PokeDex + 0x8 + brSize*9; + bit = f + pkm.AltForm; + + // Set Form Seen Flag + Data[FormDex + FormLen*shiny + bit/8] |= (byte)(1 << (bit%8)); + + // Set Displayed Flag if necessary, check all flags + for (int i = 0; i < fc; i++) + { + bit = f + i; + if ((Data[FormDex + FormLen*2 + bit/8] & (byte) (1 << (bit%8))) != 0) // Nonshiny + return; // already set + if ((Data[FormDex + FormLen*3 + bit/8] & (byte) (1 << (bit%8))) != 0) // Shiny + return; // already set + } + bit = f + pkm.AltForm; + Data[FormDex + FormLen * (2 + shiny) + bit / 8] |= (byte)(1 << (bit % 8)); } public override byte[] decryptPKM(byte[] data) {