entree forest updates

clamp species list based on savefile
fix form control index set
remove slot from list (avoid duplicates, there's 530 slots and both
games have more than that available).

Closes #1974
This commit is contained in:
Kurt
2018-05-28 12:49:41 -07:00
parent 4b8cb9b8fb
commit 5475da05c3
2 changed files with 31 additions and 4 deletions

View File

@@ -4,31 +4,54 @@ namespace PKHeX.Core
{
public class EntreeSlot
{
/// <summary>
/// <see cref="PKM.Species"/> index
/// </summary>
public int Species // bits 0-10
{
get => (int)(RawValue & 0x3FF) >> 0;
set => RawValue = (RawValue & 0xFFFF_F800) | ((uint)(value & 0x3FF) << 0);
}
/// <summary>
/// Special Move
/// </summary>
public int Move // bits 11-20
{
get => (int)(RawValue & 0x001F_F800) >> 11;
set => RawValue = (RawValue & 0xFFF0_02FF) | ((uint)(value & 0x3FF) << 11);
set => RawValue = (RawValue & 0xFFE0_07FF) | ((uint)(value & 0x3FF) << 11);
}
/// <summary>
/// <see cref="PKM.Gender"/> index
/// </summary>
public int Gender // bits 21-22
{
get => (int)(RawValue & 0x0060_0000) >> 21;
set => RawValue = (RawValue & 0xFF9F_FFFF) | ((uint)(value & 0x3) << 21);
}
/// <summary>
/// <see cref="PKM.AltForm"/> index
/// </summary>
public int Form // bits 23-27
{
get => (int)(RawValue & 0x0F80_0000) >> 23;
set => RawValue = (RawValue & 0xF07F_FFFF) | ((uint)(value & 0x1F) << 23);
}
/// <summary>
/// Visibility Flag
/// </summary>
public bool Invisible // bit 28
{
get => ((RawValue >> 28) & 1) == 1;
set => RawValue = (RawValue & 0xEFFFFFFF) | (value ? 0 : 1u << 28);
}
/// <summary>
/// Animation Leash (How many steps it can deviate from its spawn location).
/// </summary>
public int Animation // bits 29-31
{
get => (int)(RawValue >> 29);
@@ -38,6 +61,9 @@ public class EntreeSlot
private readonly byte[] Data;
private readonly int Offset;
/// <summary>
/// Raw Data Value
/// </summary>
public uint RawValue
{
get => BitConverter.ToUInt32(Data, Offset);

View File

@@ -541,8 +541,8 @@ private void LoadForest()
CB_Move.ValueMember = nameof(ComboItem.Value);
CB_Areas.ValueMember = nameof(ComboItem.Value);
CB_Species.DataSource = new BindingSource(GameInfo.Strings.SpeciesDataSource, null);
CB_Move.DataSource = new BindingSource(GameInfo.Strings.MoveDataSource, null);
CB_Species.DataSource = new BindingSource(GameInfo.SpeciesDataSource.Where(s => s.Value <= SAV.MaxSpeciesID).ToList(), null);
CB_Move.DataSource = new BindingSource(GameInfo.MoveDataSource, null);
CB_Areas.DataSource = new BindingSource(areas, null);
CB_Areas.SelectedIndex = 0;
@@ -574,7 +574,7 @@ private void ChangeSlot(object sender, EventArgs e)
SetGenders(current);
CB_Move.SelectedValue = current.Move;
CB_Gender.SelectedValue = current.Gender;
CB_Form.SelectedValue = current.Form;
CB_Form.SelectedIndex = current.Form;
CurrentSlot = current;
SetSprite(current);
}
@@ -624,6 +624,7 @@ private void B_RandForest_Click(object sender, EventArgs e)
{
int r = Util.Rand.Next(source.Count);
var slot = source[r];
source.Remove(slot);
s.Species = slot.Species;
s.Form = slot.Form;
s.Move = slot.Moves?[Util.Rand.Next(slot.Moves.Length)] ?? 0;