mirror of
https://github.com/kwsch/PKHeX.git
synced 2026-09-07 23:08:47 -05:00
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:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user