mirror of
https://github.com/kwsch/PKHeX.git
synced 2026-10-02 05:53:07 -05:00
Correct Gen 5+ status conditions (#4558)
This commit is contained in:
@@ -2,6 +2,12 @@
|
||||
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Status condition flags for Generation 1-4.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Bad poison is only stored outside of battle in Generation 3 and 4.
|
||||
/// </remarks>
|
||||
[Flags]
|
||||
public enum StatusCondition
|
||||
{
|
||||
@@ -23,6 +29,19 @@ public enum StatusCondition
|
||||
PoisonBad = 1 << 7,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Status condition enum for Generation 5+.
|
||||
/// </summary>
|
||||
public enum StatusType
|
||||
{
|
||||
None = 0,
|
||||
Paralysis = 1,
|
||||
Sleep = 2,
|
||||
Freeze = 3,
|
||||
Burn = 4,
|
||||
Poison = 5,
|
||||
}
|
||||
|
||||
public static class StatusConditionUtil
|
||||
{
|
||||
public static StatusType GetStatusType(this PKM pk)
|
||||
@@ -50,13 +69,3 @@ public static StatusType GetStatusType(this StatusCondition value)
|
||||
return StatusType.None;
|
||||
}
|
||||
}
|
||||
|
||||
public enum StatusType
|
||||
{
|
||||
None = 0,
|
||||
Sleep = 1,
|
||||
Poison = 2,
|
||||
Burn = 3,
|
||||
Freeze = 4,
|
||||
Paralysis = 5,
|
||||
}
|
||||
|
||||
@@ -333,4 +333,18 @@ public static Bitmap GetMysteryGiftPreviewPoke(MysteryGift gift)
|
||||
return Resources.sickfrostbite;
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Image? GetStatusSprite(this StatusType value)
|
||||
{
|
||||
return value switch
|
||||
{
|
||||
StatusType.None => null,
|
||||
StatusType.Paralysis => Resources.sickparalyze,
|
||||
StatusType.Sleep => Resources.sicksleep,
|
||||
StatusType.Freeze => Resources.sickfrostbite,
|
||||
StatusType.Burn => Resources.sickburn,
|
||||
StatusType.Poison => Resources.sickpoison,
|
||||
_ => null,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ public partial class StatusBrowser : Form
|
||||
private int StatusWidth => StatusHeight;
|
||||
private int StatusBrowserWidth => StatusWidth * 2;
|
||||
|
||||
public StatusBrowser()
|
||||
public StatusBrowser(int generation)
|
||||
{
|
||||
InitializeComponent();
|
||||
StatusHeight = Drawing.PokeSprite.Properties.Resources.sicksleep.Height;
|
||||
@@ -33,13 +33,15 @@ public StatusBrowser()
|
||||
};
|
||||
|
||||
Add(GetImage(StatusCondition.None, "None"));
|
||||
Add(GetImage(StatusCondition.Sleep1, "Sleep"), false);
|
||||
Add(NUD_Sleep);
|
||||
Add(GetImage(StatusCondition.Sleep1, "Sleep"), generation >= 5);
|
||||
if (generation <= 4)
|
||||
Add(NUD_Sleep);
|
||||
Add(GetImage(StatusCondition.Poison, "Poison"));
|
||||
Add(GetImage(StatusCondition.Burn, "Burn"));
|
||||
Add(GetImage(StatusCondition.Paralysis, "Paralysis"));
|
||||
Add(GetImage(StatusCondition.Freeze, "Freeze"));
|
||||
Add(GetImage(StatusCondition.PoisonBad, "Toxic"));
|
||||
if (generation is 3 or 4)
|
||||
Add(GetImage(StatusCondition.PoisonBad, "Toxic"));
|
||||
|
||||
Height = StatusCount * StatusHeight;
|
||||
Width = StatusBrowserWidth;
|
||||
|
||||
@@ -39,7 +39,7 @@ public void LoadStoredValues()
|
||||
else if (pk.Stat_HPCurrent == 0)
|
||||
SetFaint();
|
||||
else
|
||||
SetStatus((StatusCondition)(pk.Status_Condition & 0xFF));
|
||||
SetStatus(pk.Status_Condition, pk.Format);
|
||||
Loading = false;
|
||||
}
|
||||
|
||||
@@ -55,25 +55,38 @@ private void ClearStatus()
|
||||
Hover.RemoveAll();
|
||||
}
|
||||
|
||||
private void SetStatus(StatusCondition status)
|
||||
private void SetStatus(int value, int generation)
|
||||
{
|
||||
PB_Status.Image = status.GetStatusSprite();
|
||||
if (generation <= 4)
|
||||
{
|
||||
StatusCondition status = (StatusCondition)(value & 0xFF);
|
||||
PB_Status.Image = status.GetStatusSprite();
|
||||
|
||||
var text = WinFormsTranslator.TranslateEnum(status, Main.CurrentLanguage);
|
||||
Hover.SetToolTip(PB_Status, $"Status Condition: {text}");
|
||||
var text = WinFormsTranslator.TranslateEnum(status, Main.CurrentLanguage);
|
||||
Hover.SetToolTip(PB_Status, $"Status Condition: {text}");
|
||||
}
|
||||
else
|
||||
{
|
||||
StatusType status = (StatusType)(value & 0xFF);
|
||||
PB_Status.Image = status.GetStatusSprite();
|
||||
|
||||
var text = WinFormsTranslator.TranslateEnum(status, Main.CurrentLanguage);
|
||||
Hover.SetToolTip(PB_Status, $"Status Condition: {text}");
|
||||
}
|
||||
}
|
||||
|
||||
private void PB_Status_Click(object sender, EventArgs e)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(pk);
|
||||
using var form = new StatusBrowser();
|
||||
int generation = pk.Format;
|
||||
using var form = new StatusBrowser(generation);
|
||||
form.LoadList(pk);
|
||||
form.ShowDialog();
|
||||
if (!form.WasChosen)
|
||||
return;
|
||||
var current = pk.Status_Condition;
|
||||
current &= ~0xFF;
|
||||
current |= (int)form.Choice;
|
||||
current |= generation <= 4 ? (int)form.Choice : (int)form.Choice.GetStatusType();
|
||||
pk.Status_Condition = current;
|
||||
LoadStoredValues();
|
||||
}
|
||||
|
||||
@@ -2553,6 +2553,12 @@ StatusCondition.Sleep4=Sleep (4 Turn)
|
||||
StatusCondition.Sleep5=Sleep (5 Turn)
|
||||
StatusCondition.Sleep6=Sleep (6 Turn)
|
||||
StatusCondition.Sleep7=Sleep (7 Turn)
|
||||
StatusType.Burn=Burn
|
||||
StatusType.Freeze=Freeze
|
||||
StatusType.None=None
|
||||
StatusType.Paralysis=Paralysis
|
||||
StatusType.Poison=Poison
|
||||
StatusType.Sleep=Sleep
|
||||
SuperTrainingEditor.B_All=Alle
|
||||
SuperTrainingEditor.B_Cancel=Abbrechen
|
||||
SuperTrainingEditor.B_None=Keine
|
||||
|
||||
@@ -2553,6 +2553,12 @@ StatusCondition.Sleep4=Sleep (4 Turn)
|
||||
StatusCondition.Sleep5=Sleep (5 Turn)
|
||||
StatusCondition.Sleep6=Sleep (6 Turn)
|
||||
StatusCondition.Sleep7=Sleep (7 Turn)
|
||||
StatusType.Burn=Burn
|
||||
StatusType.Freeze=Freeze
|
||||
StatusType.None=None
|
||||
StatusType.Paralysis=Paralysis
|
||||
StatusType.Poison=Poison
|
||||
StatusType.Sleep=Sleep
|
||||
SuperTrainingEditor.B_All=Give All
|
||||
SuperTrainingEditor.B_Cancel=Cancel
|
||||
SuperTrainingEditor.B_None=Remove All
|
||||
|
||||
@@ -2553,6 +2553,12 @@ StatusCondition.Sleep4=Sleep (4 Turn)
|
||||
StatusCondition.Sleep5=Sleep (5 Turn)
|
||||
StatusCondition.Sleep6=Sleep (6 Turn)
|
||||
StatusCondition.Sleep7=Sleep (7 Turn)
|
||||
StatusType.Burn=Burn
|
||||
StatusType.Freeze=Freeze
|
||||
StatusType.None=None
|
||||
StatusType.Paralysis=Paralysis
|
||||
StatusType.Poison=Poison
|
||||
StatusType.Sleep=Sleep
|
||||
SuperTrainingEditor.B_All=Dar todos
|
||||
SuperTrainingEditor.B_Cancel=Cancelar
|
||||
SuperTrainingEditor.B_None=Quitar todos
|
||||
|
||||
@@ -2553,6 +2553,12 @@ StatusCondition.Sleep4=Sleep (4 Turn)
|
||||
StatusCondition.Sleep5=Sleep (5 Turn)
|
||||
StatusCondition.Sleep6=Sleep (6 Turn)
|
||||
StatusCondition.Sleep7=Sleep (7 Turn)
|
||||
StatusType.Burn=Burn
|
||||
StatusType.Freeze=Freeze
|
||||
StatusType.None=None
|
||||
StatusType.Paralysis=Paralysis
|
||||
StatusType.Poison=Poison
|
||||
StatusType.Sleep=Sleep
|
||||
SuperTrainingEditor.B_All=Tout donner
|
||||
SuperTrainingEditor.B_Cancel=Annuler
|
||||
SuperTrainingEditor.B_None=Tout retirer
|
||||
|
||||
@@ -2553,6 +2553,12 @@ StatusCondition.Sleep4=Sleep (4 Turn)
|
||||
StatusCondition.Sleep5=Sleep (5 Turn)
|
||||
StatusCondition.Sleep6=Sleep (6 Turn)
|
||||
StatusCondition.Sleep7=Sleep (7 Turn)
|
||||
StatusType.Burn=Burn
|
||||
StatusType.Freeze=Freeze
|
||||
StatusType.None=None
|
||||
StatusType.Paralysis=Paralysis
|
||||
StatusType.Poison=Poison
|
||||
StatusType.Sleep=Sleep
|
||||
SuperTrainingEditor.B_All=Dai Tutto
|
||||
SuperTrainingEditor.B_Cancel=Annulla
|
||||
SuperTrainingEditor.B_None=Rimuovi Tutto
|
||||
|
||||
@@ -2553,6 +2553,12 @@ StatusCondition.Sleep4=Sleep (4 Turn)
|
||||
StatusCondition.Sleep5=Sleep (5 Turn)
|
||||
StatusCondition.Sleep6=Sleep (6 Turn)
|
||||
StatusCondition.Sleep7=Sleep (7 Turn)
|
||||
StatusType.Burn=Burn
|
||||
StatusType.Freeze=Freeze
|
||||
StatusType.None=None
|
||||
StatusType.Paralysis=Paralysis
|
||||
StatusType.Poison=Poison
|
||||
StatusType.Sleep=Sleep
|
||||
SuperTrainingEditor.B_All=全て取得
|
||||
SuperTrainingEditor.B_Cancel=キャンセル
|
||||
SuperTrainingEditor.B_None=全て消去
|
||||
|
||||
@@ -2553,6 +2553,12 @@ StatusCondition.Sleep4=Sleep (4 Turn)
|
||||
StatusCondition.Sleep5=Sleep (5 Turn)
|
||||
StatusCondition.Sleep6=Sleep (6 Turn)
|
||||
StatusCondition.Sleep7=Sleep (7 Turn)
|
||||
StatusType.Burn=Burn
|
||||
StatusType.Freeze=Freeze
|
||||
StatusType.None=None
|
||||
StatusType.Paralysis=Paralysis
|
||||
StatusType.Poison=Poison
|
||||
StatusType.Sleep=Sleep
|
||||
SuperTrainingEditor.B_All=모두 주기
|
||||
SuperTrainingEditor.B_Cancel=취소
|
||||
SuperTrainingEditor.B_None=모두 제거
|
||||
|
||||
@@ -2553,6 +2553,12 @@ StatusCondition.Sleep4=睡眠(4回合)
|
||||
StatusCondition.Sleep5=睡眠(5回合)
|
||||
StatusCondition.Sleep6=睡眠(6回合)
|
||||
StatusCondition.Sleep7=睡眠(7回合)
|
||||
StatusType.Burn=灼伤
|
||||
StatusType.Freeze=冰冻
|
||||
StatusType.None=无
|
||||
StatusType.Paralysis=麻痹
|
||||
StatusType.Poison=中毒
|
||||
StatusType.Sleep=睡眠
|
||||
SuperTrainingEditor.B_All=获得全部
|
||||
SuperTrainingEditor.B_Cancel=取消
|
||||
SuperTrainingEditor.B_None=全部清除
|
||||
|
||||
@@ -2553,6 +2553,12 @@ StatusCondition.Sleep4=Sleep (4 Turn)
|
||||
StatusCondition.Sleep5=Sleep (5 Turn)
|
||||
StatusCondition.Sleep6=Sleep (6 Turn)
|
||||
StatusCondition.Sleep7=Sleep (7 Turn)
|
||||
StatusType.Burn=Burn
|
||||
StatusType.Freeze=Freeze
|
||||
StatusType.None=None
|
||||
StatusType.Paralysis=Paralysis
|
||||
StatusType.Poison=Poison
|
||||
StatusType.Sleep=Sleep
|
||||
SuperTrainingEditor.B_All=獲得全部
|
||||
SuperTrainingEditor.B_Cancel=取消
|
||||
SuperTrainingEditor.B_None=全部清除
|
||||
|
||||
@@ -176,6 +176,7 @@ private static void UpdateTranslations()
|
||||
private static readonly Type[] EnumTypesToTranslate =
|
||||
[
|
||||
typeof(StatusCondition),
|
||||
typeof(StatusType),
|
||||
typeof(PokeSize),
|
||||
typeof(PokeSizeDetailed),
|
||||
|
||||
|
||||
Reference in New Issue
Block a user