Rewrite some magic gender value logic

it's always been a byte for ratios, but we never know; plus, it's a little more self documenting
This commit is contained in:
Kurt 2020-06-27 12:01:28 -05:00
parent 294d861f86
commit 0836d3191d
7 changed files with 39 additions and 40 deletions

View file

@ -9,7 +9,7 @@ namespace PKHeX.Core
internal static int[] GetEggMoves(PKM pkm, int species, int formnum, GameVersion version)
{
int gen = pkm.Format <= 2 || pkm.VC ? 2 : pkm.GenNumber;
if (!pkm.InhabitedGeneration(gen, species) || (pkm.PersonalInfo.Gender == 255 && !FixedGenderFromBiGender.Contains(species)))
if (!pkm.InhabitedGeneration(gen, species) || (pkm.PersonalInfo.Genderless && !FixedGenderFromBiGender.Contains(species)))
return Array.Empty<int>();
if (pkm.Version == 15 || pkm.GG)

View file

@ -273,7 +273,7 @@ namespace PKHeX.Core
{
var pi = PersonalTable.B2W2.GetFormeEntry(Species, Form);
pk.Nature = (int)criteria.GetNature((Nature)Nature);
pk.Gender = pi.Gender == 255 ? 2 : Gender != 2 ? Gender : criteria.GetGender(-1, pi);
pk.Gender = pi.Genderless ? 2 : Gender != 2 ? Gender : criteria.GetGender(-1, pi);
var av = GetAbilityIndex(criteria, pi);
SetPID(pk, av);
pk.RefreshAbility(av);

View file

@ -128,15 +128,15 @@ namespace PKHeX.WinForms
GB_Language.Enabled = true;
}
int gt = SAV.Personal[pk].Gender;
var pi = SAV.Personal[pk];
CHK_P2.Enabled = CHK_P4.Enabled = CHK_P6.Enabled = CHK_P8.Enabled = gt != 254; // Not Female-Only
CHK_P3.Enabled = CHK_P5.Enabled = CHK_P7.Enabled = CHK_P9.Enabled = !(gt == 0 || (gt == 255)); // Not Male-Only and Not Genderless
CHK_P2.Enabled = CHK_P4.Enabled = CHK_P6.Enabled = CHK_P8.Enabled = !pi.OnlyFemale;
CHK_P3.Enabled = CHK_P5.Enabled = CHK_P7.Enabled = CHK_P9.Enabled = !(pi.OnlyMale || pi.Genderless);
CLB_FormsSeen.Items.Clear();
CLB_FormDisplayed.Items.Clear();
int fc = SAV.Personal[species].FormeCount;
int fc = pi.FormeCount;
int f = SAV is SAV5B2W2 ? DexFormUtil.GetDexFormIndexB2W2(species, fc) : DexFormUtil.GetDexFormIndexBW(species, fc);
if (f < 0)
return;

View file

@ -356,27 +356,25 @@ namespace PKHeX.WinForms
{
// Get Gender Threshold
int species = WinFormsUtil.GetIndex(CB_Species);
int gt = SAV.Personal[species].Gender;
var pi = SAV.Personal[species];
if (gt == 255)
Label_Gender.Text = gendersymbols[2];
else if (gt == 254)
Label_Gender.Text = gendersymbols[1];
else if (gt == 0)
Label_Gender.Text = gendersymbols[0];
if (gt == 255 || gt == 0 || gt == 254) // Single gender/genderless abort
return;
if (gt < 256) // If not a single gender(less) species:
var fg = pi.FixedGender;
if (fg == -1) // dual gender
{
Label_Gender.Text = PKX.GetGenderFromString(Label_Gender.Text) == 0 ? gendersymbols[1] : gendersymbols[0];
if (PKX.GetGenderFromString(CB_Form.Text) == 0 && Label_Gender.Text != gendersymbols[0])
CB_Form.SelectedIndex = 1;
else if (PKX.GetGenderFromString(CB_Form.Text) == 1 && Label_Gender.Text != gendersymbols[1])
CB_Form.SelectedIndex = 0;
fg = PKX.GetGenderFromString(Label_Gender.Text);
fg = (fg ^ 1) & 1;
Label_Gender.Text = Main.GenderSymbols[fg];
}
else
{
Label_Gender.Text = Main.GenderSymbols[fg];
return;
}
if (PKX.GetGenderFromString(CB_Form.Text) == 0 && Label_Gender.Text != gendersymbols[0])
CB_Form.SelectedIndex = 1;
else if (PKX.GetGenderFromString(CB_Form.Text) == 1 && Label_Gender.Text != gendersymbols[1])
CB_Form.SelectedIndex = 0;
if (species == (int)Species.Pyroar)
CB_Form.SelectedIndex = PKX.GetGenderFromString(Label_Gender.Text);

View file

@ -122,17 +122,17 @@ namespace PKHeX.WinForms
for (int i = 0; i < CL.Length; i++)
CL[i].Checked = Zukan.GetLanguageFlag(species - 1, i);
int gt = SAV.Personal[pk].Gender;
var pi = SAV.Personal[pk];
CHK_P2.Enabled = CHK_P4.Enabled = CHK_P6.Enabled = CHK_P8.Enabled = gt != 254; // Not Female-Only
CHK_P3.Enabled = CHK_P5.Enabled = CHK_P7.Enabled = CHK_P9.Enabled = gt != 0 && gt != 255; // Not Male-Only and Not Genderless
CHK_P2.Enabled = CHK_P4.Enabled = CHK_P6.Enabled = CHK_P8.Enabled = !pi.OnlyFemale;
CHK_P3.Enabled = CHK_P5.Enabled = CHK_P7.Enabled = CHK_P9.Enabled = !(pi.OnlyMale || pi.Genderless);
MT_Count.Text = Zukan.GetEncounterCount(species - 1).ToString();
CLB_FormsSeen.Items.Clear();
CLB_FormDisplayed.Items.Clear();
int fc = SAV.Personal[species].FormeCount;
int fc = pi.FormeCount;
int f = DexFormUtil.GetDexFormIndexORAS(species, fc);
if (f < 0)
return;

View file

@ -132,15 +132,15 @@ namespace PKHeX.WinForms
CHK_F1.Enabled = CHK_F1.Checked = false;
}
int gt = SAV.Personal[pk].Gender;
var pi = SAV.Personal[pk];
CHK_P2.Enabled = CHK_P4.Enabled = CHK_P6.Enabled = CHK_P8.Enabled = gt != 254; // Not Female-Only
CHK_P3.Enabled = CHK_P5.Enabled = CHK_P7.Enabled = CHK_P9.Enabled = !(gt == 0 || (gt == 255)); // Not Male-Only and Not Genderless
CHK_P2.Enabled = CHK_P4.Enabled = CHK_P6.Enabled = CHK_P8.Enabled = !pi.OnlyFemale;
CHK_P3.Enabled = CHK_P5.Enabled = CHK_P7.Enabled = CHK_P9.Enabled = !(pi.OnlyMale || pi.Genderless);
CLB_FormsSeen.Items.Clear();
CLB_FormDisplayed.Items.Clear();
int fc = SAV.Personal[species].FormeCount;
int fc = pi.FormeCount;
int f = DexFormUtil.GetDexFormIndexXY(species, fc);
if (f < 0)
return;

View file

@ -482,14 +482,15 @@ namespace PKHeX.WinForms
private void Label_Gender_Click(object sender, EventArgs e)
{
// Get Gender Threshold
int gt = SAV.Personal[WinFormsUtil.GetIndex(CB_Species)].Gender;
if (gt == 255 || gt == 0 || gt == 254) // Single gender/genderless
return;
if (gt < 256) // If not a single gender(less) species:
Label_Gender.Text = Main.GenderSymbols[PKX.GetGenderFromString(Label_Gender.Text) ^ 1];
var species = WinFormsUtil.GetIndex(CB_Species);
var pi = SAV.Personal[species];
var fg = pi.FixedGender;
if (fg == -1) // dual gender
{
fg = PKX.GetGenderFromString(Label_Gender.Text);
fg = (fg ^ 1) & 1;
}
Label_Gender.Text = Main.GenderSymbols[fg];
}
private void SetGenderLabel()