2016-06-22 00:35:12 +00:00
|
|
|
|
using System;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Windows.Forms;
|
2017-01-08 07:54:09 +00:00
|
|
|
|
using PKHeX.Core;
|
2016-06-22 00:35:12 +00:00
|
|
|
|
|
2017-01-08 07:54:09 +00:00
|
|
|
|
namespace PKHeX.WinForms
|
2016-06-22 00:35:12 +00:00
|
|
|
|
{
|
|
|
|
|
public partial class SAV_SimpleTrainer : Form
|
|
|
|
|
{
|
2017-05-23 04:55:05 +00:00
|
|
|
|
private readonly SaveFile Origin;
|
|
|
|
|
private readonly SaveFile SAV;
|
2018-08-04 17:06:06 +00:00
|
|
|
|
|
2017-05-23 04:55:05 +00:00
|
|
|
|
public SAV_SimpleTrainer(SaveFile sav)
|
2016-06-22 00:35:12 +00:00
|
|
|
|
{
|
|
|
|
|
InitializeComponent();
|
2017-06-18 01:37:19 +00:00
|
|
|
|
WinFormsUtil.TranslateInterface(this, Main.CurrentLanguage);
|
2018-04-03 03:36:13 +00:00
|
|
|
|
SAV = (Origin = sav).Clone();
|
|
|
|
|
Loading = true;
|
2016-06-22 00:35:12 +00:00
|
|
|
|
|
|
|
|
|
cba = new[] {CHK_1, CHK_2, CHK_3, CHK_4, CHK_5, CHK_6, CHK_7, CHK_8};
|
|
|
|
|
TB_OTName.MaxLength = SAV.OTLength;
|
2016-09-09 03:20:32 +00:00
|
|
|
|
B_MaxCash.Click += (sender, e) => MT_Money.Text = SAV.MaxMoney.ToString();
|
2017-02-04 20:13:54 +00:00
|
|
|
|
B_MaxCoins.Click += (sender, e) => MT_Coins.Text = SAV.MaxCoins.ToString();
|
2016-09-09 03:20:32 +00:00
|
|
|
|
MT_Money.Mask = "00000000000".Substring(0, SAV.MaxMoney.ToString().Length);
|
2017-02-04 20:13:54 +00:00
|
|
|
|
MT_Coins.Mask = "00000000000".Substring(0, SAV.MaxCoins.ToString().Length);
|
2016-06-22 00:35:12 +00:00
|
|
|
|
|
2016-07-30 05:36:24 +00:00
|
|
|
|
CB_Gender.Items.Clear();
|
2017-06-18 01:37:19 +00:00
|
|
|
|
CB_Gender.Items.AddRange(Main.GenderSymbols.Take(2).ToArray()); // m/f depending on unicode selection
|
2016-07-30 05:36:24 +00:00
|
|
|
|
|
2016-08-30 00:48:05 +00:00
|
|
|
|
L_SID.Visible = MT_SID.Visible = SAV.Generation > 2;
|
|
|
|
|
L_Coins.Visible = B_MaxCoins.Visible = MT_Coins.Visible = SAV.Generation < 3;
|
|
|
|
|
CB_Gender.Visible = SAV.Generation > 1;
|
|
|
|
|
|
2017-01-05 09:14:19 +00:00
|
|
|
|
L_PikaFriend.Visible = MT_PikaFriend.Visible = SAV.Generation == 1;
|
|
|
|
|
|
2016-06-22 00:35:12 +00:00
|
|
|
|
TB_OTName.Text = SAV.OT;
|
|
|
|
|
CB_Gender.SelectedIndex = SAV.Gender;
|
|
|
|
|
MT_TID.Text = SAV.TID.ToString("00000");
|
|
|
|
|
MT_SID.Text = SAV.SID.ToString("00000");
|
|
|
|
|
MT_Money.Text = SAV.Money.ToString();
|
2016-06-26 21:23:41 +00:00
|
|
|
|
MT_Hours.Text = SAV.PlayedHours.ToString();
|
|
|
|
|
MT_Minutes.Text = SAV.PlayedMinutes.ToString();
|
|
|
|
|
MT_Seconds.Text = SAV.PlayedSeconds.ToString();
|
|
|
|
|
|
2016-08-30 00:48:05 +00:00
|
|
|
|
int badgeval = 0;
|
2017-06-18 01:37:19 +00:00
|
|
|
|
if (SAV is SAV1 sav1)
|
2016-08-30 00:48:05 +00:00
|
|
|
|
{
|
|
|
|
|
MT_Coins.Text = sav1.Coin.ToString();
|
|
|
|
|
badgeval = sav1.Badges;
|
|
|
|
|
|
|
|
|
|
L_Started.Visible = L_Fame.Visible = false;
|
|
|
|
|
CAL_AdventureStartDate.Visible = CAL_HoFDate.Visible = false;
|
|
|
|
|
CAL_AdventureStartTime.Visible = CAL_HoFTime.Visible = false;
|
|
|
|
|
GB_Map.Visible = false;
|
|
|
|
|
GB_Options.Visible = true;
|
|
|
|
|
CB_BattleStyle.Items.AddRange(new[] { "Switch", "Set" });
|
2019-04-15 22:46:03 +00:00
|
|
|
|
CB_SoundType.Items.AddRange(new[] { "Mono", "Stereo", "Left", "Right" });
|
2016-08-30 00:48:05 +00:00
|
|
|
|
CB_TextSpeed.Items.AddRange(new[] { "0 (Instant)", "1 (Fast)", "2", "3 (Normal)", "4", "5 (Slow)", "6", "7" });
|
|
|
|
|
|
|
|
|
|
CHK_BattleEffects.Checked = sav1.BattleEffects;
|
|
|
|
|
CB_BattleStyle.SelectedIndex = sav1.BattleStyleSwitch ? 0 : 1;
|
|
|
|
|
CB_SoundType.SelectedIndex = sav1.Sound;
|
|
|
|
|
CB_TextSpeed.SelectedIndex = sav1.TextSpeed;
|
2017-01-05 09:14:19 +00:00
|
|
|
|
|
|
|
|
|
MT_PikaFriend.Text = sav1.PikaFriendship.ToString();
|
2019-04-15 22:38:49 +00:00
|
|
|
|
if (!sav1.Version.Contains(GameVersion.YW))
|
|
|
|
|
{
|
2019-06-09 20:48:51 +00:00
|
|
|
|
L_PikaFriend.Visible = MT_PikaFriend.Visible = false;
|
2019-04-15 22:38:49 +00:00
|
|
|
|
CB_SoundType.Visible = LBL_SoundType.Visible = false;
|
|
|
|
|
}
|
2016-08-30 00:48:05 +00:00
|
|
|
|
}
|
|
|
|
|
|
2017-06-18 01:37:19 +00:00
|
|
|
|
if (SAV is SAV2 sav2)
|
2016-09-04 01:57:54 +00:00
|
|
|
|
{
|
|
|
|
|
MT_Coins.Text = sav2.Coin.ToString();
|
|
|
|
|
|
|
|
|
|
L_Started.Visible = L_Fame.Visible = false;
|
|
|
|
|
CAL_AdventureStartDate.Visible = CAL_HoFDate.Visible = false;
|
|
|
|
|
CAL_AdventureStartTime.Visible = CAL_HoFTime.Visible = false;
|
|
|
|
|
GB_Map.Visible = false;
|
|
|
|
|
GB_Options.Visible = true;
|
|
|
|
|
CB_BattleStyle.Items.AddRange(new[] { "Switch", "Set" });
|
|
|
|
|
CB_SoundType.Items.AddRange(new[] { "Mono", "Stereo" });
|
|
|
|
|
CB_TextSpeed.Items.AddRange(new[] { "0 (Instant)", "1 (Fast)", "2", "3 (Normal)", "4", "5 (Slow)", "6", "7" });
|
|
|
|
|
|
|
|
|
|
CHK_BattleEffects.Checked = sav2.BattleEffects;
|
|
|
|
|
CB_BattleStyle.SelectedIndex = sav2.BattleStyleSwitch ? 0 : 1;
|
|
|
|
|
CB_SoundType.SelectedIndex = sav2.Sound > 0 ? 1 : 0;
|
|
|
|
|
CB_TextSpeed.SelectedIndex = sav2.TextSpeed;
|
|
|
|
|
badgeval = sav2.Badges;
|
|
|
|
|
cba = new[] { CHK_1, CHK_2, CHK_3, CHK_4, CHK_6, CHK_5, CHK_7, CHK_8, CHK_H1, CHK_H2, CHK_H3, CHK_H4, CHK_H5, CHK_H6, CHK_H7, CHK_H8 };
|
|
|
|
|
}
|
|
|
|
|
|
2017-10-05 00:36:43 +00:00
|
|
|
|
if (SAV is SAV3 sav3)
|
2016-06-26 21:23:41 +00:00
|
|
|
|
{
|
|
|
|
|
GB_Map.Visible = false;
|
2018-07-08 00:01:47 +00:00
|
|
|
|
badgeval = sav3.Badges;
|
2016-06-26 21:23:41 +00:00
|
|
|
|
|
|
|
|
|
L_Started.Visible = L_Fame.Visible = false;
|
|
|
|
|
CAL_AdventureStartDate.Visible = CAL_HoFDate.Visible = false;
|
|
|
|
|
CAL_AdventureStartTime.Visible = CAL_HoFTime.Visible = false;
|
|
|
|
|
}
|
2016-11-26 00:55:17 +00:00
|
|
|
|
if (SAV is SAV3Colosseum || SAV is SAV3XD)
|
|
|
|
|
{
|
|
|
|
|
GB_Map.Visible = false;
|
|
|
|
|
GB_Badges.Visible = false;
|
|
|
|
|
L_Started.Visible = L_Fame.Visible = false;
|
|
|
|
|
CAL_AdventureStartDate.Visible = CAL_HoFDate.Visible = false;
|
|
|
|
|
CAL_AdventureStartTime.Visible = CAL_HoFTime.Visible = false;
|
2017-08-07 00:26:09 +00:00
|
|
|
|
GB_Adventure.Visible = false;
|
2016-11-26 00:55:17 +00:00
|
|
|
|
return;
|
|
|
|
|
}
|
2016-06-22 00:35:12 +00:00
|
|
|
|
|
2017-06-18 01:37:19 +00:00
|
|
|
|
if (SAV is SAV4 sav4)
|
2016-06-22 00:35:12 +00:00
|
|
|
|
{
|
2017-06-18 01:37:19 +00:00
|
|
|
|
NUD_M.Value = sav4.M;
|
|
|
|
|
NUD_X.Value = sav4.X;
|
|
|
|
|
NUD_Z.Value = sav4.Z;
|
|
|
|
|
NUD_Y.Value = sav4.Y;
|
2016-06-22 00:35:12 +00:00
|
|
|
|
|
2017-06-18 01:37:19 +00:00
|
|
|
|
badgeval = sav4.Badges;
|
|
|
|
|
if (sav4.Version == GameVersion.HGSS)
|
2016-06-22 00:35:12 +00:00
|
|
|
|
{
|
2017-06-18 01:37:19 +00:00
|
|
|
|
badgeval |= sav4.Badges16 << 8;
|
|
|
|
|
cba = cba.Concat(new[] { CHK_H1, CHK_H2, CHK_H3, CHK_H4, CHK_H5, CHK_H6, CHK_H7, CHK_H8 }).ToArray();
|
2016-06-22 00:35:12 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2017-06-18 01:37:19 +00:00
|
|
|
|
else if (SAV is SAV5 s)
|
2016-06-22 00:35:12 +00:00
|
|
|
|
{
|
2017-11-02 04:26:38 +00:00
|
|
|
|
foreach (var control in new Control[] {L_Coins, B_MaxCoins, MT_Coins})
|
|
|
|
|
{
|
|
|
|
|
var pos = control.Location;
|
|
|
|
|
GB_Badges.Controls.Add(control);
|
|
|
|
|
control.Location = pos;
|
|
|
|
|
control.Visible = true;
|
|
|
|
|
}
|
|
|
|
|
L_Coins.Text = "BP"; // no translation boo
|
2019-06-09 02:56:11 +00:00
|
|
|
|
MT_Coins.Text = s.BattleSubwayBlock.BP.ToString();
|
|
|
|
|
|
|
|
|
|
var pd = s.PlayerData;
|
|
|
|
|
NUD_M.Value = pd.M;
|
|
|
|
|
NUD_X.Value = pd.X;
|
|
|
|
|
NUD_Z.Value = pd.Z;
|
|
|
|
|
NUD_Y.Value = pd.Y;
|
|
|
|
|
badgeval = s.MiscBlock.Badges;
|
2016-06-22 00:35:12 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < cba.Length; i++)
|
|
|
|
|
{
|
|
|
|
|
cba[i].Visible = true;
|
|
|
|
|
cba[i].Checked = (badgeval & 1 << i) != 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CAL_HoFDate.Value = new DateTime(2000, 1, 1).AddSeconds(SAV.SecondsToFame);
|
|
|
|
|
CAL_HoFTime.Value = new DateTime(2000, 1, 1).AddSeconds(SAV.SecondsToFame % 86400);
|
|
|
|
|
CAL_AdventureStartDate.Value = new DateTime(2000, 1, 1).AddSeconds(SAV.SecondsToStart);
|
|
|
|
|
CAL_AdventureStartTime.Value = new DateTime(2000, 1, 1).AddSeconds(SAV.SecondsToStart % 86400);
|
2016-12-31 23:45:04 +00:00
|
|
|
|
|
|
|
|
|
Loading = false;
|
2016-06-22 00:35:12 +00:00
|
|
|
|
}
|
2018-08-04 17:06:06 +00:00
|
|
|
|
|
2016-06-22 00:35:12 +00:00
|
|
|
|
private readonly CheckBox[] cba;
|
2016-12-31 23:45:04 +00:00
|
|
|
|
private readonly bool Loading;
|
|
|
|
|
private bool MapUpdated;
|
|
|
|
|
|
2017-06-18 01:37:19 +00:00
|
|
|
|
private void ChangeFFFF(object sender, EventArgs e)
|
2016-06-22 00:35:12 +00:00
|
|
|
|
{
|
2018-05-13 02:07:32 +00:00
|
|
|
|
MaskedTextBox box = (MaskedTextBox)sender;
|
|
|
|
|
if (box.Text.Length == 0) box.Text = "0";
|
2016-06-22 00:35:12 +00:00
|
|
|
|
if (Util.ToInt32(box.Text) > 65535) box.Text = "65535";
|
|
|
|
|
}
|
2018-08-04 17:06:06 +00:00
|
|
|
|
|
2017-06-18 01:37:19 +00:00
|
|
|
|
private void Change255(object sender, EventArgs e)
|
2017-06-11 07:25:21 +00:00
|
|
|
|
{
|
2018-05-13 02:07:32 +00:00
|
|
|
|
MaskedTextBox box = (MaskedTextBox)sender;
|
|
|
|
|
if (box.Text.Length == 0) box.Text = "0";
|
2017-06-11 07:25:21 +00:00
|
|
|
|
if (Util.ToInt32(box.Text) > byte.MaxValue) box.Text = "255";
|
|
|
|
|
}
|
2016-06-22 00:35:12 +00:00
|
|
|
|
|
|
|
|
|
private void B_Save_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
2017-10-05 00:36:43 +00:00
|
|
|
|
if (SAV.OT != TB_OTName.Text) // only modify if changed (preserve trash bytes?)
|
|
|
|
|
SAV.OT = TB_OTName.Text;
|
2016-06-22 00:35:12 +00:00
|
|
|
|
SAV.Gender = (byte)CB_Gender.SelectedIndex;
|
|
|
|
|
|
|
|
|
|
SAV.TID = (ushort)Util.ToUInt32(MT_TID.Text);
|
|
|
|
|
SAV.SID = (ushort)Util.ToUInt32(MT_SID.Text);
|
|
|
|
|
SAV.Money = Util.ToUInt32(MT_Money.Text);
|
|
|
|
|
|
2016-06-26 21:23:41 +00:00
|
|
|
|
SAV.PlayedHours = ushort.Parse(MT_Hours.Text);
|
|
|
|
|
SAV.PlayedMinutes = ushort.Parse(MT_Minutes.Text) % 60;
|
|
|
|
|
SAV.PlayedSeconds = ushort.Parse(MT_Seconds.Text) % 60;
|
|
|
|
|
|
2016-06-22 00:35:12 +00:00
|
|
|
|
// Copy Badges
|
|
|
|
|
int badgeval = 0;
|
|
|
|
|
for (int i = 0; i < cba.Length; i++)
|
|
|
|
|
badgeval |= (cba[i].Checked ? 1 : 0) << i;
|
|
|
|
|
|
2017-06-18 01:37:19 +00:00
|
|
|
|
if (SAV is SAV1 sav1)
|
2016-08-30 00:48:05 +00:00
|
|
|
|
{
|
2017-02-04 20:13:54 +00:00
|
|
|
|
sav1.Coin = (ushort)Math.Min(Util.ToUInt32(MT_Coins.Text), SAV.MaxCoins);
|
2016-08-30 00:48:05 +00:00
|
|
|
|
sav1.Badges = badgeval & 0xFF;
|
2017-09-15 13:42:00 +00:00
|
|
|
|
sav1.PikaFriendship = (byte)Math.Min(255, Util.ToUInt32(MT_PikaFriend.Text));
|
2016-08-30 00:48:05 +00:00
|
|
|
|
sav1.BattleEffects = CHK_BattleEffects.Checked;
|
|
|
|
|
sav1.BattleStyleSwitch = CB_BattleStyle.SelectedIndex == 0;
|
|
|
|
|
sav1.Sound = CB_SoundType.SelectedIndex;
|
|
|
|
|
sav1.TextSpeed = CB_TextSpeed.SelectedIndex;
|
|
|
|
|
}
|
|
|
|
|
|
2017-06-18 01:37:19 +00:00
|
|
|
|
if (SAV is SAV2 sav2)
|
2016-09-04 01:57:54 +00:00
|
|
|
|
{
|
2017-02-04 20:13:54 +00:00
|
|
|
|
sav2.Coin = (ushort)Math.Min(Util.ToUInt32(MT_Coins.Text), SAV.MaxCoins);
|
2016-09-04 01:57:54 +00:00
|
|
|
|
sav2.Badges = badgeval & 0xFFFF;
|
|
|
|
|
|
|
|
|
|
sav2.BattleEffects = CHK_BattleEffects.Checked;
|
|
|
|
|
sav2.BattleStyleSwitch = CB_BattleStyle.SelectedIndex == 0;
|
|
|
|
|
sav2.Sound = CB_SoundType.SelectedIndex > 0 ? 2 : 0;
|
|
|
|
|
sav2.TextSpeed = CB_TextSpeed.SelectedIndex;
|
|
|
|
|
}
|
|
|
|
|
|
2017-06-18 01:37:19 +00:00
|
|
|
|
if (SAV is SAV3 sav3)
|
2017-04-16 06:14:07 +00:00
|
|
|
|
{
|
|
|
|
|
sav3.Badges = badgeval & 0xFF;
|
|
|
|
|
}
|
|
|
|
|
|
2017-06-18 01:37:19 +00:00
|
|
|
|
if (SAV is SAV4 sav4)
|
2016-06-22 00:35:12 +00:00
|
|
|
|
{
|
2017-01-01 01:19:35 +00:00
|
|
|
|
if (MapUpdated)
|
|
|
|
|
{
|
2017-06-18 01:37:19 +00:00
|
|
|
|
sav4.M = (int)NUD_M.Value;
|
|
|
|
|
sav4.X = (int)NUD_X.Value;
|
|
|
|
|
sav4.Z = (int)NUD_Z.Value;
|
|
|
|
|
sav4.Y = (int)NUD_Y.Value;
|
2017-01-01 01:19:35 +00:00
|
|
|
|
}
|
2017-06-18 01:37:19 +00:00
|
|
|
|
sav4.Badges = badgeval & 0xFF;
|
|
|
|
|
if (sav4.Version == GameVersion.HGSS)
|
2016-06-22 00:35:12 +00:00
|
|
|
|
{
|
2017-06-18 01:37:19 +00:00
|
|
|
|
sav4.Badges16 = badgeval >> 8;
|
2016-06-22 00:35:12 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2017-06-18 01:37:19 +00:00
|
|
|
|
else if (SAV is SAV5 s)
|
2016-06-22 00:35:12 +00:00
|
|
|
|
{
|
2017-01-01 01:19:35 +00:00
|
|
|
|
if (MapUpdated)
|
|
|
|
|
{
|
2019-06-09 02:56:11 +00:00
|
|
|
|
var pd = s.PlayerData;
|
|
|
|
|
pd.M = (int)NUD_M.Value;
|
|
|
|
|
pd.X = (int)NUD_X.Value;
|
|
|
|
|
pd.Z = (int)NUD_Z.Value;
|
|
|
|
|
pd.Y = (int)NUD_Y.Value;
|
2017-01-01 01:19:35 +00:00
|
|
|
|
}
|
2019-06-09 02:56:11 +00:00
|
|
|
|
s.MiscBlock.Badges = badgeval & 0xFF;
|
|
|
|
|
s.BattleSubwayBlock.BP = (ushort)Math.Min(Util.ToUInt32(MT_Coins.Text), SAV.MaxCoins);
|
2016-06-22 00:35:12 +00:00
|
|
|
|
}
|
2017-05-23 04:55:05 +00:00
|
|
|
|
|
2017-06-18 01:37:19 +00:00
|
|
|
|
SAV.SecondsToStart = GetSeconds(CAL_AdventureStartDate, CAL_AdventureStartTime);
|
|
|
|
|
SAV.SecondsToFame = GetSeconds(CAL_HoFDate, CAL_HoFTime);
|
|
|
|
|
|
|
|
|
|
Origin.SetData(SAV.Data, 0);
|
2016-06-22 00:35:12 +00:00
|
|
|
|
Close();
|
|
|
|
|
}
|
2018-08-04 17:06:06 +00:00
|
|
|
|
|
2016-06-22 00:35:12 +00:00
|
|
|
|
private void B_Cancel_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
Close();
|
|
|
|
|
}
|
2018-08-04 17:06:06 +00:00
|
|
|
|
|
2019-03-05 23:55:26 +00:00
|
|
|
|
private static uint GetSeconds(DateTimePicker date, DateTimePicker time)
|
2016-06-22 00:35:12 +00:00
|
|
|
|
{
|
2019-06-09 02:56:11 +00:00
|
|
|
|
var epoch = new DateTime(2000, 1, 1);
|
|
|
|
|
uint val = (uint)(date.Value - epoch).TotalSeconds;
|
2016-06-22 00:35:12 +00:00
|
|
|
|
val -= val % 86400;
|
2019-06-09 02:56:11 +00:00
|
|
|
|
val += (uint)(time.Value - epoch).TotalSeconds;
|
2016-06-22 00:35:12 +00:00
|
|
|
|
return val;
|
|
|
|
|
}
|
2018-08-04 17:06:06 +00:00
|
|
|
|
|
2017-06-18 01:37:19 +00:00
|
|
|
|
private void ChangeMapValue(object sender, EventArgs e)
|
2016-12-31 23:45:04 +00:00
|
|
|
|
{
|
|
|
|
|
if (!Loading)
|
|
|
|
|
MapUpdated = true;
|
|
|
|
|
}
|
2016-06-22 00:35:12 +00:00
|
|
|
|
}
|
|
|
|
|
}
|