diff --git a/PKHeX.Core/PKM/Enums/StatusCondition.cs b/PKHeX.Core/PKM/Enums/StatusCondition.cs
index 1f6c7a5d2..8caf91081 100644
--- a/PKHeX.Core/PKM/Enums/StatusCondition.cs
+++ b/PKHeX.Core/PKM/Enums/StatusCondition.cs
@@ -2,6 +2,12 @@
namespace PKHeX.Core;
+///
+/// Status condition flags for Generation 1-4.
+///
+///
+/// Bad poison is only stored outside of battle in Generation 3 and 4.
+///
[Flags]
public enum StatusCondition
{
@@ -23,6 +29,19 @@ public enum StatusCondition
PoisonBad = 1 << 7,
}
+///
+/// Status condition enum for Generation 5+.
+///
+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,
-}
diff --git a/PKHeX.Drawing.PokeSprite/Util/SpriteUtil.cs b/PKHeX.Drawing.PokeSprite/Util/SpriteUtil.cs
index 1d8d75568..480426087 100644
--- a/PKHeX.Drawing.PokeSprite/Util/SpriteUtil.cs
+++ b/PKHeX.Drawing.PokeSprite/Util/SpriteUtil.cs
@@ -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,
+ };
+ }
}
diff --git a/PKHeX.WinForms/Controls/PKM Editor/StatusBrowser.cs b/PKHeX.WinForms/Controls/PKM Editor/StatusBrowser.cs
index f68e04258..212f2f2da 100644
--- a/PKHeX.WinForms/Controls/PKM Editor/StatusBrowser.cs
+++ b/PKHeX.WinForms/Controls/PKM Editor/StatusBrowser.cs
@@ -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;
diff --git a/PKHeX.WinForms/Controls/PKM Editor/StatusConditionView.cs b/PKHeX.WinForms/Controls/PKM Editor/StatusConditionView.cs
index 186bc5d47..f5cf3383f 100644
--- a/PKHeX.WinForms/Controls/PKM Editor/StatusConditionView.cs
+++ b/PKHeX.WinForms/Controls/PKM Editor/StatusConditionView.cs
@@ -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();
}
diff --git a/PKHeX.WinForms/Resources/text/lang_de.txt b/PKHeX.WinForms/Resources/text/lang_de.txt
index 0f37da30f..3ce647ee4 100644
--- a/PKHeX.WinForms/Resources/text/lang_de.txt
+++ b/PKHeX.WinForms/Resources/text/lang_de.txt
@@ -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
diff --git a/PKHeX.WinForms/Resources/text/lang_en.txt b/PKHeX.WinForms/Resources/text/lang_en.txt
index 19f15938b..b0d0a1988 100644
--- a/PKHeX.WinForms/Resources/text/lang_en.txt
+++ b/PKHeX.WinForms/Resources/text/lang_en.txt
@@ -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
diff --git a/PKHeX.WinForms/Resources/text/lang_es.txt b/PKHeX.WinForms/Resources/text/lang_es.txt
index c028c2275..40f1b8013 100644
--- a/PKHeX.WinForms/Resources/text/lang_es.txt
+++ b/PKHeX.WinForms/Resources/text/lang_es.txt
@@ -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
diff --git a/PKHeX.WinForms/Resources/text/lang_fr.txt b/PKHeX.WinForms/Resources/text/lang_fr.txt
index d6bbf597f..7a4dfc193 100644
--- a/PKHeX.WinForms/Resources/text/lang_fr.txt
+++ b/PKHeX.WinForms/Resources/text/lang_fr.txt
@@ -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
diff --git a/PKHeX.WinForms/Resources/text/lang_it.txt b/PKHeX.WinForms/Resources/text/lang_it.txt
index 63f3cdf65..954dab640 100644
--- a/PKHeX.WinForms/Resources/text/lang_it.txt
+++ b/PKHeX.WinForms/Resources/text/lang_it.txt
@@ -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
diff --git a/PKHeX.WinForms/Resources/text/lang_ja.txt b/PKHeX.WinForms/Resources/text/lang_ja.txt
index c7d29b413..c45481c9c 100644
--- a/PKHeX.WinForms/Resources/text/lang_ja.txt
+++ b/PKHeX.WinForms/Resources/text/lang_ja.txt
@@ -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=全て消去
diff --git a/PKHeX.WinForms/Resources/text/lang_ko.txt b/PKHeX.WinForms/Resources/text/lang_ko.txt
index b68a3d59a..401566320 100644
--- a/PKHeX.WinForms/Resources/text/lang_ko.txt
+++ b/PKHeX.WinForms/Resources/text/lang_ko.txt
@@ -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=모두 제거
diff --git a/PKHeX.WinForms/Resources/text/lang_zh-Hans.txt b/PKHeX.WinForms/Resources/text/lang_zh-Hans.txt
index 399b0e5eb..a2a858d7a 100644
--- a/PKHeX.WinForms/Resources/text/lang_zh-Hans.txt
+++ b/PKHeX.WinForms/Resources/text/lang_zh-Hans.txt
@@ -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=全部清除
diff --git a/PKHeX.WinForms/Resources/text/lang_zh-Hant.txt b/PKHeX.WinForms/Resources/text/lang_zh-Hant.txt
index e295df01f..bb79f9977 100644
--- a/PKHeX.WinForms/Resources/text/lang_zh-Hant.txt
+++ b/PKHeX.WinForms/Resources/text/lang_zh-Hant.txt
@@ -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=全部清除
diff --git a/PKHeX.WinForms/Util/DevUtil.cs b/PKHeX.WinForms/Util/DevUtil.cs
index 51f03bc6a..ae0e05aff 100644
--- a/PKHeX.WinForms/Util/DevUtil.cs
+++ b/PKHeX.WinForms/Util/DevUtil.cs
@@ -176,6 +176,7 @@ private static void UpdateTranslations()
private static readonly Type[] EnumTypesToTranslate =
[
typeof(StatusCondition),
+ typeof(StatusType),
typeof(PokeSize),
typeof(PokeSizeDetailed),