mirror of
https://github.com/kwsch/PKHeX
synced 2025-02-17 05:48:44 +00:00
fix Gen4 Misc Resources
add missing FlyDst and use MetLocation string. add TrainerCard flags to FlagEditor. add Pt resources. fix HoneyTree, the BlockOffset needed.
This commit is contained in:
parent
f054f035c9
commit
753964c138
11 changed files with 363 additions and 367 deletions
44
PKHeX.Core/Properties/Resources.Designer.cs
generated
44
PKHeX.Core/Properties/Resources.Designer.cs
generated
|
@ -125,6 +125,25 @@ namespace PKHeX.Core.Properties {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to 0196 Dialga 0:Battleable,1:Disappeared
|
||||
///0197 Palkia 0:Battleable,1:Disappeared
|
||||
///0085 Giratina(DistortionWorld) 13:Battleable,14:Disappeared
|
||||
///0158 Heatran 00:Event,01:Battleable,02:Disappeared
|
||||
///0054 Fullmoon Is. 0:Not appeared,520:On the Map
|
||||
///0055 Newmoon Is. 0:Not appeared,553:On the Map
|
||||
///0056 Spring Path 0:Not appeared,786:Appeared
|
||||
///0057 Seabreak Path 0:Not appeared,4136:Appeared
|
||||
///0067 Member Card 0:Not activated,4617:Activated
|
||||
///0068 Oak Letter 0:Not activated,4370:Activated
|
||||
///0069 Azure Flute 0:Not activat [rest of string was truncated]";.
|
||||
/// </summary>
|
||||
internal static string const_pt {
|
||||
get {
|
||||
return ResourceManager.GetString("const_pt", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to 148 Starter 00:Rowlet,01:Litten,02:Popplio
|
||||
///432 Tapu Koko 03:Battleable,04:Defeated,05:Captured
|
||||
|
@ -272,6 +291,31 @@ namespace PKHeX.Core.Properties {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to 0481 Uxie disappeared
|
||||
///0479 Mesprit(Verity Cavern) disappeared
|
||||
///0480 Azelf disappeared
|
||||
///0208 Dialga captured
|
||||
///0209 Palkia captured
|
||||
///0591 Cresselia(FullmoonIs.) disappeared
|
||||
///0476 Charon(Mt.Stark) disappeared
|
||||
///0293 Heatran Battleable
|
||||
///0288 Heatran Disappeared
|
||||
///0579 Regigigas disappeared
|
||||
///0306 EventObj(SpearPillar) Appeared
|
||||
///0461 Cynthia(SpearPillar) Disappeared
|
||||
///0672 Cynthia(SendoffSpring) Disappeared
|
||||
///0592 Giratina disappeared
|
||||
///0344 Darkrai disappeared
|
||||
///0301 Oak(R224)#1 disappeared
|
||||
///0594 Oak(R224)#2 disappea [rest of string was truncated]";.
|
||||
/// </summary>
|
||||
internal static string flags_pt {
|
||||
get {
|
||||
return ResourceManager.GetString("flags_pt", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to 3100 Is Alolan Champion + Magearna Event Active
|
||||
///3487 Received Magearna Gift
|
||||
|
|
|
@ -1457,4 +1457,10 @@
|
|||
<data name="flags_b2w2" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\text\other\flags_b2w2.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;shift_jis</value>
|
||||
</data>
|
||||
<data name="const_pt" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\text\other\const_pt.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;shift_jis</value>
|
||||
</data>
|
||||
<data name="flags_pt" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\text\other\flags_pt.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;shift_jis</value>
|
||||
</data>
|
||||
</root>
|
13
PKHeX.Core/Resources/text/other/const_pt.txt
Normal file
13
PKHeX.Core/Resources/text/other/const_pt.txt
Normal file
|
@ -0,0 +1,13 @@
|
|||
0196 Dialga 0:Battleable,1:Disappeared
|
||||
0197 Palkia 0:Battleable,1:Disappeared
|
||||
0085 Giratina(DistortionWorld) 13:Battleable,14:Disappeared
|
||||
0158 Heatran 00:Event,01:Battleable,02:Disappeared
|
||||
0054 Fullmoon Is. 0:Not appeared,520:On the Map
|
||||
0055 Newmoon Is. 0:Not appeared,553:On the Map
|
||||
0056 Spring Path 0:Not appeared,786:Appeared
|
||||
0057 Seabreak Path 0:Not appeared,4136:Appeared
|
||||
0067 Member Card 0:Not activated,4617:Activated
|
||||
0068 Oak Letter 0:Not activated,4370:Activated
|
||||
0069 Azure Flute 0:Not activated,4387:Activated
|
||||
0087 Event Marley(R224) 0:Not activated,1:Activatable,2:Activated
|
||||
0133 Marley(R224) 0:Not Activated,1:Appearable,2:Appeared
|
|
@ -12,4 +12,10 @@
|
|||
0307 Ferry FullmoonIs. accessable
|
||||
0316 Ferry NewmoonIs. accessable
|
||||
0301 Oak(R224) disappeared
|
||||
0634 Shaymin(R224 MapObj) disappeared
|
||||
0634 Shaymin(R224 MapObj) disappeared
|
||||
2404 HOF(TrainerCard Upgrade)
|
||||
2408 Cool Contest Master
|
||||
2409 Beauty Contest Master
|
||||
2410 Cute Contest Master
|
||||
2411 Smart Contest Master
|
||||
2412 Tough Contest Master
|
|
@ -12,4 +12,7 @@
|
|||
0578 Ho-Oh disappeared
|
||||
0781 Lati@s(PewterCity) disappeared
|
||||
0721 Kyogre/Groudon disappeared
|
||||
0722 Rayquaza disappeared
|
||||
0722 Rayquaza disappeared
|
||||
2404 HOF(TrainerCard Upgrade)
|
||||
0388 ShinyLeaf(TrainerCard Upgrade)
|
||||
0241 Pokeathlon(TrainerCard Upgrade)
|
32
PKHeX.Core/Resources/text/other/flags_pt.txt
Normal file
32
PKHeX.Core/Resources/text/other/flags_pt.txt
Normal file
|
@ -0,0 +1,32 @@
|
|||
0481 Uxie disappeared
|
||||
0479 Mesprit(Verity Cavern) disappeared
|
||||
0480 Azelf disappeared
|
||||
0208 Dialga captured
|
||||
0209 Palkia captured
|
||||
0591 Cresselia(FullmoonIs.) disappeared
|
||||
0476 Charon(Mt.Stark) disappeared
|
||||
0293 Heatran Battleable
|
||||
0288 Heatran Disappeared
|
||||
0579 Regigigas disappeared
|
||||
0306 EventObj(SpearPillar) Appeared
|
||||
0461 Cynthia(SpearPillar) Disappeared
|
||||
0672 Cynthia(SendoffSpring) Disappeared
|
||||
0592 Giratina disappeared
|
||||
0344 Darkrai disappeared
|
||||
0301 Oak(R224)#1 disappeared
|
||||
0594 Oak(R224)#2 disappeared
|
||||
0714 Marley(R224) disappeared
|
||||
0604 Shaymin(R224 MapObj) disappeared
|
||||
0291 Shaymin(FlowerParadise) disappeared
|
||||
0286 Arceus disappeared
|
||||
0307 Ferry FullmoonIs. accessable
|
||||
0316 Ferry NewmoonIs. accessable
|
||||
0578 Oak(EternaCity) disappeared
|
||||
0281 Legendary birds roamed#1
|
||||
0153 Legendary birds roamed#2
|
||||
2404 HOF(TrainerCard Upgrade)
|
||||
2408 Cool Contest Master
|
||||
2409 Beauty Contest Master
|
||||
2410 Cute Contest Master
|
||||
2411 Smart Contest Master
|
||||
2412 Tough Contest Master
|
|
@ -206,6 +206,7 @@ namespace PKHeX.Core
|
|||
EventConst = 0xD9C + GBO;
|
||||
EventFlag = 0xFDC + GBO;
|
||||
Daycare = 0x141C + GBO;
|
||||
OFS_HONEY = 0x72E4 + GBO;
|
||||
Box = 0xC104 + SBO;
|
||||
break;
|
||||
case GameVersion.Pt:
|
||||
|
@ -234,8 +235,10 @@ namespace PKHeX.Core
|
|||
LegalMailItems = Legal.Pouch_Mail_Pt;
|
||||
|
||||
HeldItems = Legal.HeldItems_Pt;
|
||||
|
||||
EventConst = 0xDAC + GBO;
|
||||
EventFlag = 0xFEC + GBO;
|
||||
Daycare = 0x1654 + GBO;
|
||||
OFS_HONEY = 0x7F38 + GBO;
|
||||
Box = 0xCF30 + SBO;
|
||||
break;
|
||||
case GameVersion.HGSS:
|
||||
|
@ -1030,17 +1033,22 @@ namespace PKHeX.Core
|
|||
switch (Version)
|
||||
{
|
||||
case GameVersion.DP:
|
||||
if ((Data[0x1413 + GBO] & 1) != 0) return 4;
|
||||
else if ((Data[0x1415 + GBO] & 1) != 0) return 3;
|
||||
else if ((Data[0x1404 + GBO] & 1) != 0) return 2;
|
||||
else if ((Data[0x1414 + GBO] & 1) != 0) return 1;
|
||||
if (Data[0x1413 + GBO] != 0) return 4;
|
||||
else if (Data[0x1415 + GBO] != 0) return 3;
|
||||
else if (Data[0x1404 + GBO] != 0) return 2;
|
||||
else if (Data[0x1414 + GBO] != 0) return 1;
|
||||
else return 0;
|
||||
case GameVersion.HGSS:
|
||||
if ((Data[0x15ED + GBO] & 1) != 0) return 3;
|
||||
else if ((Data[0x15EF + GBO] & 1) != 0) return 2;
|
||||
else if ((Data[0x15EE + GBO] & 1) != 0 && (Data[0x10D1 + GBO] & 8) != 0) return 1;
|
||||
if (Data[0x15ED + GBO] != 0) return 3;
|
||||
else if (Data[0x15EF + GBO] != 0) return 2;
|
||||
else if (Data[0x15EE + GBO] != 0 && (Data[0x10D1 + GBO] & 8) != 0) return 1;
|
||||
else return 0;
|
||||
case GameVersion.Pt:
|
||||
if (Data[0x1641 + GBO] != 0) return 4;
|
||||
else if (Data[0x1643 + GBO] != 0) return 3;
|
||||
else if (Data[0x1640 + GBO] != 0) return 2;
|
||||
else if (Data[0x1642 + GBO] != 0) return 1;
|
||||
else return 0;
|
||||
// case GameVersion.Pt: break;
|
||||
default: return 0;
|
||||
}
|
||||
}
|
||||
|
@ -1049,53 +1057,41 @@ namespace PKHeX.Core
|
|||
switch (Version)
|
||||
{
|
||||
case GameVersion.DP:
|
||||
Data[0x1413 + GBO] = (byte)((Data[0x1413 + GBO] & 0xFE) | (value == 4 ? 1 : 0));
|
||||
Data[0x1415 + GBO] = (byte)((Data[0x1415 + GBO] & 0xFE) | (value >= 3 ? 1 : 0));
|
||||
Data[0x1404 + GBO] = (byte)((Data[0x1404 + GBO] & 0xFE) | (value >= 2 ? 1 : 0));
|
||||
Data[0x1414 + GBO] = (byte)((Data[0x1414 + GBO] & 0xFE) | (value >= 1 ? 1 : 0));
|
||||
Data[0x1413 + GBO] = (byte)(value == 4 ? 1 : 0);
|
||||
Data[0x1415 + GBO] = (byte)(value >= 3 ? 1 : 0);
|
||||
Data[0x1404 + GBO] = (byte)(value >= 2 ? 1 : 0);
|
||||
Data[0x1414 + GBO] = (byte)(value >= 1 ? 1 : 0);
|
||||
break;
|
||||
case GameVersion.HGSS:
|
||||
Data[0x15ED + GBO] = (byte)((Data[0x15ED + GBO] & 0xFE) | (value == 3 ? 1 : 0));
|
||||
Data[0x15EF + GBO] = (byte)((Data[0x15EF + GBO] & 0xFE) | (value >= 2 ? 1 : 0));
|
||||
Data[0x15EE + GBO] = (byte)((Data[0x15EE + GBO] & 0xFE) | (value >= 1 ? 1 : 0));
|
||||
Data[0x10D1 + GBO] = (byte)((Data[0x10D1 + GBO] & 0xF7) | (value >= 1 ? 8 : 0));
|
||||
Data[0x15ED + GBO] = (byte)(value == 3 ? 1 : 0);
|
||||
Data[0x15EF + GBO] = (byte)(value >= 2 ? 1 : 0);
|
||||
Data[0x15EE + GBO] = (byte)(value >= 1 ? 1 : 0);
|
||||
Data[0x10D1 + GBO] = (byte)(Data[0x10D1 + GBO] & ~8 | (value >= 1 ? 8 : 0));
|
||||
break;
|
||||
case GameVersion.Pt:
|
||||
Data[0x1641 + GBO] = (byte)(value == 4 ? 1 : 0);
|
||||
Data[0x1643 + GBO] = (byte)(value >= 3 ? 1 : 0);
|
||||
Data[0x1640 + GBO] = (byte)(value >= 2 ? 1 : 0);
|
||||
Data[0x1642 + GBO] = (byte)(value >= 1 ? 1 : 0);
|
||||
break;
|
||||
// case GameVersion.Pt: break;
|
||||
default: return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Honey Trees
|
||||
private const int HONEY_DP = 0x72E4;
|
||||
private const int HONEY_PT = 0x7F38;
|
||||
private int OFS_HONEY = int.MinValue;
|
||||
private const int HONEY_SIZE = 8;
|
||||
public HoneyTree getHoneyTree(int index)
|
||||
{
|
||||
if (index > 21)
|
||||
return null;
|
||||
switch (Version)
|
||||
{
|
||||
case GameVersion.DP:
|
||||
return new HoneyTree(getData(HONEY_DP + HONEY_SIZE*index, HONEY_SIZE));
|
||||
case GameVersion.Pt:
|
||||
return new HoneyTree(getData(HONEY_PT + HONEY_SIZE*index, HONEY_SIZE));
|
||||
}
|
||||
return null;
|
||||
if (index <= 21 && OFS_HONEY > 0)
|
||||
return new HoneyTree(getData(OFS_HONEY + HONEY_SIZE * index, HONEY_SIZE));
|
||||
else return null;
|
||||
}
|
||||
public void setHoneyTree(HoneyTree tree, int index)
|
||||
{
|
||||
if (index > 21)
|
||||
return;
|
||||
switch (Version)
|
||||
{
|
||||
case GameVersion.DP:
|
||||
setData(tree.Data, HONEY_DP + HONEY_SIZE*index);
|
||||
break;
|
||||
case GameVersion.Pt:
|
||||
setData(tree.Data, HONEY_PT + HONEY_SIZE*index);
|
||||
break;
|
||||
}
|
||||
if (index <= 21 && OFS_HONEY > 0)
|
||||
setData(tree.Data, OFS_HONEY + HONEY_SIZE * index);
|
||||
}
|
||||
public int[] MunchlaxTrees
|
||||
{
|
||||
|
@ -1116,78 +1112,6 @@ namespace PKHeX.Core
|
|||
return new[] { A, B, C, D };
|
||||
}
|
||||
}
|
||||
public int PoketchApps
|
||||
{
|
||||
get
|
||||
{
|
||||
int ret = 0;
|
||||
int ofs;
|
||||
switch (Version)
|
||||
{
|
||||
case GameVersion.DP: ofs = 0x114F; break;
|
||||
default: return ret;
|
||||
}
|
||||
ofs += GBO;
|
||||
for (int i = 0; i < 25; i++)
|
||||
{
|
||||
if (Data[ofs + i] != 0) ret |= 1 << i;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
set
|
||||
{
|
||||
int c = 0;
|
||||
int ofs;
|
||||
switch (Version)
|
||||
{
|
||||
case GameVersion.DP: ofs = 0x114F; break;
|
||||
default: return;
|
||||
}
|
||||
ofs += GBO;
|
||||
for (int i = 0; i < 25; i++)
|
||||
{
|
||||
if ((value & 1 << i) != 0)
|
||||
{
|
||||
c++;
|
||||
if (Data[ofs + i] == 0)
|
||||
Data[ofs + i] = 1;
|
||||
}
|
||||
else Data[ofs + i] = 0;
|
||||
}
|
||||
Data[ofs - 2] = (byte)c;
|
||||
Data[ofs - 1] = 0; // current used, force set for first App.
|
||||
}
|
||||
}
|
||||
public byte[] PoketchDotArtist
|
||||
{
|
||||
get
|
||||
{
|
||||
byte[] ret = new byte[120]; // 2bit*24px*20px
|
||||
int ofs;
|
||||
switch (Version)
|
||||
{
|
||||
case GameVersion.DP: ofs = 0x1176; break;
|
||||
default: return ret;
|
||||
}
|
||||
ofs += GBO;
|
||||
for (int i = 0; i < 120; i++)
|
||||
ret[i] = Data[ofs + i];
|
||||
return ret;
|
||||
}
|
||||
set
|
||||
{
|
||||
int ofs;
|
||||
switch (Version)
|
||||
{
|
||||
case GameVersion.DP: ofs = 0x1176; break;
|
||||
default: return;
|
||||
}
|
||||
ofs += GBO;
|
||||
for (int i = 0; i < 120; i++)
|
||||
Data[ofs + i] = value[i];
|
||||
Data[ofs - 0x2A] |= 0x04; // 0x114C "Touch!"
|
||||
}
|
||||
}
|
||||
|
||||
public override string getString(int Offset, int Count) => PKX.getString4(Data, Offset, Count);
|
||||
public override byte[] setString(string value, int maxLength, int PadToSize = 0, ushort PadWith = 0)
|
||||
|
|
|
@ -948,7 +948,7 @@ namespace PKHeX.WinForms.Controls
|
|||
B_CGearSkin.Enabled = SAV.Generation == 5;
|
||||
|
||||
B_OpenTrainerInfo.Enabled = B_OpenItemPouch.Enabled = SAV.HasParty; // Box RS
|
||||
B_OpenMiscEditor.Enabled = SAV.Generation <= 5 && SAV.Generation >= 3 && !SAV.Pt;
|
||||
B_OpenMiscEditor.Enabled = SAV is SAV3 || SAV is SAV4 || SAV is SAV5;
|
||||
|
||||
B_OpenHoneyTreeEditor.Enabled = SAV.DP || SAV.Pt;
|
||||
B_OpenRTCEditor.Enabled = SAV.RS || SAV.E;
|
||||
|
|
|
@ -35,7 +35,6 @@
|
|||
this.TAB_Main = new System.Windows.Forms.TabPage();
|
||||
this.NUD_BP = new System.Windows.Forms.NumericUpDown();
|
||||
this.L_BP = new System.Windows.Forms.Label();
|
||||
this.CHK_UpgradeTC = new System.Windows.Forms.CheckBox();
|
||||
this.CB_UpgradeMap = new System.Windows.Forms.ComboBox();
|
||||
this.GB_FlyDest = new System.Windows.Forms.GroupBox();
|
||||
this.B_AllFlyDest = new System.Windows.Forms.Button();
|
||||
|
@ -92,6 +91,8 @@
|
|||
this.NUD_CastleRankItem = new System.Windows.Forms.NumericUpDown();
|
||||
this.NUD_CastleRankInfo = new System.Windows.Forms.NumericUpDown();
|
||||
this.L_CastleRank01 = new System.Windows.Forms.Label();
|
||||
this.NUD_UGFlags = new System.Windows.Forms.NumericUpDown();
|
||||
this.L_UGFlags = new System.Windows.Forms.Label();
|
||||
this.TC_Misc.SuspendLayout();
|
||||
this.TAB_Main.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUD_BP)).BeginInit();
|
||||
|
@ -128,6 +129,7 @@
|
|||
((System.ComponentModel.ISupportInitialize)(this.NUD_CastleRankRcv)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUD_CastleRankItem)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUD_CastleRankInfo)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUD_UGFlags)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// B_Cancel
|
||||
|
@ -164,9 +166,10 @@
|
|||
//
|
||||
// TAB_Main
|
||||
//
|
||||
this.TAB_Main.Controls.Add(this.L_UGFlags);
|
||||
this.TAB_Main.Controls.Add(this.NUD_UGFlags);
|
||||
this.TAB_Main.Controls.Add(this.NUD_BP);
|
||||
this.TAB_Main.Controls.Add(this.L_BP);
|
||||
this.TAB_Main.Controls.Add(this.CHK_UpgradeTC);
|
||||
this.TAB_Main.Controls.Add(this.CB_UpgradeMap);
|
||||
this.TAB_Main.Controls.Add(this.GB_FlyDest);
|
||||
this.TAB_Main.Controls.Add(this.GB_Poketch);
|
||||
|
@ -205,16 +208,6 @@
|
|||
this.L_BP.Text = "BP:";
|
||||
this.L_BP.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
|
||||
//
|
||||
// CHK_UpgradeTC
|
||||
//
|
||||
this.CHK_UpgradeTC.AutoSize = true;
|
||||
this.CHK_UpgradeTC.Location = new System.Drawing.Point(5, 40);
|
||||
this.CHK_UpgradeTC.Name = "CHK_UpgradeTC";
|
||||
this.CHK_UpgradeTC.Size = new System.Drawing.Size(165, 16);
|
||||
this.CHK_UpgradeTC.TabIndex = 2;
|
||||
this.CHK_UpgradeTC.Text = "Upgrade TrainerCard (HOF)";
|
||||
this.CHK_UpgradeTC.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// CB_UpgradeMap
|
||||
//
|
||||
this.CB_UpgradeMap.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
|
@ -1041,6 +1034,32 @@
|
|||
this.L_CastleRank01.Text = "Recovery / Item / Info";
|
||||
this.L_CastleRank01.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// NUD_UGFlags
|
||||
//
|
||||
this.NUD_UGFlags.Location = new System.Drawing.Point(109, 33);
|
||||
this.NUD_UGFlags.Maximum = new decimal(new int[] {
|
||||
999999,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.NUD_UGFlags.Name = "NUD_UGFlags";
|
||||
this.NUD_UGFlags.Size = new System.Drawing.Size(61, 19);
|
||||
this.NUD_UGFlags.TabIndex = 2;
|
||||
this.NUD_UGFlags.Value = new decimal(new int[] {
|
||||
999999,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
//
|
||||
// L_UGFlags
|
||||
//
|
||||
this.L_UGFlags.Location = new System.Drawing.Point(3, 30);
|
||||
this.L_UGFlags.Name = "L_UGFlags";
|
||||
this.L_UGFlags.Size = new System.Drawing.Size(100, 23);
|
||||
this.L_UGFlags.TabIndex = 7;
|
||||
this.L_UGFlags.Text = "Flags Obtained";
|
||||
this.L_UGFlags.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
|
||||
//
|
||||
// SAV_Misc4
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
|
||||
|
@ -1092,6 +1111,7 @@
|
|||
((System.ComponentModel.ISupportInitialize)(this.NUD_CastleRankRcv)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUD_CastleRankItem)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUD_CastleRankInfo)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.NUD_UGFlags)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
@ -1104,7 +1124,6 @@
|
|||
private System.Windows.Forms.TabPage TAB_Main;
|
||||
private System.Windows.Forms.NumericUpDown NUD_BP;
|
||||
private System.Windows.Forms.Label L_BP;
|
||||
private System.Windows.Forms.CheckBox CHK_UpgradeTC;
|
||||
private System.Windows.Forms.ComboBox CB_UpgradeMap;
|
||||
private System.Windows.Forms.GroupBox GB_FlyDest;
|
||||
private System.Windows.Forms.Button B_AllFlyDest;
|
||||
|
@ -1161,5 +1180,7 @@
|
|||
private System.Windows.Forms.NumericUpDown NUD_CastleRankItem;
|
||||
private System.Windows.Forms.NumericUpDown NUD_CastleRankInfo;
|
||||
private System.Windows.Forms.Label L_CastleRank01;
|
||||
private System.Windows.Forms.Label L_UGFlags;
|
||||
private System.Windows.Forms.NumericUpDown NUD_UGFlags;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,28 +17,66 @@ namespace PKHeX.WinForms
|
|||
SAV = (SAV4)(Origin = sav).Clone();
|
||||
InitializeComponent();
|
||||
|
||||
int GBO = SAV.getGBO;
|
||||
switch (SAV.Version)
|
||||
{
|
||||
case GameVersion.D:
|
||||
case GameVersion.P:
|
||||
case GameVersion.DP:
|
||||
readMain(isPoketch: true, isFly: true, isBP: true, isTC: false, isMap: false);
|
||||
readBF();
|
||||
ofsFlag = GBO + 0xFDC;
|
||||
ofsBP = GBO + 0x65F8;
|
||||
ofsUGFlagCount = GBO + 0x3A60;
|
||||
ofsPoketch = GBO + 0x114F;
|
||||
CB_UpgradeMap.Visible = false;
|
||||
GB_Prints.Visible = GB_Prints.Enabled = GB_Hall.Visible = GB_Hall.Enabled = GB_Castle.Visible = GB_Castle.Enabled = false;
|
||||
BFF = new[] { new[] { 0, 1, 0x5FCA, 0x04, 0x6601 }, };
|
||||
break;
|
||||
case GameVersion.Pt:
|
||||
ofsFlag = GBO + 0xFEC;
|
||||
ofsBP = GBO + 0x7234;
|
||||
ofsUGFlagCount = GBO + 0x3CE8;
|
||||
ofsPoketch = GBO + 0x1163;
|
||||
CB_UpgradeMap.Visible = false;
|
||||
ofsPrints = GBO + 0xE4A;
|
||||
BFF = new[] {
|
||||
new[] { 0, 1, 0x68E0, 0x04, 0x723D },
|
||||
new[] { 1, 0, 0x68F4, 0x10, 0x7EF8 },
|
||||
new[] { 0, 0, 0x6924, 0x18, 0x7EFC },
|
||||
new[] { 2, 0, 0x696C, 0x10, 0x7F00 },
|
||||
new[] { 0, 0, 0x699C, 0x04, 0x7F04 },
|
||||
};
|
||||
ofsHallStat = GBO + 0x2820;
|
||||
break;
|
||||
case GameVersion.HG:
|
||||
case GameVersion.SS:
|
||||
case GameVersion.HGSS:
|
||||
readMain(isPoketch: false, isFly: true, isBP: true, isTC: true, isMap: true);
|
||||
readBF();
|
||||
break;
|
||||
default:
|
||||
readMain();
|
||||
TC_Misc.Controls.Remove(TAB_BF);
|
||||
ofsFlag = GBO + 0x10C4;
|
||||
ofsBP = GBO + 0x5BB8;
|
||||
NUD_UGFlags.Visible = false;
|
||||
GB_Poketch.Visible = false;
|
||||
ofsMap = GBO + 0xBAE7;
|
||||
ofsPrints = GBO + 0xE7E;
|
||||
BFF = new[] {
|
||||
// { BFV, BFT, addr, 1BFTlen, checkBit
|
||||
new[] { 0, 1, 0x5264, 0x04, 0x5BC1 },
|
||||
new[] { 1, 0, 0x5278, 0x10, 0x687C },
|
||||
new[] { 0, 0, 0x52A8, 0x18, 0x6880 },
|
||||
new[] { 2, 0, 0x52F0, 0x10, 0x6884 },
|
||||
new[] { 0, 0, 0x5320, 0x04, 0x6888 },
|
||||
};
|
||||
ofsHallStat = GBO + 0x230C;
|
||||
break;
|
||||
default: return;
|
||||
}
|
||||
ofsFly = ofsFlag + 0x136;
|
||||
readMain();
|
||||
readBF();
|
||||
}
|
||||
|
||||
private void B_Save_Click(object sender, EventArgs e)
|
||||
{
|
||||
saveMain();
|
||||
if (TC_Misc.Controls.Contains(TAB_BF))
|
||||
saveBF();
|
||||
saveBF();
|
||||
|
||||
Origin.setData(SAV.Data, 0);
|
||||
Close();
|
||||
|
@ -49,137 +87,84 @@ namespace PKHeX.WinForms
|
|||
Close();
|
||||
}
|
||||
|
||||
private int ofsFlag;
|
||||
private int ofsFly;
|
||||
private int ofsBP;
|
||||
private int ofsMap = -1;
|
||||
private int ofsUGFlagCount = -1;
|
||||
private int ofsPoketch = -1;
|
||||
private int[] FlyDestC;
|
||||
private void readMain(bool isPoketch = false, bool isFly = false, bool isBP = false, bool isTC = false, bool isMap = false)
|
||||
private void readMain()
|
||||
{
|
||||
int GBO = SAV.getGBO;
|
||||
if (isPoketch)
|
||||
readPoketch();
|
||||
else GB_Poketch.Visible = false;
|
||||
|
||||
if (isFly)
|
||||
int[] FlyDestD;
|
||||
System.Collections.Generic.List<ComboItem> metLocationList;
|
||||
switch (SAV.Version)
|
||||
{
|
||||
string[] FlyDestA = null;
|
||||
switch (SAV.Version)
|
||||
{
|
||||
case GameVersion.HGSS:
|
||||
ofsFly = GBO + 0x11FA;
|
||||
FlyDestA = new[] {
|
||||
"NewBark Town", "Cherrygrove City", "Violet City", "Azalea Town",
|
||||
"Goldenrod City", "Ecruteak City", "Olivine City", "Cianwood City",
|
||||
"Mahogany Town", "Lake of Rage", "Blackthorn City",
|
||||
"Safari Zone Gate", "Frontier Access", "Mt.Silver",
|
||||
"Victory Road", "Indigo Plateau",
|
||||
"Pallet Town", "Viridian City", "Pewter City", "Cerulean City", "Vermilion City",
|
||||
"Lavender Town", "Celadon City", "Saffron City", "Fuchsia City", "Cinnabar Island"
|
||||
};
|
||||
FlyDestC = new[] {
|
||||
11, 12, 13, 14,
|
||||
16, 18, 17, 15,
|
||||
19, 20, 21,
|
||||
30, 27, 22,
|
||||
33, 9,
|
||||
0, 1, 2, 3, 5,
|
||||
4, 6, 10, 7, 8
|
||||
};
|
||||
break;
|
||||
case GameVersion.DP:
|
||||
ofsFly = GBO + 0x1112;
|
||||
FlyDestA = new[] {
|
||||
"Twinleaf Town", "Sandgem Town", "Jubilife City", "Oreburgh City",
|
||||
"Floaroma Town", "Eterna City", "Hearthome City", "Solaceon Town",
|
||||
"Veilstone City", "Pastoria City", "Celestic Town", "Canalave City",
|
||||
"Snowpoint City", "Sunyshore City",
|
||||
"Pokemon League", "Fight Area", "Survival Area", "Resort Area"
|
||||
};
|
||||
FlyDestC = new[] {
|
||||
0, 1, 7, 9,
|
||||
2, 10, 11, 3,
|
||||
13, 12, 4, 8,
|
||||
15, 14,
|
||||
68, 17, 5, 6
|
||||
};
|
||||
break;
|
||||
}
|
||||
uint val = BitConverter.ToUInt32(SAV.Data, ofsFly);
|
||||
CLB_FlyDest.Items.Clear();
|
||||
CLB_FlyDest.Items.AddRange(FlyDestA);
|
||||
for (int i = 0; i < CLB_FlyDest.Items.Count; i++)
|
||||
{
|
||||
if (FlyDestC[i] < 32)
|
||||
CLB_FlyDest.SetItemChecked(i, (val & (uint)1 << FlyDestC[i]) != 0);
|
||||
else
|
||||
CLB_FlyDest.SetItemChecked(i, (SAV.Data[ofsFly + (FlyDestC[i] >> 3)] & 1 << (FlyDestC[i] - (FlyDestC[i] >> 3 << 3))) != 0);
|
||||
}
|
||||
case GameVersion.D:
|
||||
case GameVersion.P:
|
||||
case GameVersion.DP:
|
||||
case GameVersion.Pt:
|
||||
metLocationList = GameInfo.getLocationList(GameVersion.Pt, 4, false);
|
||||
FlyDestD = new[] { 1, 2, 6, 8, 3, 9, 10, 4, 12, 11, 5, 7, 14, 13, 54, 15, 81, 82, 83, 55, };
|
||||
FlyDestC = new[] { 0, 1, 7, 9, 2, 10, 11, 3, 13, 12, 4, 8, 15, 14, 16, 68, 17, 5, 6, 67, };
|
||||
break;
|
||||
case GameVersion.HG:
|
||||
case GameVersion.SS:
|
||||
case GameVersion.HGSS:
|
||||
metLocationList = GameInfo.getLocationList(GameVersion.HG, 4, false);
|
||||
FlyDestD = new[] { 126, 127, 128, 129, 131, 133, 132, 130, 134, 135, 136, 227, 229, 137, 221, 147, 138, 139, 140, 141, 143, 142, 144, 148, 145, 146, 225, };
|
||||
FlyDestC = new[] { 11, 12, 13, 14, 16, 18, 17, 15, 19, 20, 21, 30, 27, 22, 33, 9, 0, 1, 2, 3, 5, 4, 6, 10, 7, 8, 35, };
|
||||
break;
|
||||
default: return;
|
||||
}
|
||||
else GB_FlyDest.Visible = false;
|
||||
uint valFly = BitConverter.ToUInt32(SAV.Data, ofsFly);
|
||||
CLB_FlyDest.Items.Clear();
|
||||
for (int i = 0; i < FlyDestD.Length; i++)
|
||||
CLB_FlyDest.Items.Add(metLocationList.First(v => v.Value == FlyDestD[i]).Text, FlyDestC[i] < 32 ? (valFly & (uint)1 << FlyDestC[i]) != 0 : (SAV.Data[ofsFly + (FlyDestC[i] >> 3)] & 1 << (FlyDestC[i] & 7)) != 0);
|
||||
uint valBP = BitConverter.ToUInt16(SAV.Data, ofsBP);
|
||||
NUD_BP.Value = valBP > 9999 ? 9999 : valBP;
|
||||
|
||||
if (isBP)
|
||||
if (ofsPoketch > 0) readPoketch();
|
||||
if (ofsUGFlagCount > 0)
|
||||
{
|
||||
switch (SAV.Version)
|
||||
{
|
||||
case GameVersion.HGSS: ofsBP = GBO + 0x5BB8; break;
|
||||
case GameVersion.DP: ofsBP = GBO + 0x65F8; break;
|
||||
}
|
||||
uint val = BitConverter.ToUInt16(SAV.Data, ofsBP);
|
||||
if (val > 9999) val = 9999;
|
||||
NUD_BP.Value = val;
|
||||
uint fc = BitConverter.ToUInt32(SAV.Data, ofsUGFlagCount) & 0xFFFFF;
|
||||
NUD_UGFlags.Value = fc > 999999 ? 999999 : fc;
|
||||
}
|
||||
else L_BP.Visible = NUD_BP.Visible = false;
|
||||
|
||||
if (isTC)
|
||||
CHK_UpgradeTC.Checked = (SAV.Data[GBO + 0x11F0] & 0x10) != 0;
|
||||
else CHK_UpgradeTC.Visible = false;
|
||||
|
||||
if (isMap)
|
||||
if (ofsMap > 0)
|
||||
{
|
||||
string[] items = new[] { "Map Johto", "Map Johto+", "Map Johto & Kanto" };
|
||||
int index = SAV.Data[SAV.getGBO + 0xBAE7] >> 3 & 3;
|
||||
int index = SAV.Data[ofsMap] >> 3 & 3;
|
||||
if (index > 2) index = 2;
|
||||
CB_UpgradeMap.Items.AddRange(items);
|
||||
CB_UpgradeMap.SelectedIndex = index;
|
||||
}
|
||||
else CB_UpgradeMap.Visible = false;
|
||||
}
|
||||
private void saveMain()
|
||||
{
|
||||
int GBO = SAV.getGBO;
|
||||
if (GB_Poketch.Visible)
|
||||
uint valFly = BitConverter.ToUInt32(SAV.Data, ofsFly);
|
||||
for (int i = 0; i < CLB_FlyDest.Items.Count; i++)
|
||||
{
|
||||
savePoketch();
|
||||
}
|
||||
if (GB_FlyDest.Visible)
|
||||
{
|
||||
uint val = BitConverter.ToUInt32(SAV.Data, ofsFly);
|
||||
for (int i = 0; i < CLB_FlyDest.Items.Count; i++)
|
||||
if (FlyDestC[i] < 32)
|
||||
{
|
||||
if (FlyDestC[i] < 32)
|
||||
{
|
||||
if (CLB_FlyDest.GetItemChecked(i))
|
||||
val |= (uint)1 << FlyDestC[i];
|
||||
else
|
||||
val &= ~((uint)1 << FlyDestC[i]);
|
||||
}
|
||||
else SAV.Data[ofsFly + (FlyDestC[i] >> 3)] = (byte)(SAV.Data[ofsFly + (FlyDestC[i] >> 3)] & ~(1 << (FlyDestC[i] - (FlyDestC[i] >> 3 << 3))) | ((CLB_FlyDest.GetItemChecked(i) ? 1 : 0) << (FlyDestC[i] - (FlyDestC[i] >> 3 << 3))));
|
||||
if (CLB_FlyDest.GetItemChecked(i))
|
||||
valFly |= (uint)1 << FlyDestC[i];
|
||||
else
|
||||
valFly &= ~((uint)1 << FlyDestC[i]);
|
||||
}
|
||||
BitConverter.GetBytes(val).CopyTo(SAV.Data, ofsFly);
|
||||
|
||||
else SAV.Data[ofsFly + (FlyDestC[i] >> 3)] = (byte)(SAV.Data[ofsFly + (FlyDestC[i] >> 3)] & ~(1 << (FlyDestC[i] & 7)) | (CLB_FlyDest.GetItemChecked(i) ? 1 << (FlyDestC[i] & 7) : 0));
|
||||
}
|
||||
if (NUD_BP.Visible)
|
||||
BitConverter.GetBytes((ushort)NUD_BP.Value).CopyTo(SAV.Data, ofsBP);
|
||||
BitConverter.GetBytes(valFly).CopyTo(SAV.Data, ofsFly);
|
||||
BitConverter.GetBytes((ushort)NUD_BP.Value).CopyTo(SAV.Data, ofsBP);
|
||||
|
||||
if (CHK_UpgradeTC.Visible)
|
||||
SAV.Data[GBO + 0x11F0] = (byte)(SAV.Data[GBO + 0x11F0] & 0xEF | (CHK_UpgradeTC.Checked ? 0x10 : 0));
|
||||
|
||||
if (CB_UpgradeMap.Visible)
|
||||
if (ofsPoketch > 0) savePoketch();
|
||||
if (ofsUGFlagCount > 0)
|
||||
BitConverter.GetBytes(BitConverter.ToUInt32(SAV.Data, ofsUGFlagCount) & ~(uint)0xFFFFF | (uint)NUD_UGFlags.Value).CopyTo(SAV.Data, ofsUGFlagCount);
|
||||
if (ofsMap > 0)
|
||||
{
|
||||
int val = CB_UpgradeMap.SelectedIndex;
|
||||
if (val >= 0)
|
||||
SAV.Data[GBO + 0xBAE7] = (byte)(SAV.Data[GBO + 0xBAE7] & 0xE7 | val << 3);
|
||||
int valMap = CB_UpgradeMap.SelectedIndex;
|
||||
if (valMap >= 0)
|
||||
SAV.Data[ofsMap] = (byte)(SAV.Data[ofsMap] & 0xE7 | valMap << 3);
|
||||
}
|
||||
|
||||
}
|
||||
private void B_AllFlyDest_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
@ -190,6 +175,7 @@ namespace PKHeX.WinForms
|
|||
#region Poketch
|
||||
private byte[] DotArtistByte;
|
||||
private byte[] ColorTable;
|
||||
private bool[] oldPoketchVal;
|
||||
private readonly ToolTip tip1 = new ToolTip();
|
||||
private void readPoketch()
|
||||
{
|
||||
|
@ -200,14 +186,15 @@ namespace PKHeX.WinForms
|
|||
"16 Move Tester", "17 Calendar", "18 Dot Artist", "19 Roulette", "20 Trainer Counter",
|
||||
"21 Kitchen Timer", "22 Color Changer", "23 Matchup Checker", "24 Stopwatch", "25 Alarm Clock"
|
||||
};
|
||||
oldPoketchVal = new bool[PoketchTitle.Length];
|
||||
CLB_Poketch.Items.Clear();
|
||||
CLB_Poketch.Items.AddRange(PoketchTitle);
|
||||
for (int i = 0; i < PoketchTitle.Length; i++)
|
||||
{
|
||||
oldPoketchVal[i] = SAV.Data[ofsPoketch + i] != 0;
|
||||
CLB_Poketch.Items.Add(PoketchTitle[i], oldPoketchVal[i]);
|
||||
}
|
||||
|
||||
int ret = SAV.PoketchApps;
|
||||
for (int i = 0; i < CLB_Poketch.Items.Count; i++)
|
||||
CLB_Poketch.SetItemChecked(i, (ret & 1 << i) != 0);
|
||||
|
||||
DotArtistByte = SAV.PoketchDotArtist;
|
||||
DotArtistByte = SAV.Data.Skip(ofsPoketch + 0x27).Take(120).ToArray();
|
||||
ColorTable = new byte[] { 248, 168, 88, 8 };
|
||||
setPictureBoxFromFlags(DotArtistByte);
|
||||
string tip = "Guide about D&D ImageFile Format";
|
||||
|
@ -220,12 +207,24 @@ namespace PKHeX.WinForms
|
|||
}
|
||||
private void savePoketch()
|
||||
{
|
||||
int ret = 0;
|
||||
for(int i = 0; i < CLB_Poketch.Items.Count; i++)
|
||||
if (CLB_Poketch.GetItemChecked(i)) ret |= 1 << i;
|
||||
|
||||
SAV.PoketchApps = ret;
|
||||
SAV.PoketchDotArtist = DotArtistByte;
|
||||
byte count = 0;
|
||||
for (int i = 0; i < CLB_Poketch.Items.Count; i++)
|
||||
{
|
||||
if (CLB_Poketch.GetItemChecked(i))
|
||||
{
|
||||
count++;
|
||||
if (!oldPoketchVal[i])
|
||||
SAV.Data[ofsPoketch + i] = 1;
|
||||
}
|
||||
else if (oldPoketchVal[i])
|
||||
SAV.Data[ofsPoketch + i] = 0;
|
||||
}
|
||||
SAV.Data[ofsPoketch - 2] = count;
|
||||
byte current = SAV.Data[ofsPoketch - 1];
|
||||
if (current >= CLB_Poketch.Items.Count || !CLB_Poketch.GetItemChecked(current))
|
||||
SAV.Data[ofsPoketch - 1] = 0;
|
||||
DotArtistByte.CopyTo(SAV.Data, ofsPoketch + 0x27);
|
||||
SAV.Data[ofsPoketch - 3] |= 0x04; // "Touch!"
|
||||
}
|
||||
|
||||
private void setPictureBoxFromFlags(byte[] inp)
|
||||
|
@ -386,7 +385,7 @@ namespace PKHeX.WinForms
|
|||
|
||||
#region BattleFrontier
|
||||
private int[] Prints;
|
||||
private int ofsPrints;
|
||||
private int ofsPrints = -1;
|
||||
private Color[] PrintColorA;
|
||||
private Button[] PrintButtonA;
|
||||
private bool editing;
|
||||
|
@ -399,58 +398,32 @@ namespace PKHeX.WinForms
|
|||
private string[] BFN;
|
||||
private readonly ToolTip tip2 = new ToolTip();
|
||||
private NumericUpDown[] HallNUDA;
|
||||
private bool XBupdated = false;
|
||||
private bool HallStatUpdated = false;
|
||||
private int ofsHallStat = -1;
|
||||
private void readBF()
|
||||
{
|
||||
switch (SAV.Version)
|
||||
{
|
||||
case GameVersion.DP:
|
||||
BFF = new[]
|
||||
{
|
||||
new[] { 0, 1, 0x5FCA, 0x04, 0x6601 },
|
||||
};
|
||||
break;
|
||||
case GameVersion.HGSS:
|
||||
BFF = new[] {
|
||||
// { BFV, BFT, addr, 1BFTlen, checkBit
|
||||
new[] { 0, 1, 0x5264, 0x04, 0x5BC1 },
|
||||
new[] { 1, 0, 0x5278, 0x10, 0x687C },
|
||||
new[] { 0, 0, 0x52A8, 0x18, 0x6880 },
|
||||
new[] { 2, 0, 0x52F0, 0x10, 0x6884 },
|
||||
new[] { 0, 0, 0x5320, 0x04, 0x6888 },
|
||||
};
|
||||
break;
|
||||
}
|
||||
BFV = new[]
|
||||
{
|
||||
BFV = new[] {
|
||||
new[] { 2, 0 }, // Max, Current
|
||||
new[] { 2, 0, 3, 1 }, // Max, Current, Max(Trade), Current(Trade)
|
||||
new[] { 2, 0, 1, -1, 3 }, // Max, Current, Current(CP), (UsedCP), Max(CP)
|
||||
};
|
||||
BFT = new[] {
|
||||
new[] { "Singles", "Doubles", "Multi" },
|
||||
new[] { "Singles", "Doubles", "Multi(NPC)", "Multi(2P)", "WiFi" },
|
||||
};
|
||||
BFN = new[]
|
||||
{
|
||||
"Tower","Factory","Hall","Castle","Arcade"
|
||||
new[] { "Singles", "Doubles", "Multi(Trainer)", "Multi(friend)", "WiFi" },
|
||||
};
|
||||
BFN = new[] { "Tower", "Factory", "Hall", "Castle", "Arcade" };
|
||||
if (SAV.DP) BFN = BFN.Take(1).ToArray();
|
||||
StatNUDA = new[] { NUD_Stat0, NUD_Stat1, NUD_Stat2, NUD_Stat3 };
|
||||
StatLabelA = new[] { L_Stat0, L_Stat1, L_Stat2, L_Stat3 };
|
||||
StatRBA = new[] { RB_Stats3_01, RB_Stats3_02 };
|
||||
|
||||
switch (SAV.Version)
|
||||
{
|
||||
case GameVersion.DP: BFN = BFN.Take(1).ToArray(); ofsPrints = -1; break;
|
||||
case GameVersion.HGSS: ofsPrints = SAV.getGBO + 0xE7E; break;
|
||||
}
|
||||
if (ofsPrints > 0)
|
||||
{
|
||||
PrintColorA = new[] { Color.Transparent, Color.Silver, Color.Gold };
|
||||
PrintButtonA = new[] { BTN_PrintTower, BTN_PrintFactory, BTN_PrintHall, BTN_PrintCastle, BTN_PrintArcade };
|
||||
Prints = new int[PrintButtonA.Length];
|
||||
for (int i = 0; i < Prints.Length; i++)
|
||||
Prints[i] = 1 + Math.Sign((BitConverter.ToUInt16(SAV.Data, ofsPrints + i * 2) >> 1) - 1);
|
||||
Prints[i] = 1 + Math.Sign((BitConverter.ToUInt16(SAV.Data, ofsPrints + (i << 1)) >> 1) - 1);
|
||||
setPrints();
|
||||
|
||||
HallNUDA = new[] {
|
||||
|
@ -463,8 +436,34 @@ namespace PKHeX.WinForms
|
|||
for (int i = 0; i < HallNUDA.Length; i++)
|
||||
tip2.SetToolTip(HallNUDA[i], TypeName[typenameIndex[i]]);
|
||||
}
|
||||
else
|
||||
GB_Prints.Visible = GB_Prints.Enabled = GB_Hall.Visible = GB_Hall.Enabled = GB_Castle.Visible = GB_Castle.Enabled = false;
|
||||
if (ofsHallStat > 0)
|
||||
{
|
||||
bool f = false;
|
||||
for (int i = 0, h; i < 2; i++, ofsHallStat += 0x14)
|
||||
{
|
||||
h = BitConverter.ToInt32(SAV.Data, ofsHallStat);
|
||||
if (h == -1) continue;
|
||||
for (int j = 0; j < 0x20; j++)
|
||||
{
|
||||
for (int k = 0, a = j + 0x20 << 12; k < 2; k++, a += 0x40000)
|
||||
{
|
||||
if (h == BitConverter.ToInt32(SAV.Data, a) && BitConverter.ToInt16(SAV.Data, a + 0xBA8) == 0xBA0)
|
||||
{
|
||||
f = true;
|
||||
ofsHallStat = a;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (f) break;
|
||||
}
|
||||
if (f) break;
|
||||
}
|
||||
if (!f)
|
||||
{
|
||||
ofsHallStat = -1;
|
||||
NUD_HallStreaks.Visible = NUD_HallStreaks.Enabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
editing = true;
|
||||
CB_Stats1.Items.Clear();
|
||||
|
@ -486,13 +485,13 @@ namespace PKHeX.WinForms
|
|||
}
|
||||
private void saveBF()
|
||||
{
|
||||
if(GB_Prints.Visible)
|
||||
if(ofsPrints > 0)
|
||||
for(int i = 0; i < Prints.Length; i++)
|
||||
{
|
||||
if (Prints[i] == 1 + Math.Sign((BitConverter.ToUInt16(SAV.Data, ofsPrints + i * 2) >> 1) - 1)) continue;
|
||||
BitConverter.GetBytes(Prints[i] << 1).CopyTo(SAV.Data, ofsPrints + i * 2);
|
||||
if (Prints[i] == 1 + Math.Sign((BitConverter.ToUInt16(SAV.Data, ofsPrints + (i << 1)) >> 1) - 1)) continue;
|
||||
BitConverter.GetBytes(Prints[i] << 1).CopyTo(SAV.Data, ofsPrints + (i << 1));
|
||||
}
|
||||
if (XBupdated) setXBChksum();
|
||||
if (HallStatUpdated) BitConverter.GetBytes(SaveUtil.ccitt16(SAV.Data.Skip(ofsHallStat).Take(0xBAE).ToArray())).CopyTo(SAV.Data, ofsHallStat + 0xBAE);
|
||||
}
|
||||
|
||||
private void setPrints()
|
||||
|
@ -548,14 +547,14 @@ namespace PKHeX.WinForms
|
|||
if (editing) return;
|
||||
if (sender is RadioButton && ((RadioButton)sender).Checked == false) return;
|
||||
StatAddrControl(SetValToSav: -2, SetSavToVal: true);
|
||||
if (CB_Stats1.SelectedIndex == 2)
|
||||
if (GB_Hall.Visible)
|
||||
{
|
||||
GB_Hall.Text = "Battle Hall (" + (string)CB_Stats2.SelectedItem + ")";
|
||||
editing = true;
|
||||
getHallStat();
|
||||
editing = false;
|
||||
}
|
||||
else if (CB_Stats1.SelectedIndex == 3)
|
||||
else if (GB_Castle.Visible)
|
||||
{
|
||||
GB_Castle.Text = "Battle Castle (" + (string)CB_Stats2.SelectedItem + ")";
|
||||
editing = true;
|
||||
|
@ -571,12 +570,7 @@ namespace PKHeX.WinForms
|
|||
int addrVal = SAV.getGBO + BFF[Facility][2] + BFF[Facility][3] * BattleType + (RBi << 3);
|
||||
int addrFlag = SAV.getGBO + BFF[Facility][4];
|
||||
byte maskFlag = (byte)(1 << BattleType + (RBi << 2));
|
||||
int TowerContinueCountOfs = 0;
|
||||
switch (SAV.Version)
|
||||
{
|
||||
case GameVersion.DP: TowerContinueCountOfs = 3; break;
|
||||
case GameVersion.HGSS: TowerContinueCountOfs = 1; break;
|
||||
}
|
||||
int TowerContinueCountOfs = SAV.DP ? 3 : 1;
|
||||
|
||||
if (SetSavToVal)
|
||||
{
|
||||
|
@ -585,8 +579,7 @@ namespace PKHeX.WinForms
|
|||
{
|
||||
if (BFV[BFF[Facility][0]][i] < 0) continue;
|
||||
int vali = BitConverter.ToUInt16(SAV.Data, addrVal + (i << 1));
|
||||
if (vali > 9999) vali = 9999;
|
||||
StatNUDA[BFV[BFF[Facility][0]][i]].Value = vali;
|
||||
StatNUDA[BFV[BFF[Facility][0]][i]].Value = vali > 9999 ? 9999 : vali;
|
||||
}
|
||||
CHK_Continue.Checked = (SAV.Data[addrFlag] & maskFlag) != 0;
|
||||
|
||||
|
@ -605,8 +598,7 @@ namespace PKHeX.WinForms
|
|||
|
||||
SetValToSav = Array.IndexOf(BFV[BFF[Facility][0]], SetValToSav);
|
||||
if (SetValToSav < 0) return;
|
||||
if (val > 9999) val = 9999;
|
||||
BitConverter.GetBytes(val).CopyTo(SAV.Data, addrVal + (SetValToSav << 1));
|
||||
BitConverter.GetBytes((ushort)(val > 9999 ? 9999 : val)).CopyTo(SAV.Data, addrVal + (SetValToSav << 1));
|
||||
return;
|
||||
}
|
||||
else if (SetValToSav == -1)
|
||||
|
@ -648,18 +640,6 @@ namespace PKHeX.WinForms
|
|||
StatAddrControl(SetValToSav: -1, SetSavToVal: false);
|
||||
}
|
||||
|
||||
// memo BattleStage !:write
|
||||
//
|
||||
// 0x0230C randC randC !!randD randD !randD randD !!randE
|
||||
// 0x02320 randB randB !!randC randC !randC randC !!randD
|
||||
// 0x0F618 1235 1235 !!1237 1237 !!1239 1239 !!1241
|
||||
// 0x26000 randC randC randC randC randC randC !!randE
|
||||
// -->StartBS-->EndBS -->MenuSave-->MenuSave -->StartBS-->EndBS
|
||||
// 0x4230C randB !!randC randC !!randD randD !randD randD
|
||||
// 0x42320 randA !!randB randB !!randC randC !randC randC
|
||||
// 0x4F618 1234 !!1236 1236 !!1238 1238 !!1240 1240
|
||||
// 0x66000 randB randB !!randD randD randD randD randD
|
||||
|
||||
private int species = -1;
|
||||
private void changeCBSpecies(object sender, EventArgs e)
|
||||
{
|
||||
|
@ -676,9 +656,7 @@ namespace PKHeX.WinForms
|
|||
for (int i = 0, val; i < na.Length; i++)
|
||||
{
|
||||
val = BitConverter.ToInt16(SAV.Data, ofs + (i << 1));
|
||||
if (val > na[i].Maximum) val = (int)na[i].Maximum;
|
||||
if (val < na[i].Minimum) val = (int)na[i].Minimum;
|
||||
na[i].Value = val;
|
||||
na[i].Value = val > na[i].Maximum ? na[i].Maximum : val < na[i].Minimum ? na[i].Minimum : val;
|
||||
}
|
||||
}
|
||||
private void NUD_CastleRank_ValueChanged(object sender, EventArgs e)
|
||||
|
@ -715,12 +693,11 @@ namespace PKHeX.WinForms
|
|||
}
|
||||
L_SumHall.Text = s.ToString();
|
||||
|
||||
int XBO = getXBO();
|
||||
NUD_HallStreaks.Visible = NUD_HallStreaks.Enabled = XBO > 0;
|
||||
if (XBO <= 0) return;
|
||||
ushort v = BitConverter.ToUInt16(SAV.Data, XBO + 4 + 0x3DE * CB_Stats2.SelectedIndex + (species << 1));
|
||||
if (v > 9999) v = 9999;
|
||||
NUD_HallStreaks.Value = v;
|
||||
if (ofsHallStat > 0)
|
||||
{
|
||||
ushort v = BitConverter.ToUInt16(SAV.Data, ofsHallStat + 4 + 0x3DE * CB_Stats2.SelectedIndex + (species << 1));
|
||||
NUD_HallStreaks.Value = v > 9999 ? 9999 : v;
|
||||
}
|
||||
}
|
||||
|
||||
private void CHK_HallCurrent_CheckedChanged(object sender, EventArgs e)
|
||||
|
@ -744,44 +721,11 @@ namespace PKHeX.WinForms
|
|||
|
||||
private void NUD_HallStreaks_ValueChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (editing) return;
|
||||
int XBO = getXBO();
|
||||
if (XBO < 0) return;
|
||||
BitConverter.GetBytes((ushort)NUD_HallStreaks.Value).CopyTo(SAV.Data, XBO + 4 + 0x3DE * CB_Stats2.SelectedIndex + (species << 1));
|
||||
XBupdated = true;
|
||||
}
|
||||
private int getXBO()
|
||||
{
|
||||
int[] XBC = new int[0x1E * 2];
|
||||
for (int i = 0; i < 0x1E; i++)
|
||||
{
|
||||
XBC[i] = BitConverter.ToInt32(SAV.Data, 0x22 + i << 12);
|
||||
XBC[i + 0x1E] = BitConverter.ToInt32(SAV.Data, 0x62 + i << 12);
|
||||
}
|
||||
for (int i = 0, h, j, a; i < 10; i++)
|
||||
{
|
||||
a = SAV.getGBO + 0x230C + (i << 2);
|
||||
h = BitConverter.ToInt32(SAV.Data, a);
|
||||
if (h == -1) continue;
|
||||
j = Array.IndexOf(XBC, h);
|
||||
if (j < 0) continue;
|
||||
if (j < 0x1E)
|
||||
a = 0x22 + j;
|
||||
else
|
||||
a = 0x44 + j;
|
||||
a <<= 12;
|
||||
if (BitConverter.ToUInt16(SAV.Data, a + 0xBA8) == 0xBA0)
|
||||
return a;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
private void setXBChksum()
|
||||
{
|
||||
int XBO = getXBO();
|
||||
if (XBO < 0) return;
|
||||
BitConverter.GetBytes(SaveUtil.ccitt16(SAV.Data.Skip(XBO).Take(0xBAE).ToArray())).CopyTo(SAV.Data, XBO + 0xBAE);
|
||||
if (editing || ofsHallStat < 0) return;
|
||||
BitConverter.GetBytes((ushort)NUD_HallStreaks.Value).CopyTo(SAV.Data, ofsHallStat + 4 + 0x3DE * CB_Stats2.SelectedIndex + (species << 1));
|
||||
HallStatUpdated = true;
|
||||
}
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
}
|
|
@ -111,6 +111,9 @@ namespace PKHeX.WinForms
|
|||
case GameVersion.DP:
|
||||
gamePrefix = "dp";
|
||||
break;
|
||||
case GameVersion.Pt:
|
||||
gamePrefix = "pt";
|
||||
break;
|
||||
case GameVersion.HGSS:
|
||||
gamePrefix = "hgss";
|
||||
break;
|
||||
|
|
Loading…
Add table
Reference in a new issue