diff --git a/PKHeX.Core/Editing/Saves/BoxManipulator.cs b/PKHeX.Core/Editing/Saves/BoxManipulator.cs
index 3b54394db..16c197528 100644
--- a/PKHeX.Core/Editing/Saves/BoxManipulator.cs
+++ b/PKHeX.Core/Editing/Saves/BoxManipulator.cs
@@ -67,6 +67,7 @@ public bool Execute(BoxManipType type, int box, bool allBoxes, bool reverse = fa
///
/// Optional message to show if applicable.
/// Indicates if all boxes were manipulated, or just one box.
+ /// Count of manipulated slots
protected abstract void FinishBoxManipulation(string message, bool all, int count);
}
}
diff --git a/PKHeX.Core/Legality/Encounters/Verifiers/VerifyCurrentMoves.cs b/PKHeX.Core/Legality/Encounters/Verifiers/VerifyCurrentMoves.cs
index 3c3a0b6ef..d5fd60555 100644
--- a/PKHeX.Core/Legality/Encounters/Verifiers/VerifyCurrentMoves.cs
+++ b/PKHeX.Core/Legality/Encounters/Verifiers/VerifyCurrentMoves.cs
@@ -90,7 +90,7 @@ private static CheckMoveResult[] ParseMovesForSmeargle(PKM pkm, int[] Moves, Leg
private static CheckMoveResult[] ParseMovesIsEggPreRelearn(PKM pkm, int[] Moves, int[] SpecialMoves, EncounterEgg e)
{
- EggInfoSource infoset = new EggInfoSource(pkm, SpecialMoves, e);
+ var infoset = new EggInfoSource(pkm, SpecialMoves, e);
return VerifyPreRelearnEggBase(pkm, Moves, infoset);
}
@@ -155,7 +155,7 @@ private static CheckMoveResult[] ParseMovesPre3DS(PKM pkm, int[] Moves, LegalInf
{
if (pkm.IsEgg && info.EncounterMatch is EncounterEgg egg)
{
- int[] SpecialMoves = GetSpecialMoves(info.EncounterMatch);
+ var SpecialMoves = GetSpecialMoves(info.EncounterMatch);
return ParseMovesIsEggPreRelearn(pkm, Moves, SpecialMoves, egg);
}
if (info.EncounterMatch is EncounterEgg e)
@@ -168,12 +168,12 @@ private static CheckMoveResult[] ParseMovesPre3DS(PKM pkm, int[] Moves, LegalInf
private static CheckMoveResult[] ParseMovesGenGB(PKM pkm, int[] Moves, LegalInfo info)
{
- CheckMoveResult[] res = new CheckMoveResult[4];
+ var res = new CheckMoveResult[4];
var G1Encounter = info.EncounterMatch;
if (G1Encounter == null)
return ParseMovesSpecialMoveset(pkm, Moves, info);
var InitialMoves = Array.Empty();
- int[] SpecialMoves = GetSpecialMoves(info.EncounterMatch);
+ var SpecialMoves = GetSpecialMoves(info.EncounterMatch);
var games = info.EncounterMatch is IGeneration g && g.Generation == 1 ? GBRestrictions.GetGen1Versions(info) : GBRestrictions.GetGen2Versions(info);
foreach (var ver in games)
{
@@ -223,12 +223,11 @@ private static CheckMoveResult[] ParseMovesRelearn(PKM pkm, int[] Moves, LegalIn
if (info.EncounterMatch is EncounterEgg e)
source.EggMoveSource = MoveEgg.GetEggMoves(pkm, e.Species, pkm.AltForm, e.Version);
- CheckMoveResult[] res = ParseMoves(pkm, source, info);
-
- int[] RelearnMoves = pkm.RelearnMoves;
+ var res = ParseMoves(pkm, source, info);
+ var relearn = pkm.RelearnMoves;
for (int i = 0; i < 4; i++)
{
- if ((pkm.IsEgg || res[i].Flag) && !RelearnMoves.Contains(Moves[i]))
+ if ((pkm.IsEgg || res[i].Flag) && !relearn.Contains(Moves[i]))
res[i] = new CheckMoveResult(res[i], Invalid, string.Format(LMoveRelearnFMiss_0, res[i].Comment), res[i].Identifier);
}
@@ -237,7 +236,7 @@ private static CheckMoveResult[] ParseMovesRelearn(PKM pkm, int[] Moves, LegalIn
private static CheckMoveResult[] ParseMoves(PKM pkm, MoveParseSource source, LegalInfo info)
{
- CheckMoveResult[] res = new CheckMoveResult[4];
+ var res = new CheckMoveResult[4];
bool AllParsed() => res.All(z => z != null);
var required = pkm.Format != 1 ? 1 : GBRestrictions.GetRequiredMoveCount(pkm, source.CurrentMoves, info, source.Base);
@@ -289,21 +288,21 @@ private static void ParseMovesByGeneration(PKM pkm, CheckMoveResult[] res, int g
switch (gen)
{
- case 3:
- case 4:
- if (pkm.Format > gen)
- FlagIncompatibleTransferHMs(res, learnInfo.Source.CurrentMoves, gen, HMLearned, KnowDefogWhirlpool);
- break;
-
case 1:
case 2:
ParseMovesByGeneration12(pkm, res, learnInfo.Source.CurrentMoves, gen, info, learnInfo);
break;
+
+ case 3:
+ case 4:
+ if (pkm.Format > gen)
+ FlagIncompatibleTransferHMs45(res, learnInfo.Source.CurrentMoves, gen, HMLearned, KnowDefogWhirlpool);
+ break;
}
// Pokemon that evolved by leveling up while learning a specific move
// This pokemon could only have 3 moves from preevolutions that are not the move used to evolved
- // including special and eggs moves before realearn generations
+ // including special and eggs moves before relearn generations
if (Legal.SpeciesEvolutionWithMove.Contains(pkm.Species))
ParseEvolutionLevelupMove(pkm, res, learnInfo.Source.CurrentMoves, info);
}
@@ -422,15 +421,16 @@ private static void ParseEggMoves(PKM pkm, CheckMoveResult[] res, int gen, Learn
{
if (IsCheckValid(res[m]))
continue;
- if (moves[m] == 0)
+ int move = moves[m];
+ if (move == 0)
continue;
- bool wasEggMove = learnInfo.Source.EggMoveSource.Contains(moves[m]);
+ bool wasEggMove = learnInfo.Source.EggMoveSource.Contains(move);
if (wasEggMove)
{
// To learn exclusive generation 1 moves the pokemon was tradeback, but it can't be trade to generation 1
// without removing moves above MaxMoveID_1, egg moves above MaxMoveID_1 and gen 1 moves are incompatible
- if (learnInfo.IsGen2Pkm && learnInfo.Gen1Moves.Count != 0 && moves[m] > Legal.MaxMoveID_1)
+ if (learnInfo.IsGen2Pkm && learnInfo.Gen1Moves.Count != 0 && move > Legal.MaxMoveID_1)
{
res[m] = new CheckMoveResult(EggMove, gen, Invalid, LG1MoveTradeback, Move);
learnInfo.MixedGen12NonTradeback = true;
@@ -444,12 +444,12 @@ private static void ParseEggMoves(PKM pkm, CheckMoveResult[] res, int gen, Learn
if (pkm.TradebackStatus == TradebackType.Any && pkm.GenNumber == 1)
pkm.TradebackStatus = TradebackType.WasTradeback;
}
- if (!learnInfo.Source.EggEventSource.Contains(moves[m]))
+ if (!learnInfo.Source.EggEventSource.Contains(move))
continue;
if (!wasEggMove)
{
- if (learnInfo.IsGen2Pkm && learnInfo.Gen1Moves.Count != 0 && moves[m] > Legal.MaxMoveID_1)
+ if (learnInfo.IsGen2Pkm && learnInfo.Gen1Moves.Count != 0 && move > Legal.MaxMoveID_1)
{
res[m] = new CheckMoveResult(SpecialEgg, gen, Invalid, LG1MoveTradeback, Move);
learnInfo.MixedGen12NonTradeback = true;
@@ -685,7 +685,7 @@ void IsHMSource(IList flags, ICollection source)
private static bool IsCheckInvalid(CheckResult chk) => !(chk?.Valid ?? false);
private static bool IsCheckValid(CheckResult chk) => chk?.Valid ?? false;
- private static void FlagIncompatibleTransferHMs(CheckMoveResult[] res, int[] moves, int gen, bool[] HMLearned, bool KnowDefogWhirlpool)
+ private static void FlagIncompatibleTransferHMs45(CheckMoveResult[] res, int[] moves, int gen, bool[] HMLearned, bool KnowDefogWhirlpool)
{
// After all the moves from the generations 3 and 4,
// including egg moves if is the origin generation because some hidden moves are also special egg moves in gen 3
diff --git a/PKHeX.Core/PKM/PKM.cs b/PKHeX.Core/PKM/PKM.cs
index 02f95a95d..01ddbd2a5 100644
--- a/PKHeX.Core/PKM/PKM.cs
+++ b/PKHeX.Core/PKM/PKM.cs
@@ -282,13 +282,13 @@ private byte[] Write()
public int DisplayTID
{
get => GenNumber >= 7 ? TrainerID7 : TID;
- set => _ = GenNumber >= 7 ? (TrainerID7 = value) : (TID = value);
+ set { if (GenNumber >= 7) TrainerID7 = value; else TID = value; }
}
public int DisplaySID
{
get => GenNumber >= 7 ? TrainerSID7 : SID;
- set => _ = GenNumber >= 7 ? (TrainerSID7 = value) : (SID = value);
+ set { if (GenNumber >= 7) TrainerSID7 = value; else SID = value; }
}
private void SetID7(int sid7, int tid7)
diff --git a/PKHeX.Core/Saves/Substructures/Gen3/SecretBase3Team.cs b/PKHeX.Core/Saves/Substructures/Gen3/SecretBase3Team.cs
index df813eac5..43ae532d1 100644
--- a/PKHeX.Core/Saves/Substructures/Gen3/SecretBase3Team.cs
+++ b/PKHeX.Core/Saves/Substructures/Gen3/SecretBase3Team.cs
@@ -53,7 +53,7 @@ private SecretBase3PKM GetPKM(int i)
private void SetPKM(int i)
{
var pk = Team[i];
- BitConverter.GetBytes((uint) pk.PID).CopyTo(Data, GetOffsetPID(i));
+ BitConverter.GetBytes(pk.PID).CopyTo(Data, GetOffsetPID(i));
BitConverter.GetBytes((ushort)pk.Species).CopyTo(Data, GetOffsetSpecies(i));
BitConverter.GetBytes((ushort)pk.HeldItem).CopyTo(Data, GetOffsetItem(i));
BitConverter.GetBytes((ushort)pk.Move1).CopyTo(Data, GetOffsetMove(i, 0));
@@ -62,8 +62,6 @@ private void SetPKM(int i)
BitConverter.GetBytes((ushort)pk.Move4).CopyTo(Data, GetOffsetMove(i, 3));
Data[O_Level + i] = (byte) pk.Level;
Data[O_EV + i] = (byte) pk.EVAll;
-
- BitConverter.GetBytes((uint) pk.PID).CopyTo(Data, GetOffsetPID(i));
}
}
}
\ No newline at end of file
diff --git a/PKHeX.Core/Saves/Substructures/Gen6/TrainerSprite6.cs b/PKHeX.Core/Saves/Substructures/Gen6/TrainerSprite6.cs
new file mode 100644
index 000000000..a9ba2cc8b
--- /dev/null
+++ b/PKHeX.Core/Saves/Substructures/Gen6/TrainerSprite6.cs
@@ -0,0 +1,83 @@
+namespace PKHeX.Core
+{
+ public enum TrainerSprite6
+ {
+ Calem = 00,
+ Serena = 01,
+ Sycamore = 02,
+ Diantha = 03,
+ Wikstrom = 04,
+ Malva = 05,
+ Drasna = 06,
+ Siebold = 07,
+ Viola = 08,
+ Grant = 09,
+ Korrina = 10,
+ Ramos = 11,
+ Clemont = 12,
+ Valerie = 13,
+ Olympia = 14,
+ Wulfric = 15,
+ Youngster_XY = 16,
+ // Unused 17
+ Lass_XY = 18,
+ Lady_XY = 19,
+ Schoolgirl_XY = 20,
+ Battle_Girl_XY = 21,
+ Schoolboy_XY = 22,
+ Rich_Boy_XY = 23,
+ Female_Ace_Trainer_XY = 24,
+ // Unused 25
+ Female_Ranger_XY = 26,
+ Male_Ace_Trainer_XY = 27,
+ Male_Ranger_XY = 28,
+ Madame = 29,
+ Monsieur = 30,
+ Black_Belt_XY = 31,
+ Male_Punk_XY = 32,
+ Fairy_Tale_Girl_XY = 33,
+ Shauna = 34,
+ Tierno = 35,
+ Trevor = 36,
+ Brendan = 37,
+ May = 38,
+ // Unused 39
+ Hiker = 40,
+ Aroma_Lady = 41,
+ Male_Schoolkid = 42,
+ Female_Schoolkid = 43,
+ Black_Belt_ORAS = 44,
+ Battle_Girl_ORAS = 45,
+ Pokemaniac_ORAS = 46,
+ Fairy_Tale_Girl_ORAS = 47,
+ Victor_Winstrate = 48,
+ Victoria_Winstrate = 49,
+ Male_Ranger_ORAS = 50,
+ Female_Ranger_ORAS = 51,
+ Male_Swimmer_ORAS = 52,
+ Hex_Maniac = 53,
+ Male_Ace_Trainer_ORAS = 54,
+ Female_Ace_Trainer_ORAS = 55,
+ Street_Thug = 56,
+ Delinquent = 57,
+ Male_Expert = 58,
+ Female_Expert = 59,
+ Lady_ORAS = 60,
+ Rich_Boy_ORAS = 61,
+ Ninja_Boy = 62,
+ Beauty_ORAS = 63,
+ Guitarist = 64,
+ Lass_ORAS = 65,
+ Male_Breeder_ORAS = 66,
+ Female_Breeder_ORAS = 67,
+ Camper = 68,
+ Picnicker = 69,
+ Wally = 70,
+ Steven = 71,
+ Maxie = 72,
+ Archie = 73,
+
+ Pokémon_Center = 0x80,
+ Gift = 0x81,
+ }
+}
diff --git a/PKHeX.Core/Saves/Substructures/Gen7/BattleStyle7.cs b/PKHeX.Core/Saves/Substructures/Gen7/BattleStyle7.cs
new file mode 100644
index 000000000..6c13662ae
--- /dev/null
+++ b/PKHeX.Core/Saves/Substructures/Gen7/BattleStyle7.cs
@@ -0,0 +1,19 @@
+namespace PKHeX.Core
+{
+ public enum BattleStyle7
+ {
+ Normal,
+ Elegant,
+ Girlish,
+ Reverent,
+ Smug,
+ LeftHanded,
+ Passionate,
+ Idol,
+
+ ///
+ /// USUM Only
+ ///
+ Nihilist,
+ }
+}
diff --git a/PKHeX.Core/Saves/Substructures/Gen7/SkinColor7.cs b/PKHeX.Core/Saves/Substructures/Gen7/SkinColor7.cs
new file mode 100644
index 000000000..eda35c932
--- /dev/null
+++ b/PKHeX.Core/Saves/Substructures/Gen7/SkinColor7.cs
@@ -0,0 +1,14 @@
+namespace PKHeX.Core
+{
+ public enum SkinColor7
+ {
+ M_Pale,
+ F_Pale,
+ M_Default,
+ F_Default,
+ M_Tan,
+ F_Tan,
+ M_Dark,
+ F_Dark,
+ }
+}
\ No newline at end of file
diff --git a/PKHeX.Core/Saves/Substructures/Gen7/Stamp7.cs b/PKHeX.Core/Saves/Substructures/Gen7/Stamp7.cs
new file mode 100644
index 000000000..4d482d17f
--- /dev/null
+++ b/PKHeX.Core/Saves/Substructures/Gen7/Stamp7.cs
@@ -0,0 +1,20 @@
+namespace PKHeX.Core
+{
+ public enum Stamp7
+ {
+ Melemele_Trial_Completion,
+ Akala_Trial_Completion,
+ Ula_ula_Trial_Completion,
+ Poni_Trial_Completion,
+ Island_Challenge_Completion,
+ Melemele_Pokedex_Completion,
+ Akala_Pokedex_Completion,
+ Ula_ula_Pokedex_Completion,
+ Poni_Pokedex_Completion,
+ Alola_Pokedex_Completion,
+ _50_Consecutive_Single_Battle_Wins,
+ _50_Consecutive_Double_Battle_Wins,
+ _50_Consecutive_Multi_Battle_Wins,
+ Poke_Finder_Pro,
+ }
+}
\ No newline at end of file
diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_Trainer.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_Trainer.cs
index 99e9e809b..95deb011f 100644
--- a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_Trainer.cs
+++ b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_Trainer.cs
@@ -76,14 +76,7 @@ public SAV_Trainer(SaveFile sav)
private void GetComboBoxes()
{
- var dsregion_list = new[] {
- new { Text = "NA/SA", Value = 1 },
- new { Text = "EUR", Value = 2 },
- new { Text = "JPN", Value = 0 },
- new { Text = "CN", Value = 4 },
- new { Text = "KOR", Value = 5 },
- new { Text = "TW", Value = 6 }
- };
+ var dsregion_list = Util.GetUnsortedCBList("regions3ds");
CB_3DSReg.InitializeBinding();
CB_3DSReg.DataSource = dsregion_list;
@@ -94,91 +87,18 @@ private void GetComboBoxes()
CB_Region.InitializeBinding();
Main.SetCountrySubRegion(CB_Country, "countries");
- var oras_sprite_list = new[] {
- //new { Text = "Calem", Value = 00 },
- //new { Text = "Serena", Value = 01 },
- new { Text = "Sycamore", Value = 02 },
- new { Text = "Diantha", Value = 03 },
- new { Text = "Wikstrom", Value = 04 },
- new { Text = "Malva", Value = 05 },
- new { Text = "Drasna", Value = 06 },
- new { Text = "Siebold", Value = 07 },
- new { Text = "Viola", Value = 08 },
- new { Text = "Grant", Value = 09 },
- new { Text = "Korrina", Value = 10 },
- new { Text = "Ramos", Value = 11 },
- new { Text = "Clemont", Value = 12 },
- new { Text = "Valerie", Value = 13 },
- new { Text = "Olympia", Value = 14 },
- new { Text = "Wulfric", Value = 15 },
- new { Text = "Youngster (XY)", Value = 16 },
- //new { Text = "(None)", Value = 17 },
- new { Text = "Lass (XY)", Value = 18 },
- new { Text = "Lady (XY)", Value = 19 },
- new { Text = "Schoolgirl (XY)", Value = 20 },
- new { Text = "Battle Girl (XY)", Value = 21 },
- new { Text = "Schoolboy (XY)", Value = 22 },
- new { Text = "Rich Boy (XY)", Value = 23 },
- new { Text = "Female Ace Trainer (XY)", Value = 24 },
- //new { Text = "(None)", Value = 25 },
- new { Text = "Female Ranger (XY)", Value = 26 },
- new { Text = "Male Ace Trainer (XY)", Value = 27 },
- new { Text = "Male Ranger (XY)", Value = 28 },
- new { Text = "Madame", Value = 29 },
- new { Text = "Monsieur", Value = 30 },
- new { Text = "Black Belt (XY)", Value = 31 },
- new { Text = "Male Punk (XY)", Value = 32 },
- new { Text = "Fairy Tale Girl (XY)", Value = 33 },
- new { Text = "Shauna", Value = 34 },
- new { Text = "Tierno", Value = 35 },
- new { Text = "Trevor", Value = 36 },
- new { Text = "Brendan", Value = 37 },
- new { Text = "May", Value = 38 },
- //new { Text = "(None)", Value = 39 },
- new { Text = "Hiker", Value = 40 },
- new { Text = "Aroma Lady", Value = 41 },
- new { Text = "Male Schoolkid", Value = 42 },
- new { Text = "Female Schoolkid", Value = 43 },
- new { Text = "Black Belt (ORAS)", Value = 44 },
- new { Text = "Battle Girl (ORAS)", Value = 45 },
- new { Text = "Pokemaniac (ORAS)", Value = 46 },
- new { Text = "Fairy Tale Girl (ORAS)", Value = 47 },
- new { Text = "Victor Winstrate", Value = 48 },
- new { Text = "Victoria Winstrate", Value = 49 },
- new { Text = "Male Ranger (ORAS)", Value = 50 },
- new { Text = "Female Ranger (ORAS)", Value = 51 },
- new { Text = "Male Swimmer (ORAS)", Value = 52 },
- new { Text = "Hex Maniac", Value = 53 },
- new { Text = "Male Ace Trainer (ORAS)", Value = 54 },
- new { Text = "Female Ace Trainer (ORAS)", Value = 55 },
- new { Text = "Street Thug", Value = 56 },
- new { Text = "Delinquent", Value = 57 },
- new { Text = "Male Expert", Value = 58 },
- new { Text = "Female Expert", Value = 59 },
- new { Text = "Lady (ORAS)", Value = 60 },
- new { Text = "Rich Boy (ORAS)", Value = 61 },
- new { Text = "Ninja Boy", Value = 62 },
- new { Text = "Beauty (ORAS)", Value = 63 },
- new { Text = "Guitarist", Value = 64 },
- new { Text = "Lass (ORAS)", Value = 65 },
- new { Text = "Male Breeder (ORAS)", Value = 66 },
- new { Text = "Female Breeder (ORAS)", Value = 67 },
- new { Text = "Camper", Value = 68 },
- new { Text = "Picnicker", Value = 69 },
- new { Text = "Wally", Value = 70 },
- new { Text = "Steven", Value = 71 },
- new { Text = "Maxie", Value = 72 },
- new { Text = "Archie", Value = 73 },
- new { Text = "Pokémon Center", Value = 0x80 },
- new { Text = "Gift", Value = 0x81 },
- };
+ var names = Enum.GetNames(typeof(TrainerSprite6));
+ var values = (int[])Enum.GetValues(typeof(TrainerSprite6));
+ var data = names.Zip(values, (a, b) => new ComboItem {Text = a, Value = b})
+ .Where(z => z.Value >= 2) // ignore Calem & Serena (no sprite)
+ .ToList();
CB_MultiplayerSprite.InitializeBinding();
- CB_MultiplayerSprite.DataSource = oras_sprite_list;
+ CB_MultiplayerSprite.DataSource = data;
- L_Vivillon.Text = GameInfo.Strings.specieslist[666] + ":";
+ L_Vivillon.Text = GameInfo.Strings.specieslist[(int)Species.Vivillon] + ":";
CB_Vivillon.InitializeBinding();
- CB_Vivillon.DataSource = PKX.GetFormList(666, GameInfo.Strings.types, GameInfo.Strings.forms, Main.GenderSymbols, 6).ToList();
+ CB_Vivillon.DataSource = PKX.GetFormList((int)Species.Vivillon, GameInfo.Strings.types, GameInfo.Strings.forms, Main.GenderSymbols, 6).ToList();
}
private void GetBadges()
@@ -296,10 +216,12 @@ private void GetTextBoxes()
{
L_LastSaved.Visible = CAL_LastSavedDate.Visible = CAL_LastSavedTime.Visible = false;
}
- CAL_AdventureStartDate.Value = new DateTime(2000, 1, 1).AddSeconds(SAV.SecondsToStart);
- CAL_AdventureStartTime.Value = new DateTime(2000, 1, 1).AddSeconds(SAV.SecondsToStart % 86400);
- CAL_HoFDate.Value = new DateTime(2000, 1, 1).AddSeconds(SAV.SecondsToFame);
- CAL_HoFTime.Value = new DateTime(2000, 1, 1).AddSeconds(SAV.SecondsToFame % 86400);
+
+ var epoch = new DateTime(2000, 1, 1);
+ CAL_AdventureStartDate.Value = epoch.AddSeconds(SAV.SecondsToStart);
+ CAL_AdventureStartTime.Value = epoch.AddSeconds(SAV.SecondsToStart % 86400);
+ CAL_HoFDate.Value = epoch.AddSeconds(SAV.SecondsToFame);
+ CAL_HoFTime.Value = epoch.AddSeconds(SAV.SecondsToFame % 86400);
}
private void Save()
@@ -478,9 +400,10 @@ private string UpdateTip(int index)
switch (index)
{
case 2: // Storyline Completed Time
- int seconds = (int)(CAL_AdventureStartDate.Value - new DateTime(2000, 1, 1)).TotalSeconds;
+ var epoch = new DateTime(2000, 1, 1);
+ int seconds = (int)(CAL_AdventureStartDate.Value - epoch).TotalSeconds;
seconds -= seconds % 86400;
- seconds += (int)(CAL_AdventureStartTime.Value - new DateTime(2000, 1, 1)).TotalSeconds;
+ seconds += (int)(CAL_AdventureStartTime.Value - epoch).TotalSeconds;
return ConvertDateValueToString(SAV.GetRecord(index), seconds);
default:
return null;
diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen7/SAV_Trainer7.Designer.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen7/SAV_Trainer7.Designer.cs
index 33f8c0eb5..f2aed47ad 100644
--- a/PKHeX.WinForms/Subforms/Save Editors/Gen7/SAV_Trainer7.Designer.cs
+++ b/PKHeX.WinForms/Subforms/Save Editors/Gen7/SAV_Trainer7.Designer.cs
@@ -1756,7 +1756,7 @@ private void InitializeComponent()
this.LB_Stamps.Location = new System.Drawing.Point(217, 194);
this.LB_Stamps.Name = "LB_Stamps";
this.LB_Stamps.SelectionMode = System.Windows.Forms.SelectionMode.MultiSimple;
- this.LB_Stamps.Size = new System.Drawing.Size(159, 43);
+ this.LB_Stamps.Size = new System.Drawing.Size(159, 95);
this.LB_Stamps.TabIndex = 71;
//
// L_DaysFromRefreshed
diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen7/SAV_Trainer7.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen7/SAV_Trainer7.cs
index 080e872eb..08ce8ac78 100644
--- a/PKHeX.WinForms/Subforms/Save Editors/Gen7/SAV_Trainer7.cs
+++ b/PKHeX.WinForms/Subforms/Save Editors/Gen7/SAV_Trainer7.cs
@@ -46,21 +46,15 @@ public SAV_Trainer7(SaveFile sav)
private readonly bool Loading;
private bool MapUpdated;
- private static readonly string[] TrainerStampTitle = { "01:Official Pokemon Trainer", "02:Melemele Trial Completion", "03:Akala Trial Completion", "04:Ula'ula Trial Completion", "05:Poni Trial Completion", "06:Island Challenge Completion", "07:Melemele Pokedex Completion", "08:Akala Pokedex Completion", "09:Ula'ula Pokedex Completion", "10:Poni Pokedex Completion", "11:Alola Pokedex Completion", "12:50 Consecutive Single Battle Wins", "13:50 Consecutive Double Battle Wins", "14:50 Consecutive Multi Battle Wins", "15:Poke Finder Pro" };
- private static readonly string[] BattleStyles = { "Normal", "Elegant", "Girlish", "Reverent", "Smug", "Left-handed", "Passionate", "Idol" };
+ private static readonly string[] AllStyles = Enum.GetNames(typeof(BattleStyle7));
+ private readonly List BattleStyles = new List(AllStyles);
+
private int[] FlyDestFlagOfs, MapUnmaskFlagOfs;
private int SkipFlag => SAV.USUM ? 4160 : 3200; // FlagMax - 768
private void GetComboBoxes()
{
- var dsregion_list = new[] {
- new { Text = "NA/SA", Value = 1 },
- new { Text = "EUR", Value = 2 },
- new { Text = "JPN", Value = 0 },
- new { Text = "CN", Value = 4 },
- new { Text = "KOR", Value = 5 },
- new { Text = "TW", Value = 6 }
- };
+ var dsregion_list = Util.GetUnsortedCBList("regions3ds");
var alolatime_list = new[] { new { Text = "Sun Time", Value = 24*60*60 } };
Array.Resize(ref alolatime_list, 24);
@@ -80,41 +74,34 @@ private void GetComboBoxes()
Main.SetCountrySubRegion(CB_Country, "countries");
CB_SkinColor.Items.Clear();
- string[] skinColors = { "Pale", "Default", "Tan", "Dark" };
- foreach (string c in skinColors)
- {
- CB_SkinColor.Items.Add($"{Main.GenderSymbols[0]} - {c}"); // M
- CB_SkinColor.Items.Add($"{Main.GenderSymbols[1]} - {c}"); // F
- }
+ CB_SkinColor.Items.AddRange(Enum.GetNames(typeof(SkinColor7)));
- L_Vivillon.Text = GameInfo.Strings.specieslist[666] + ":";
+ L_Vivillon.Text = GameInfo.Strings.Species[(int)Species.Vivillon] + ":";
CB_Vivillon.InitializeBinding();
- CB_Vivillon.DataSource = PKX.GetFormList(666, GameInfo.Strings.types, GameInfo.Strings.forms, Main.GenderSymbols, SAV.Generation).ToList();
+ CB_Vivillon.DataSource = PKX.GetFormList((int)Species.Vivillon, GameInfo.Strings.types, GameInfo.Strings.forms, Main.GenderSymbols, SAV.Generation).ToList();
- var styles = new List(BattleStyles);
- if (SAV.USUM)
- styles.Add("Nihilist");
- foreach (string t in styles)
+ if (!SAV.USUM)
+ BattleStyles.RemoveAt(BattleStyles.Count - 1); // remove Nihilist
+ foreach (string t in BattleStyles)
{
CB_BallThrowType.Items.Add(t);
LB_BallThrowTypeUnlocked.Items.Add(t);
LB_BallThrowTypeLearned.Items.Add(t);
}
- foreach (string t in TrainerStampTitle)
+ var stamps = Enum.GetNames(typeof(Stamp7)).Select(z => z.Replace("_", " "));
+ foreach (string t in stamps)
LB_Stamps.Items.Add(t);
}
private void GetTextBoxes()
{
// Get Data
- string OT_NAME = SAV.OT;
-
- CB_Game.SelectedIndex = SAV.Game - 30;
+ CB_Game.SelectedIndex = SAV.Game - (int)GameVersion.SN;
CB_Gender.SelectedIndex = SAV.Gender;
// Display Data
- TB_OTName.Text = OT_NAME;
+ TB_OTName.Text = SAV.OT;
trainerID1.LoadIDValues(SAV);
MT_Money.Text = SAV.Money.ToString();
@@ -158,10 +145,11 @@ private void GetTextBoxes()
L_LastSaved.Visible = CAL_LastSavedDate.Visible = CAL_LastSavedTime.Visible = false;
}
- CAL_AdventureStartDate.Value = new DateTime(2000, 1, 1).AddSeconds(SAV.SecondsToStart);
- CAL_AdventureStartTime.Value = new DateTime(2000, 1, 1).AddSeconds(SAV.SecondsToStart % 86400);
- CAL_HoFDate.Value = new DateTime(2000, 1, 1).AddSeconds(SAV.SecondsToFame);
- CAL_HoFTime.Value = new DateTime(2000, 1, 1).AddSeconds(SAV.SecondsToFame % 86400);
+ var epoch = new DateTime(2000, 1, 1);
+ CAL_AdventureStartDate.Value = epoch.AddSeconds(SAV.SecondsToStart);
+ CAL_AdventureStartTime.Value = epoch.AddSeconds(SAV.SecondsToStart % 86400);
+ CAL_HoFDate.Value = epoch.AddSeconds(SAV.SecondsToFame);
+ CAL_HoFTime.Value = epoch.AddSeconds(SAV.SecondsToFame % 86400);
NUD_BP.Value = Math.Min(NUD_BP.Maximum, SAV.BP);
NUD_FC.Value = Math.Min(NUD_FC.Maximum, SAV.FestaCoins);
@@ -223,11 +211,11 @@ private void LoadThrowTypeLists()
const int learnedStart = 3479;
LB_BallThrowTypeUnlocked.SetSelected(0, true);
LB_BallThrowTypeUnlocked.SetSelected(1, true);
- for (int i = 2; i < BattleStyles.Length; i++)
+ for (int i = 2; i < BattleStyles.Count; i++)
LB_BallThrowTypeUnlocked.SetSelected(i, SAV.GetEventFlag(unlockStart + i));
LB_BallThrowTypeLearned.SetSelected(0, true);
- for (int i = 1; i < BattleStyles.Length; i++)
+ for (int i = 1; i < BattleStyles.Count; i++)
LB_BallThrowTypeLearned.SetSelected(i, SAV.GetEventFlag(learnedStart + i));
CB_BallThrowTypeListMode.SelectedIndex = 0;
@@ -235,7 +223,7 @@ private void LoadThrowTypeLists()
private void LoadMapFlyToData()
{
- IReadOnlyList metLocationList = GameInfo.GetLocationList(GameVersion.US, 7, false);
+ var metLocationList = GameInfo.GetLocationList(GameVersion.US, 7, false);
int[] FlyDestNameIndex = {
-1,24,34,8,20,38,12,46,40,30,//Melemele
70,68,78,86,74,104,82,58,90,72,76,92,62,//Akala
@@ -257,7 +245,7 @@ private void LoadMapFlyToData()
75,332,334,
331,333,335,336,
};
- string[] FlyDestAltName = { "My House", "Photo Club(Hau'oli)", "Photo Club(Konikoni)", };
+ string[] FlyDestAltName = { "My House", "Photo Club (Hau'oli)", "Photo Club (Konikoni)", };
CLB_FlyDest.Items.Clear();
for (int i = 0, u = 0, m = FlyDestNameIndex.Length - (SAV.USUM ? 0 : 6); i < m; i++)
{
@@ -284,7 +272,7 @@ private void LoadMapFlyToData()
181,
409,297,32,296,
};
- string[] MapUnmaskAltName = { "Melemele Sea(East)", "Melemele Sea(West)", };
+ string[] MapUnmaskAltName = { "Melemele Sea (East)", "Melemele Sea (West)", };
CLB_MapUnmask.Items.Clear();
for (int i = 0, u = 0, m = MapUnmaskNameIndex.Length - (SAV.USUM ? 0 : 4); i < m; i++)
{
@@ -357,14 +345,15 @@ private void SaveTrainerInfo()
SAV.PlayedMinutes = ushort.Parse(MT_Minutes.Text)%60;
SAV.PlayedSeconds = ushort.Parse(MT_Seconds.Text)%60;
- int seconds = (int)(CAL_AdventureStartDate.Value - new DateTime(2000, 1, 1)).TotalSeconds;
+ var epoch = new DateTime(2000, 1, 1);
+ int seconds = (int)(CAL_AdventureStartDate.Value - epoch).TotalSeconds;
seconds -= seconds%86400;
- seconds += (int)(CAL_AdventureStartTime.Value - new DateTime(2000, 1, 1)).TotalSeconds;
+ seconds += (int)(CAL_AdventureStartTime.Value - epoch).TotalSeconds;
SAV.SecondsToStart = seconds;
- int fame = (int)(CAL_HoFDate.Value - new DateTime(2000, 1, 1)).TotalSeconds;
+ int fame = (int)(CAL_HoFDate.Value - epoch).TotalSeconds;
fame -= fame % 86400;
- fame += (int)(CAL_HoFTime.Value - new DateTime(2000, 1, 1)).TotalSeconds;
+ fame += (int)(CAL_HoFTime.Value - epoch).TotalSeconds;
SAV.SecondsToFame = fame;
if (SAV.LastSavedDate.HasValue)
@@ -426,9 +415,9 @@ private void SaveThrowType()
const int unlockStart = 292;
const int learnedStart = 3479;
- for (int i = 2; i < BattleStyles.Length; i++)
+ for (int i = 2; i < BattleStyles.Count; i++)
SAV.SetEventFlag(unlockStart + i, LB_BallThrowTypeUnlocked.GetSelected(i));
- for (int i = 1; i < BattleStyles.Length; i++)
+ for (int i = 1; i < BattleStyles.Count; i++)
SAV.SetEventFlag(learnedStart + i, LB_BallThrowTypeLearned.GetSelected(i));
}