Refactoring

No functional change besides changing the default save to sav7.

Main changes are moving the string data fetching out of the
winforms-specific Main.cs
This commit is contained in:
Kaphotics
2016-10-29 15:41:55 -07:00
parent a9648f021b
commit 8540b00ca1
30 changed files with 677 additions and 489 deletions

389
PKHeX/Game/GameInfo.cs Normal file
View File

@@ -0,0 +1,389 @@
using System;
using System.Linq;
using System.Collections.Generic;
namespace PKHeX
{
public static class GameInfo
{
private static readonly string[] ptransp = { "ポケシフター", "Poké Transfer", "Poké Fret", "Pokétrasporto", "Poképorter", "Pokétransfer", "포케시프터", "ポケシフター" };
public static readonly string[] lang_val = { "ja", "en", "fr", "it", "de", "es", "ko", "zh", "pt" };
private const string DefaultLanguage = "en";
private static readonly GameStrings[] Languages = new GameStrings[lang_val.Length];
// Lazy fetch implementation
public static GameStrings getStrings(string lang)
{
int l = Array.IndexOf(lang_val, lang);
if (l < 0)
l = 1;
return getIndex(l);
}
private static GameStrings getIndex(int index)
{
return Languages[index] ?? (Languages[index] = new GameStrings(lang_val[index]));
}
private static string getTransporterName(string Language)
{
int lang = Array.IndexOf(lang_val, Language);
if (lang < 0 || lang >= ptransp.Length)
lang = Array.IndexOf(lang_val, DefaultLanguage);
return ptransp[lang < 0 ? 1 : lang];
}
// String providing
public class GameStrings
{
// PKM Info
public readonly string[] specieslist, movelist, itemlist, abilitylist, types, natures, forms,
memories, genloc, trainingbags, trainingstage, characteristics,
encountertypelist, gamelanguages, balllist, gamelist, pokeblocks,
g3coloitems, g3xditems, g3items, g2items, g1items;
// Met Locations
public readonly string[] metGSC_00000, metRSEFRLG_00000, metCXD_00000;
public readonly string[] metHGSS_00000, metHGSS_02000, metHGSS_03000;
public readonly string[] metBW2_00000, metBW2_30000, metBW2_40000, metBW2_60000;
public readonly string[] metXY_00000, metXY_30000, metXY_40000, metXY_60000;
public readonly string[] metSM_00000, metSM_30000, metSM_40000, metSM_60000;
// Misc
public readonly string[] wallpapernames, puffs;
public readonly string eggname;
private readonly string Language;
public GameStrings(string l)
{
Language = l;
// Past Generation strings
g3items = get("ItemsG3");
// XD and Colosseum
{
g3coloitems = (string[])g3items.Clone();
string[] tmp = get("ItemsG3Colosseum");
Array.Resize(ref g3coloitems, 500 + tmp.Length);
for (int i = g3items.Length; i < g3coloitems.Length; i++)
g3coloitems[i] = $"UNUSED {i}";
Array.Copy(tmp, 0, g3coloitems, g3coloitems.Length - tmp.Length, tmp.Length);
g3xditems = (string[])g3items.Clone();
string[] tmp2 = get("ItemsG3XD");
Array.Resize(ref g3xditems, 500 + tmp2.Length);
for (int i = g3items.Length; i < g3xditems.Length; i++)
g3xditems[i] = $"UNUSED {i}";
Array.Copy(tmp2, 0, g3xditems, g3xditems.Length - tmp2.Length, tmp2.Length);
}
g2items = get("ItemsG2");
g1items = get("ItemsG1");
metRSEFRLG_00000 = get("rsefrlg_00000");
metGSC_00000 = get("gsc_00000");
metCXD_00000 = get("cxd_00000");
// Sanitize a little
var metSanitize = (string[])metCXD_00000.Clone();
for (int i = 0; i < metSanitize.Length; i++)
if (metCXD_00000.Count(r => r == metSanitize[i]) > 1)
metSanitize[i] += $" [{i.ToString("000")}]";
metCXD_00000 = metSanitize;
// Current Generation strings
natures = Util.getNaturesList(l);
types = get("types");
abilitylist = get("abilities");
movelist = get("moves");
itemlist = get("items");
characteristics = get("character");
specieslist = get("species");
wallpapernames = get("wallpaper");
encountertypelist = get("encountertype");
gamelist = get("games");
gamelanguages = Util.getNulledStringArray(Util.getStringList("languages"));
balllist = new string[Legal.Items_Ball.Length];
for (int i = 0; i < balllist.Length; i++)
balllist[i] = itemlist[Legal.Items_Ball[i]];
pokeblocks = get("pokeblock");
forms = get("forms");
memories = get("memories");
genloc = get("genloc");
trainingbags = get("trainingbag");
trainingstage = get("supertraining");
puffs = get("puff");
eggname = specieslist[0];
metHGSS_00000 = get("hgss_00000");
metHGSS_02000 = get("hgss_02000");
metHGSS_03000 = get("hgss_03000");
metBW2_00000 = get("bw2_00000");
metBW2_30000 = get("bw2_30000");
metBW2_40000 = get("bw2_40000");
metBW2_60000 = get("bw2_60000");
metXY_00000 = get("xy_00000");
metXY_30000 = get("xy_30000");
metXY_40000 = get("xy_40000");
metXY_60000 = get("xy_60000");
metSM_00000 = get("sm_00000");
metSM_30000 = get("sm_30000");
metSM_40000 = get("sm_40000");
metSM_60000 = get("sm_60000");
Sanitize();
}
private void Sanitize()
{
// Gen4 Mail names not stored in future games. No clever solution like for HM's, so improvise.
for (int i = 137; i <= 148; i++)
itemlist[i] = $"Mail #{i - 137 + 1} (G4)";
// Fix Item Names (Duplicate entries)
int len = itemlist[425].Length;
itemlist[426] = itemlist[425].Substring(0, len - 1) + (char)(itemlist[425][len - 1] + 1) + " (G4)";
itemlist[427] = itemlist[425].Substring(0, len - 1) + (char)(itemlist[425][len - 1] + 2) + " (G4)";
itemlist[456] += " (HG/SS)"; // S.S. Ticket
itemlist[736] += " (OR/AS)"; // S.S. Ticket
itemlist[463] += " (DPPt)"; // Storage Key
itemlist[734] += " (OR/AS)"; // Storage Key
itemlist[478] += " (HG/SS)"; // Basement Key
itemlist[478] += " (OR/AS)"; // Basement Key
itemlist[621] += " (M)"; // Xtransceiver
itemlist[626] += " (F)"; // Xtransceiver
itemlist[629] += " (2)"; // DNA Splicers
itemlist[637] += " (2)"; // Dropped Item
itemlist[707] += " (2)"; // Travel Trunk
itemlist[713] += " (2)"; // Alt Bike
itemlist[714] += " (2)"; // Holo Caster
itemlist[729] += " (1)"; // Meteorite
itemlist[740] += " (2)"; // Contest Costume
itemlist[751] += " (2)"; // Meteorite
itemlist[771] += " (3)"; // Meteorite
itemlist[772] += " (4)"; // Meteorite
// Replace the Egg Name with ---; egg name already stored to eggname
specieslist[0] = "---";
// Get the met locations... for all of the games...
// Fix up some of the Location strings to make them more descriptive:
metHGSS_02000[1] += " (NPC)"; // Anything from an NPC
metHGSS_02000[2] += " (" + eggname + ")"; // Egg From Link Trade
metBW2_00000[36] = metBW2_00000[84] + "/" + metBW2_00000[36]; // Cold Storage in BW = PWT in BW2
// BW2 Entries from 76 to 105 are for Entralink in BW
for (int i = 76; i < 106; i++)
metBW2_00000[i] = metBW2_00000[i] + "●";
// Localize the Poketransfer to the language (30001)
metBW2_30000[1 - 1] = getTransporterName(Language); // Default to English
metBW2_30000[2 - 1] += " (NPC)"; // Anything from an NPC
metBW2_30000[3 - 1] += $" ({eggname})"; // Link Trade (Egg)
// Zorua/Zoroark events
metBW2_30000[10 - 1] = specieslist[251] + " (" + specieslist[570] + " 1)"; // Celebi's Zorua Event
metBW2_30000[11 - 1] = specieslist[251] + " (" + specieslist[570] + " 2)"; // Celebi's Zorua Event
metBW2_30000[12 - 1] = specieslist[571] + " (" + "1)"; // Zoroark
metBW2_30000[13 - 1] = specieslist[571] + " (" + "2)"; // Zoroark
metBW2_60000[3 - 1] += " (" + eggname + ")"; // Egg Treasure Hunter/Breeder, whatever...
metXY_00000[104] += " (X/Y)"; // Victory Road
metXY_00000[106] += " (X/Y)"; // Pokémon League
metXY_00000[202] += " (OR/AS)"; // Pokémon League
metXY_00000[298] += " (OR/AS)"; // Victory Road
metXY_30000[0] += " (NPC)"; // Anything from an NPC
metXY_30000[1] += " (" + eggname + ")"; // Egg From Link Trade
// Set the first entry of a met location to "" (nothing)
// Fix (None) tags
abilitylist[0] = itemlist[0] = movelist[0] = metXY_00000[0] = metBW2_00000[0] = metHGSS_00000[0] = "(" + itemlist[0] + ")";
}
private string[] get(string ident)
{
string[] data = Util.getStringList(ident, Language);
if (data == null || data.Length == 0)
data = Util.getStringList(ident, DefaultLanguage);
return data;
}
public string[] getItemStrings(int generation, GameVersion game)
{
switch (generation)
{
case 0:
return new string[0];
case 1:
return g1items;
case 2:
return g2items;
case 3:
switch (game)
{
case GameVersion.COLO:
return g3coloitems;
case GameVersion.XD:
return g3xditems;
default:
return g3items;
}
default:
return itemlist;
}
}
}
// DataSource providing
public static List<ComboItem> MoveDataSource, ItemDataSource, SpeciesDataSource, BallDataSource, NatureDataSource, AbilityDataSource, VersionDataSource;
private static List<ComboItem> metGen2, metGen3, metGen3CXD, metGen4, metGen5, metGen6;
public static void InitializeDataSources(GameStrings s)
{
int[] ball_nums = { 7, 576, 13, 492, 497, 14, 495, 493, 496, 494, 11, 498, 8, 6, 12, 15, 9, 5, 499, 10, 1, 16 };
int[] ball_vals = { 7, 25, 13, 17, 22, 14, 20, 18, 21, 19, 11, 23, 8, 6, 12, 15, 9, 5, 24, 10, 1, 16 };
BallDataSource = Util.getVariedCBList(s.itemlist, ball_nums, ball_vals);
SpeciesDataSource = Util.getCBList(s.specieslist, null);
NatureDataSource = Util.getCBList(s.natures, null);
AbilityDataSource = Util.getCBList(s.abilitylist, null);
VersionDataSource = Util.getCBList(s.gamelist, Legal.Games_7sm, Legal.Games_6oras, Legal.Games_6xy, Legal.Games_5, Legal.Games_4, Legal.Games_4e, Legal.Games_4r, Legal.Games_3, Legal.Games_3e, Legal.Games_3r, Legal.Games_3s);
MoveDataSource = Util.getCBList(s.movelist, null);
#region Met Locations
// Gen 2
{
var met_list = Util.getCBList(s.metGSC_00000, Enumerable.Range(0, 0x5F).ToArray());
met_list = Util.getOffsetCBList(met_list, s.metGSC_00000, 00000, new[] { 0x7E, 0x7F });
metGen2 = met_list;
}
// Gen 3
{
var met_list = Util.getCBList(s.metRSEFRLG_00000, Enumerable.Range(0, 213).ToArray());
met_list = Util.getOffsetCBList(met_list, s.metRSEFRLG_00000, 00000, new[] { 253, 254, 255 });
metGen3 = met_list;
var cxd_list = Util.getCBList(s.metCXD_00000, Enumerable.Range(0, s.metCXD_00000.Length).ToArray()).Where(c => c.Text.Length > 0).ToList();
metGen3CXD = cxd_list;
}
// Gen 4
{
var met_list = Util.getCBList(s.metHGSS_00000, new[] { 0 });
met_list = Util.getOffsetCBList(met_list, s.metHGSS_02000, 2000, new[] { 2000 });
met_list = Util.getOffsetCBList(met_list, s.metHGSS_02000, 2000, new[] { 2002 });
met_list = Util.getOffsetCBList(met_list, s.metHGSS_03000, 3000, new[] { 3001 });
met_list = Util.getOffsetCBList(met_list, s.metHGSS_00000, 0000, Legal.Met_HGSS_0);
met_list = Util.getOffsetCBList(met_list, s.metHGSS_02000, 2000, Legal.Met_HGSS_2);
met_list = Util.getOffsetCBList(met_list, s.metHGSS_03000, 3000, Legal.Met_HGSS_3);
metGen4 = met_list;
}
// Gen 5
{
var met_list = Util.getCBList(s.metBW2_00000, new[] { 0 });
met_list = Util.getOffsetCBList(met_list, s.metBW2_60000, 60001, new[] { 60002 });
met_list = Util.getOffsetCBList(met_list, s.metBW2_30000, 30001, new[] { 30003 });
met_list = Util.getOffsetCBList(met_list, s.metBW2_00000, 00000, Legal.Met_BW2_0);
met_list = Util.getOffsetCBList(met_list, s.metBW2_30000, 30001, Legal.Met_BW2_3);
met_list = Util.getOffsetCBList(met_list, s.metBW2_40000, 40001, Legal.Met_BW2_4);
met_list = Util.getOffsetCBList(met_list, s.metBW2_60000, 60001, Legal.Met_BW2_6);
metGen5 = met_list;
}
// Gen 6
{
var met_list = Util.getCBList(s.metXY_00000, new[] { 0 });
met_list = Util.getOffsetCBList(met_list, s.metXY_60000, 60001, new[] { 60002 });
met_list = Util.getOffsetCBList(met_list, s.metXY_30000, 30001, new[] { 30002 });
met_list = Util.getOffsetCBList(met_list, s.metXY_00000, 00000, Legal.Met_XY_0);
met_list = Util.getOffsetCBList(met_list, s.metXY_30000, 30001, Legal.Met_XY_3);
met_list = Util.getOffsetCBList(met_list, s.metXY_40000, 40001, Legal.Met_XY_4);
met_list = Util.getOffsetCBList(met_list, s.metXY_60000, 60001, Legal.Met_XY_6);
metGen6 = met_list;
}
#endregion
}
public static void setItemDataSource(bool HaX, int MaxItemID, IEnumerable<ushort> allowed, int generation, GameVersion game, GameStrings s)
{
string[] items = s.getItemStrings(generation, game);
ItemDataSource = Util.getCBList(items, (HaX ? Enumerable.Range(0, MaxItemID) : allowed.Select(i => (int) i)).ToArray());
}
public static List<ComboItem> getLocationList(GameVersion Version, int SaveFormat, bool egg)
{
if (SaveFormat == 2)
return metGen2;
if (egg)
{
if (Version < GameVersion.W && SaveFormat >= 5)
return metGen4;
}
switch (Version)
{
case GameVersion.CXD:
if (SaveFormat == 3)
return metGen3CXD;
break;
case GameVersion.R:
case GameVersion.S:
if (SaveFormat == 3)
return metGen3.OrderByDescending(loc => loc.Value <= 87).ToList(); // Ferry
break;
case GameVersion.E:
if (SaveFormat == 3)
return metGen3.OrderByDescending(loc => loc.Value <= 87 || (loc.Value >= 196 && loc.Value <= 212)).ToList(); // Trainer Hill
break;
case GameVersion.FR:
case GameVersion.LG:
if (SaveFormat == 3)
return metGen3.OrderByDescending(loc => loc.Value > 87 && loc.Value < 197).ToList(); // Celadon Dept.
break;
case GameVersion.D:
case GameVersion.P:
if (SaveFormat == 4 || (SaveFormat >= 5 && egg))
return metGen4.Take(4).Concat(metGen4.Skip(4).OrderByDescending(loc => loc.Value <= 111)).ToList(); // Battle Park
break;
case GameVersion.Pt:
if (SaveFormat == 4 || (SaveFormat >= 5 && egg))
return metGen4.Take(4).Concat(metGen4.Skip(4).OrderByDescending(loc => loc.Value <= 125)).ToList(); // Rock Peak Ruins
break;
case GameVersion.HG:
case GameVersion.SS:
if (SaveFormat == 4 || (SaveFormat >= 5 && egg))
return metGen4.Take(4).Concat(metGen4.Skip(4).OrderByDescending(loc => loc.Value > 125 && loc.Value < 234)).ToList(); // Celadon Dept.
break;
case GameVersion.B:
case GameVersion.W:
return metGen5;
case GameVersion.B2:
case GameVersion.W2:
return metGen5.Take(3).Concat(metGen5.Skip(3).OrderByDescending(loc => loc.Value <= 116)).ToList(); // Abyssal Ruins
case GameVersion.X:
case GameVersion.Y:
return metGen6.Take(3).Concat(metGen6.Skip(3).OrderByDescending(loc => loc.Value <= 168)).ToList(); // Unknown Dungeon
case GameVersion.OR:
case GameVersion.AS:
return metGen6.Take(3).Concat(metGen6.Skip(3).OrderByDescending(loc => loc.Value > 168 && loc.Value <= 354)).ToList(); // Secret Base
}
// Currently on a future game, return corresponding list for generation
if (Version <= GameVersion.CXD && SaveFormat == 4)
return metGen4.Where(loc => loc.Value == 0x37) // Pal Park to front
.Concat(metGen4.Take(4))
.Concat(metGen4.Skip(4).Where(loc => loc.Value != 0x37)).ToList();
if (Version < GameVersion.X && SaveFormat >= 5) // PokéTransfer to front
return metGen5.Where(loc => loc.Value == 30001)
.Concat(metGen5.Take(3))
.Concat(metGen5.Skip(3).Where(loc => loc.Value != 30001)).ToList();
return metGen6;
}
}
}

69
PKHeX/Game/GameUtil.cs Normal file
View File

@@ -0,0 +1,69 @@
namespace PKHeX
{
public static class GameUtil
{
/// <summary>Determines the Version Grouping of an input Version ID</summary>
/// <param name="Version">Version of which to determine the group</param>
/// <returns>Version Group Identifier or Invalid if type cannot be determined.</returns>
public static GameVersion getMetLocationVersionGroup(GameVersion Version)
{
switch (Version)
{
case GameVersion.CXD:
return GameVersion.CXD;
case GameVersion.RBY:
return GameVersion.RBY;
case GameVersion.GS:
case GameVersion.C:
return GameVersion.GSC;
case GameVersion.R:
case GameVersion.S:
return GameVersion.RS;
case GameVersion.E:
return GameVersion.E;
case GameVersion.FR:
case GameVersion.LG:
return GameVersion.FR;
case GameVersion.D:
case GameVersion.P:
return GameVersion.DP;
case GameVersion.Pt:
return GameVersion.Pt;
case GameVersion.HG:
case GameVersion.SS:
return GameVersion.HGSS;
case GameVersion.B:
case GameVersion.W:
return GameVersion.BW;
case GameVersion.B2:
case GameVersion.W2:
return GameVersion.B2W2;
case GameVersion.X:
case GameVersion.Y:
return GameVersion.XY;
case GameVersion.OR:
case GameVersion.AS:
return GameVersion.ORAS;
case GameVersion.SN:
case GameVersion.MN:
return GameVersion.SM;
default:
return GameVersion.Invalid;
}
}
}
}

42
PKHeX/Game/GameVersion.cs Normal file
View File

@@ -0,0 +1,42 @@
namespace PKHeX
{
public enum GameVersion
{
// Not actually stored values, but assigned as properties.
XD = -11,
COLO = -10,
BATREV = -7,
RSBOX = -5,
GS = -4,
C = -3,
// Indicators
Invalid = -2,
Any = -1,
Unknown = 0,
// Version IDs, also stored in PKM structure
/*Gen3*/ S = 1, R = 2, E = 3, FR = 4, LG = 5, CXD = 15,
/*Gen4*/ D = 10, P = 11, Pt = 12, HG = 7, SS = 8,
/*Gen5*/ W = 20, B = 21, W2 = 22, B2 = 23,
/*Gen6*/ X = 24, Y = 25, AS = 26, OR = 27,
/*Gen7*/ SN = 30, MN = 31,
// Game Groupings (SaveFile type)
RBY = 98,
GSC = 99,
RS = 100,
FRLG = 101,
DP = 102,
HGSS = 103,
BW = 104,
B2W2 = 105,
XY = 106,
ORASDEMO = 107,
ORAS = 108,
SM = 109,
// Extra Game Groupings (Generation)
Gen1, Gen2, Gen3, Gen4, Gen5, Gen6, Gen7
}
}

View File

@@ -3732,7 +3732,7 @@ public void InitializeComponent()
this.Menu_ShowdownImportPKM.ShowShortcutKeys = false;
this.Menu_ShowdownImportPKM.Size = new System.Drawing.Size(231, 22);
this.Menu_ShowdownImportPKM.Text = "Import Set from Clipboard";
this.Menu_ShowdownImportPKM.Click += new System.EventHandler(this.clickShowdownImportPK6);
this.Menu_ShowdownImportPKM.Click += new System.EventHandler(this.clickShowdownImportPKM);
//
// Menu_ShowdownExportPKM
//
@@ -3743,7 +3743,7 @@ public void InitializeComponent()
this.Menu_ShowdownExportPKM.ShowShortcutKeys = false;
this.Menu_ShowdownExportPKM.Size = new System.Drawing.Size(231, 22);
this.Menu_ShowdownExportPKM.Text = "Export Set to Clipboard";
this.Menu_ShowdownExportPKM.Click += new System.EventHandler(this.clickShowdownExportPK6);
this.Menu_ShowdownExportPKM.Click += new System.EventHandler(this.clickShowdownExportPKM);
//
// Menu_ShowdownExportParty
//

View File

@@ -47,8 +47,8 @@ public Main()
}).Start();
CB_ExtraBytes.SelectedIndex = 0;
getFieldsfromPKM = populateFieldsPK6;
getPKMfromFields = preparePK6;
getFieldsfromPKM = populateFieldsPK7;
getPKMfromFields = preparePK7;
// Set up form properties and arrays.
SlotPictureBoxes = new[] {
@@ -141,7 +141,7 @@ public Main()
// Select Language
string l = Properties.Settings.Default.Language;
if (l.Length != 2) l = "en";
int lang = Array.IndexOf(lang_val, l);
int lang = Array.IndexOf(GameInfo.lang_val, l);
CB_MainLanguage.SelectedIndex = lang < 0 ? 1 : lang;
// Version Check
@@ -158,6 +158,7 @@ public Main()
InitializeFields();
formInitialized = true;
#endregion
#region Load Initial File(s)
if (args.Length > 1) // Load the arguments
@@ -201,32 +202,20 @@ public Main()
#region Important Variables
public static PKM pkm = new PK6(); // Tab Pokemon Data Storage
public static SaveFile SAV = new SAV6 { Game = (int)GameVersion.AS, OT = "PKHeX", TID = 12345, SID = 54321, Language = 2, Country = 49, SubRegion = 7, ConsoleRegion = 1 }; // Save File
public static string eggname = "";
public static SaveFile SAV = new SAV7 { Game = (int)GameVersion.AS, OT = "PKHeX", TID = 12345, SID = 54321, Language = 2, Country = 49, SubRegion = 7, ConsoleRegion = 1 }; // Save File
public static GameInfo.GameStrings GameStrings;
private LegalityAnalysis Legality = new LegalityAnalysis(new PK3());
public static string curlanguage = "en";
public static string[] gendersymbols = { "♂", "♀", "-" };
public static string[] specieslist, movelist, itemlist, abilitylist, types, natures, forms,
memories, genloc, trainingbags, trainingstage, characteristics,
encountertypelist, gamelanguages, balllist, gamelist, pokeblocks,
g3coloitems, g3xditems, g3items, g2items, g1items = { };
public static string[] metGSC_00000, metRSEFRLG_00000, metCXD_00000 = { };
public static string[] metHGSS_00000, metHGSS_02000, metHGSS_03000 = { };
public static string[] metBW2_00000, metBW2_30000, metBW2_40000, metBW2_60000 = { };
public static string[] metXY_00000, metXY_30000, metXY_40000, metXY_60000 = { };
public static string[] wallpapernames, puffs = { };
public static bool unicode;
public static List<ComboItem> MoveDataSource, ItemDataSource, SpeciesDataSource, BallDataSource, NatureDataSource, AbilityDataSource, VersionDataSource;
private static List<ComboItem> metGen2, metGen3, metGen3CXD, metGen4, metGen5, metGen6;
public static volatile bool formInitialized, fieldsInitialized, fieldsLoaded;
private static int colorizedbox = -1;
private static Image colorizedcolor;
private static int colorizedslot;
public static bool HaX;
private LegalityAnalysis Legality = new LegalityAnalysis(new PK3());
private static readonly Image mixedHighlight = Util.ChangeOpacity(Properties.Resources.slotSet, 0.5);
private static readonly string[] lang_val = { "ja", "en", "fr", "it", "de", "es", "ko", "zh", "pt" };
private static readonly string[] main_langlist =
{
"日本語", // JPN
@@ -452,7 +441,7 @@ private void manMenuBatchEditor(object sender, EventArgs e)
updateBoxViewers();
}
// Misc Options
private void clickShowdownImportPK6(object sender, EventArgs e)
private void clickShowdownImportPKM(object sender, EventArgs e)
{
if (!formInitialized)
return;
@@ -539,7 +528,7 @@ private void clickShowdownImportPK6(object sender, EventArgs e)
pkm = preparePKM();
updateLegality();
}
private void clickShowdownExportPK6(object sender, EventArgs e)
private void clickShowdownExportPKM(object sender, EventArgs e)
{
if (!formInitialized)
return;
@@ -1173,7 +1162,7 @@ private void openSAV(SaveFile sav, string path)
if (SAV.Generation == 2)
updateOriginGame(null, null);
// Refresh PK#->PK6 conversion info
// Refresh PK* conversion info
PKMConverter.updateConfig(SAV.SubRegion, SAV.Country, SAV.ConsoleRegion, SAV.OT, SAV.Gender);
if (WindowTranslationRequired) // force update -- re-added controls may be untranslated
@@ -1239,154 +1228,16 @@ private void changeMainLanguage(object sender, EventArgs e)
private void InitializeStrings()
{
if (CB_MainLanguage.SelectedIndex < 8)
curlanguage = lang_val[CB_MainLanguage.SelectedIndex];
curlanguage = GameInfo.lang_val[CB_MainLanguage.SelectedIndex];
string l = curlanguage;
// Past Generation strings
g3items = Util.getStringListFallback("ItemsG3", l, "en");
// XD and Colosseum
{
g3coloitems = (string[])g3items.Clone();
string[] tmp = Util.getStringListFallback("ItemsG3Colosseum", l, "en");
Array.Resize(ref g3coloitems, 500 + tmp.Length);
for (int i = g3items.Length; i < g3coloitems.Length; i++)
g3coloitems[i] = $"UNUSED {i}";
Array.Copy(tmp, 0, g3coloitems, g3coloitems.Length - tmp.Length, tmp.Length);
g3xditems = (string[])g3items.Clone();
string[] tmp2 = Util.getStringListFallback("ItemsG3XD", l, "en");
Array.Resize(ref g3xditems, 500 + tmp2.Length);
for (int i = g3items.Length; i < g3xditems.Length; i++)
g3xditems[i] = $"UNUSED {i}";
Array.Copy(tmp2, 0, g3xditems, g3xditems.Length - tmp2.Length, tmp2.Length);
}
g2items = Util.getStringListFallback("ItemsG2", l, "en");
g1items = Util.getStringListFallback("ItemsG1", l, "en");
metRSEFRLG_00000 = Util.getStringListFallback("rsefrlg_00000", l, "en");
metGSC_00000 = Util.getStringListFallback("gsc_00000", l, "en");
metCXD_00000 = Util.getStringListFallback("cxd_00000", l, "en");
// Sanitize a little
var metSanitize = (string[])metCXD_00000.Clone();
for (int i = 0; i < metSanitize.Length; i++)
if (metCXD_00000.Count(r => r == metSanitize[i]) > 1)
metSanitize[i] += $" [{i.ToString("000")}]";
metCXD_00000 = metSanitize;
// Current Generation strings
natures = Util.getNaturesList(l);
types = Util.getTypesList(l);
abilitylist = Util.getAbilitiesList(l);
movelist = Util.getMovesList(l);
itemlist = Util.getItemsList(l);
characteristics = Util.getCharacteristicsList(l);
specieslist = Util.getSpeciesList(l);
wallpapernames = Util.getStringList("wallpaper", l);
encountertypelist = Util.getStringList("encountertype", l);
gamelist = Util.getStringList("games", l);
gamelanguages = Util.getNulledStringArray(Util.getStringList("languages"));
balllist = new string[Legal.Items_Ball.Length];
for (int i = 0; i < balllist.Length; i++)
balllist[i] = itemlist[Legal.Items_Ball[i]];
if (l != "pt" || (l == "pt" && !fieldsInitialized)) // load initial binaries
{
pokeblocks = Util.getStringList("pokeblock", l);
forms = Util.getFormsList(l);
memories = Util.getStringList("memories", l);
genloc = Util.getStringList("genloc", l);
trainingbags = Util.getStringList("trainingbag", l);
trainingstage = Util.getStringList("supertraining", l);
puffs = Util.getStringList("puff", l);
}
// Gen4 Mail names not stored in future games. No clever solution like for HM's, so improvise.
for (int i = 137; i <= 148; i++)
itemlist[i] = $"Mail #{i-137+1} (G4)";
// Fix Item Names (Duplicate entries)
int len = itemlist[425].Length;
itemlist[426] = itemlist[425].Substring(0, len-1) + (char)(itemlist[425][len-1]+1) + " (G4)";
itemlist[427] = itemlist[425].Substring(0, len-1) + (char)(itemlist[425][len-1]+2) + " (G4)";
itemlist[456] += " (HG/SS)"; // S.S. Ticket
itemlist[736] += " (OR/AS)"; // S.S. Ticket
itemlist[463] += " (DPPt)"; // Storage Key
itemlist[734] += " (OR/AS)"; // Storage Key
itemlist[478] += " (HG/SS)"; // Basement Key
itemlist[478] += " (OR/AS)"; // Basement Key
itemlist[621] += " (M)"; // Xtransceiver
itemlist[626] += " (F)"; // Xtransceiver
itemlist[629] += " (2)"; // DNA Splicers
itemlist[637] += " (2)"; // Dropped Item
itemlist[707] += " (2)"; // Travel Trunk
itemlist[713] += " (2)"; // Alt Bike
itemlist[714] += " (2)"; // Holo Caster
itemlist[729] += " (1)"; // Meteorite
itemlist[740] += " (2)"; // Contest Costume
itemlist[751] += " (2)"; // Meteorite
itemlist[771] += " (3)"; // Meteorite
itemlist[772] += " (4)"; // Meteorite
// Get the Egg Name and then replace it with --- for the comboboxes.
eggname = specieslist[0];
specieslist[0] = "---";
// Get the met locations... for all of the games...
metHGSS_00000 = Util.getStringList("hgss_00000", l);
metHGSS_02000 = Util.getStringList("hgss_02000", l);
metHGSS_03000 = Util.getStringList("hgss_03000", l);
metBW2_00000 = Util.getStringList("bw2_00000", l);
metBW2_30000 = Util.getStringList("bw2_30000", l);
metBW2_40000 = Util.getStringList("bw2_40000", l);
metBW2_60000 = Util.getStringList("bw2_60000", l);
metXY_00000 = Util.getStringList("xy_00000", l);
metXY_30000 = Util.getStringList("xy_30000", l);
metXY_40000 = Util.getStringList("xy_40000", l);
metXY_60000 = Util.getStringList("xy_60000", l);
// Fix up some of the Location strings to make them more descriptive:
metHGSS_02000[1] += " (NPC)"; // Anything from an NPC
metHGSS_02000[2] += " (" + eggname + ")"; // Egg From Link Trade
metBW2_00000[36] = metBW2_00000[84] + "/" + metBW2_00000[36]; // Cold Storage in BW = PWT in BW2
// BW2 Entries from 76 to 105 are for Entralink in BW
for (int i = 76; i < 106; i++)
metBW2_00000[i] = metBW2_00000[i] + "●";
// Localize the Poketransfer to the language (30001)
string[] ptransp = { "ポケシフター", "Poké Transfer", "Poké Fret", "Pokétrasporto", "Poképorter", "Pokétransfer", "포케시프터", "ポケシフター" };
metBW2_30000[1 - 1] = ptransp[Array.IndexOf(lang_val, curlanguage)];
metBW2_30000[2 - 1] += " (NPC)"; // Anything from an NPC
metBW2_30000[3 - 1] += " (" + eggname + ")"; // Egg From Link Trade
// Zorua/Zoroark events
metBW2_30000[10 - 1] = specieslist[251] + " (" + specieslist[570] + " 1)"; // Celebi's Zorua Event
metBW2_30000[11 - 1] = specieslist[251] + " (" + specieslist[570] + " 2)"; // Celebi's Zorua Event
metBW2_30000[12 - 1] = specieslist[571] + " (" + "1)"; // Zoroark
metBW2_30000[13 - 1] = specieslist[571] + " (" + "2)"; // Zoroark
metBW2_60000[3 - 1] += " (" + eggname + ")"; // Egg Treasure Hunter/Breeder, whatever...
metXY_00000[104] += " (X/Y)"; // Victory Road
metXY_00000[106] += " (X/Y)"; // Pokémon League
metXY_00000[202] += " (OR/AS)"; // Pokémon League
metXY_00000[298] += " (OR/AS)"; // Victory Road
metXY_30000[0] += " (NPC)"; // Anything from an NPC
metXY_30000[1] += " (" + eggname + ")"; // Egg From Link Trade
// Set the first entry of a met location to "" (nothing)
// Fix (None) tags
abilitylist[0] = itemlist[0] = movelist[0] = metXY_00000[0] = metBW2_00000[0] = metHGSS_00000[0] = "(" + itemlist[0] + ")";
GameStrings = GameInfo.getStrings(l);
// Force an update to the met locations
origintrack = GameVersion.Unknown;
// Update Legality Analysis strings
LegalityAnalysis.movelist = movelist;
LegalityAnalysis.movelist = GameStrings.movelist;
if (fieldsInitialized)
updateIVs(null, null); // Prompt an update for the characteristics
@@ -1409,7 +1260,7 @@ private void InitializeFields()
TB_TID.Text = 12345.ToString();
TB_SID.Text = 54321.ToString();
CB_GameOrigin.SelectedIndex = 0;
int curlang = Array.IndexOf(lang_val, curlanguage);
int curlang = Array.IndexOf(GameInfo.lang_val, curlanguage);
CB_Language.SelectedIndex = curlang > CB_Language.Items.Count - 1 ? 1 : curlang;
CB_BoxSelect.SelectedIndex = 0;
CB_Ball.SelectedIndex = 0;
@@ -1430,101 +1281,28 @@ private void InitializeLanguage()
setCountrySubRegion(CB_Country, "countries");
CB_3DSReg.DataSource = Util.getUnsortedCBList("regions3ds");
CB_Language.DataSource = Util.getUnsortedCBList("languages");
int[] ball_nums = { 7, 576, 13, 492, 497, 14, 495, 493, 496, 494, 11, 498, 8, 6, 12, 15, 9, 5, 499, 10, 1, 16 };
int[] ball_vals = { 7, 25, 13, 17, 22, 14, 20, 18, 21, 19, 11, 23, 8, 6, 12, 15, 9, 5, 24, 10, 1, 16 };
BallDataSource = Util.getVariedCBList(itemlist, ball_nums, ball_vals);
SpeciesDataSource = Util.getCBList(specieslist, null);
NatureDataSource = Util.getCBList(natures, null);
AbilityDataSource = Util.getCBList(abilitylist, null);
VersionDataSource = Util.getCBList(gamelist, Legal.Games_7sm, Legal.Games_6oras, Legal.Games_6xy, Legal.Games_5, Legal.Games_4, Legal.Games_4e, Legal.Games_4r, Legal.Games_3, Legal.Games_3e, Legal.Games_3r, Legal.Games_3s);
MoveDataSource = Util.getCBList(movelist, null);
GameInfo.InitializeDataSources(GameStrings);
#region Met Locations
// Gen 2
{
var met_list = Util.getCBList(metGSC_00000, Enumerable.Range(0, 0x5F).ToArray());
met_list = Util.getOffsetCBList(met_list, metGSC_00000, 00000, new[] { 0x7E, 0x7F });
metGen2 = met_list;
}
// Gen 3
{
var met_list = Util.getCBList(metRSEFRLG_00000, Enumerable.Range(0, 213).ToArray());
met_list = Util.getOffsetCBList(met_list, metRSEFRLG_00000, 00000, new[] { 253, 254, 255 });
metGen3 = met_list;
var cxd_list = Util.getCBList(metCXD_00000, Enumerable.Range(0, metCXD_00000.Length).ToArray()).Where(c => c.Text.Length > 0).ToList();
metGen3CXD = cxd_list;
}
// Gen 4
{
var met_list = Util.getCBList(metHGSS_00000, new[] { 0 });
met_list = Util.getOffsetCBList(met_list, metHGSS_02000, 2000, new[] { 2000 });
met_list = Util.getOffsetCBList(met_list, metHGSS_02000, 2000, new[] { 2002 });
met_list = Util.getOffsetCBList(met_list, metHGSS_03000, 3000, new[] { 3001 });
met_list = Util.getOffsetCBList(met_list, metHGSS_00000, 0000, Legal.Met_HGSS_0);
met_list = Util.getOffsetCBList(met_list, metHGSS_02000, 2000, Legal.Met_HGSS_2);
met_list = Util.getOffsetCBList(met_list, metHGSS_03000, 3000, Legal.Met_HGSS_3);
metGen4 = met_list;
}
// Gen 5
{
var met_list = Util.getCBList(metBW2_00000, new[] { 0 });
met_list = Util.getOffsetCBList(met_list, metBW2_60000, 60001, new[] { 60002 });
met_list = Util.getOffsetCBList(met_list, metBW2_30000, 30001, new[] { 30003 });
met_list = Util.getOffsetCBList(met_list, metBW2_00000, 00000, Legal.Met_BW2_0);
met_list = Util.getOffsetCBList(met_list, metBW2_30000, 30001, Legal.Met_BW2_3);
met_list = Util.getOffsetCBList(met_list, metBW2_40000, 40001, Legal.Met_BW2_4);
met_list = Util.getOffsetCBList(met_list, metBW2_60000, 60001, Legal.Met_BW2_6);
metGen5 = met_list;
}
// Gen 6
{
var met_list = Util.getCBList(metXY_00000, new[] { 0 });
met_list = Util.getOffsetCBList(met_list, metXY_60000, 60001, new[] { 60002 });
met_list = Util.getOffsetCBList(met_list, metXY_30000, 30001, new[] { 30002 });
met_list = Util.getOffsetCBList(met_list, metXY_00000, 00000, Legal.Met_XY_0);
met_list = Util.getOffsetCBList(met_list, metXY_30000, 30001, Legal.Met_XY_3);
met_list = Util.getOffsetCBList(met_list, metXY_40000, 40001, Legal.Met_XY_4);
met_list = Util.getOffsetCBList(met_list, metXY_60000, 60001, Legal.Met_XY_6);
metGen6 = met_list;
}
#endregion
CB_EncounterType.DataSource = Util.getCBList(encountertypelist, new[] { 0 }, Legal.Gen4EncounterTypes);
CB_HPType.DataSource = Util.getCBList(types.Skip(1).Take(16).ToArray(), null);
CB_Nature.DataSource = new BindingSource(NatureDataSource, null);
CB_EncounterType.DataSource = Util.getCBList(GameStrings.encountertypelist, new[] { 0 }, Legal.Gen4EncounterTypes);
CB_HPType.DataSource = Util.getCBList(GameStrings.types.Skip(1).Take(16).ToArray(), null);
CB_Nature.DataSource = new BindingSource(GameInfo.NatureDataSource, null);
populateFilteredDataSources();
}
private void populateFilteredDataSources()
{
GameInfo.setItemDataSource(HaX, SAV.MaxItemID, SAV.HeldItems, SAV.Generation, SAV.Version, GameStrings);
if (SAV.Generation > 1)
{
string[] items = itemlist;
if (SAV.Generation == 3)
{
switch (SAV.Version)
{
case GameVersion.COLO: items = g3coloitems; break;
case GameVersion.XD: items = g3xditems; break;
default: items = g3items; break;
}
}
if (SAV.Generation == 2)
items = g2items;
CB_HeldItem.DataSource = new BindingSource(GameInfo.ItemDataSource.Where(i => i.Value <= SAV.MaxItemID).ToList(), null);
ItemDataSource = Util.getCBList(items, (HaX ? Enumerable.Range(0, SAV.MaxItemID) : SAV.HeldItems.Select(i => (int)i)).ToArray());
CB_HeldItem.DataSource = new BindingSource(ItemDataSource.Where(i => i.Value <= SAV.MaxItemID).ToList(), null);
}
CB_Ball.DataSource = new BindingSource(BallDataSource.Where(b => b.Value <= SAV.MaxBallID).ToList(), null);
CB_Species.DataSource = new BindingSource(SpeciesDataSource.Where(s => s.Value <= SAV.MaxSpeciesID).ToList(), null);
DEV_Ability.DataSource = new BindingSource(AbilityDataSource.Where(a => a.Value <= SAV.MaxAbilityID).ToList(), null);
CB_GameOrigin.DataSource = new BindingSource(VersionDataSource.Where(g => g.Value <= SAV.MaxGameID || SAV.Generation >= 3 && g.Value == 15).ToList(), null);
CB_Ball.DataSource = new BindingSource(GameInfo.BallDataSource.Where(b => b.Value <= SAV.MaxBallID).ToList(), null);
CB_Species.DataSource = new BindingSource(GameInfo.SpeciesDataSource.Where(s => s.Value <= SAV.MaxSpeciesID).ToList(), null);
DEV_Ability.DataSource = new BindingSource(GameInfo.AbilityDataSource.Where(a => a.Value <= SAV.MaxAbilityID).ToList(), null);
CB_GameOrigin.DataSource = new BindingSource(GameInfo.VersionDataSource.Where(g => g.Value <= SAV.MaxGameID || SAV.Generation >= 3 && g.Value == 15).ToList(), null);
// Set the Move ComboBoxes too..
var moves = MoveDataSource.Where(m => m.Value <= SAV.MaxMoveID).ToList();
var moves = GameInfo.MoveDataSource.Where(m => m.Value <= SAV.MaxMoveID).ToList();
foreach (ComboBox cb in new[] { CB_Move1, CB_Move2, CB_Move3, CB_Move4, CB_RelearnMove1, CB_RelearnMove2, CB_RelearnMove3, CB_RelearnMove4 })
{
cb.DisplayMember = "Text"; cb.ValueMember = "Value";
@@ -1623,7 +1401,7 @@ private void setForms()
if (!hasForms)
return;
CB_Form.DataSource = PKX.getFormList(species, types, forms, gendersymbols, SAV.Generation).ToList();
CB_Form.DataSource = PKX.getFormList(species, GameStrings.types, GameStrings.forms, gendersymbols, SAV.Generation).ToList();
}
private void setAbilityList()
{
@@ -1639,9 +1417,9 @@ private void setAbilityList()
if (abils[1] == 0 && SAV.Generation != 3)
abils[1] = abils[0];
string[] abilIdentifier = {" (1)", " (2)", " (H)"};
List<string> ability_list = abils.Where(a => a != 0).Select((t, i) => abilitylist[t] + abilIdentifier[i]).ToList();
List<string> ability_list = abils.Where(a => a != 0).Select((t, i) => GameStrings.abilitylist[t] + abilIdentifier[i]).ToList();
if (!ability_list.Any())
ability_list.Add(abilitylist[0] + abilIdentifier[0]);
ability_list.Add(GameStrings.abilitylist[0] + abilIdentifier[0]);
int abil = CB_Ability.SelectedIndex;
CB_Ability.DataSource = ability_list;
@@ -1881,7 +1659,7 @@ private void clickMoves(object sender, EventArgs e)
{
updateLegality();
int[] m = Legality.getSuggestedRelearn();
string r = string.Join(Environment.NewLine, m.Select(v => v >= movelist.Length ? "ERROR" : movelist[v]));
string r = string.Join(Environment.NewLine, m.Select(v => v >= GameStrings.movelist.Length ? "ERROR" : GameStrings.movelist[v]));
if (DialogResult.Yes != Util.Prompt(MessageBoxButtons.YesNo, "Apply suggested relearn moves?", r))
return;
@@ -2001,7 +1779,7 @@ private void updateIVs(object sender, EventArgs e)
int characteristic = pkm.Characteristic;
L_Characteristic.Visible = Label_CharacteristicPrefix.Visible = characteristic > -1;
if (characteristic > -1)
L_Characteristic.Text = characteristics[pkm.Characteristic];
L_Characteristic.Text = GameStrings.characteristics[pkm.Characteristic];
updateStats();
}
private void updateEVs(object sender, EventArgs e)
@@ -2322,101 +2100,21 @@ private void updateSpecies(object sender, EventArgs e)
updateLegality();
}
private static List<ComboItem> getLocationList(GameVersion Version, int SaveFormat, bool egg)
{
if (SaveFormat == 2)
return metGen2;
if (egg)
{
if (Version < GameVersion.W && SaveFormat >= 5)
return metGen4;
}
switch (Version)
{
case GameVersion.CXD:
if (SaveFormat == 3)
return metGen3CXD;
break;
case GameVersion.R:
case GameVersion.S:
if (SaveFormat == 3)
return metGen3.OrderByDescending(loc => loc.Value <= 87).ToList(); // Ferry
break;
case GameVersion.E:
if (SaveFormat == 3)
return metGen3.OrderByDescending(loc => loc.Value <= 87 || (loc.Value >= 196 && loc.Value <= 212)).ToList(); // Trainer Hill
break;
case GameVersion.FR:
case GameVersion.LG:
if (SaveFormat == 3)
return metGen3.OrderByDescending(loc => loc.Value > 87 && loc.Value < 197).ToList(); // Celadon Dept.
break;
case GameVersion.D:
case GameVersion.P:
if (SaveFormat == 4 || (SaveFormat >= 5 && egg))
return metGen4.Take(4).Concat(metGen4.Skip(4).OrderByDescending(loc => loc.Value <= 111)).ToList(); // Battle Park
break;
case GameVersion.Pt:
if (SaveFormat == 4 || (SaveFormat >= 5 && egg))
return metGen4.Take(4).Concat(metGen4.Skip(4).OrderByDescending(loc => loc.Value <= 125)).ToList(); // Rock Peak Ruins
break;
case GameVersion.HG:
case GameVersion.SS:
if (SaveFormat == 4 || (SaveFormat >= 5 && egg))
return metGen4.Take(4).Concat(metGen4.Skip(4).OrderByDescending(loc => loc.Value > 125 && loc.Value < 234)).ToList(); // Celadon Dept.
break;
case GameVersion.B:
case GameVersion.W:
return metGen5;
case GameVersion.B2:
case GameVersion.W2:
return metGen5.Take(3).Concat(metGen5.Skip(3).OrderByDescending(loc => loc.Value <= 116)).ToList(); // Abyssal Ruins
case GameVersion.X:
case GameVersion.Y:
return metGen6.Take(3).Concat(metGen6.Skip(3).OrderByDescending(loc => loc.Value <= 168)).ToList(); // Unknown Dungeon
case GameVersion.OR:
case GameVersion.AS:
return metGen6.Take(3).Concat(metGen6.Skip(3).OrderByDescending(loc => loc.Value > 168 && loc.Value <= 354)).ToList(); // Secret Base
}
// Currently on a future game, return corresponding list for generation
if (Version <= GameVersion.CXD && SaveFormat == 4)
return metGen4.Where(loc => loc.Value == 0x37) // Pal Park to front
.Concat(metGen4.Take(4))
.Concat(metGen4.Skip(4).Where(loc => loc.Value != 0x37)).ToList();
if (Version < GameVersion.X && SaveFormat >= 5) // PokéTransfer to front
return metGen5.Where(loc => loc.Value == 30001)
.Concat(metGen5.Take(3))
.Concat(metGen5.Skip(3).Where(loc => loc.Value != 30001)).ToList();
return metGen6;
}
private void updateOriginGame(object sender, EventArgs e)
{
GameVersion Version = (GameVersion)Util.getIndex(CB_GameOrigin);
// check if differs
GameVersion newTrack = SaveUtil.getMetLocationVersionGroup(Version);
GameVersion newTrack = GameUtil.getMetLocationVersionGroup(Version);
if (newTrack != origintrack)
{
var met_list = getLocationList(Version, SAV.Generation, egg:false);
var met_list = GameInfo.getLocationList(Version, SAV.Generation, egg:false);
CB_MetLocation.DisplayMember = "Text";
CB_MetLocation.ValueMember = "Value";
CB_MetLocation.DataSource = new BindingSource(met_list, null);
CB_MetLocation.SelectedIndex = 0; // transporter or pal park for past gen pkm
var egg_list = getLocationList(Version, SAV.Generation, egg:true);
var egg_list = GameInfo.getLocationList(Version, SAV.Generation, egg:true);
CB_EggLocation.DisplayMember = "Text";
CB_EggLocation.ValueMember = "Value";
CB_EggLocation.DataSource = new BindingSource(egg_list, null);
@@ -2488,9 +2186,9 @@ private void updateNatureModification(object sender, EventArgs e)
private void updateNickname(object sender, EventArgs e)
{
if (fieldsInitialized && ModifierKeys == Keys.Control && sender != null) // Import Showdown
{ clickShowdownImportPK6(sender, e); return; }
{ clickShowdownImportPKM(sender, e); return; }
if (fieldsInitialized && ModifierKeys == Keys.Alt && sender != null) // Export Showdown
{ clickShowdownExportPK6(sender, e); return; }
{ clickShowdownExportPKM(sender, e); return; }
if (!fieldsInitialized || CHK_Nicknamed.Checked)
return;
@@ -2922,28 +2620,28 @@ public static string[] verifyPKMtoSAV(PKM pk)
{
ushort held = (ushort)pk.HeldItem;
if (held > itemlist.Length)
if (held > GameStrings.itemlist.Length)
errata.Add($"Item Index beyond range: {held}");
else if (held > SAV.MaxItemID)
errata.Add($"Game can't obtain item: {itemlist[held]}");
errata.Add($"Game can't obtain item: {GameStrings.itemlist[held]}");
else if (!pk.CanHoldItem(SAV.HeldItems))
errata.Add($"Game can't hold item: {itemlist[held]}");
errata.Add($"Game can't hold item: {GameStrings.itemlist[held]}");
}
if (pk.Species > specieslist.Length)
if (pk.Species > GameStrings.specieslist.Length)
errata.Add($"Species Index beyond range: {pk.HeldItem}");
else if (SAV.MaxSpeciesID < pk.Species)
errata.Add($"Game can't obtain species: {specieslist[pk.Species]}");
errata.Add($"Game can't obtain species: {GameStrings.specieslist[pk.Species]}");
if (pk.Moves.Any(m => m > movelist.Length))
errata.Add($"Item Index beyond range: {string.Join(", ", pk.Moves.Where(m => m > movelist.Length).Select(m => m.ToString()))}");
if (pk.Moves.Any(m => m > GameStrings.movelist.Length))
errata.Add($"Item Index beyond range: {string.Join(", ", pk.Moves.Where(m => m > GameStrings.movelist.Length).Select(m => m.ToString()))}");
else if (pk.Moves.Any(m => m > SAV.MaxMoveID))
errata.Add($"Game can't have move: {string.Join(", ", pk.Moves.Where(m => m > SAV.MaxMoveID).Select(m => movelist[m]))}");
errata.Add($"Game can't have move: {string.Join(", ", pk.Moves.Where(m => m > SAV.MaxMoveID).Select(m => GameStrings.movelist[m]))}");
if (pk.Ability > abilitylist.Length)
if (pk.Ability > GameStrings.abilitylist.Length)
errata.Add($"Ability Index beyond range: {pk.Ability}");
else if (pk.Ability > SAV.MaxAbilityID)
errata.Add($"Game can't have ability: {abilitylist[pk.Ability]}");
errata.Add($"Game can't have ability: {GameStrings.abilitylist[pk.Ability]}");
return errata.ToArray();
}
@@ -3948,7 +3646,7 @@ private void B_OUTPasserby_Click(object sender, EventArgs e)
// ulong outfit = BitConverter.ToUInt64(savefile, r_offset + 0x5C);
int favpkm = BitConverter.ToUInt16(SAV.Data, r_offset + 0x9C) & 0x7FF;
string gamename;
try { gamename = gamelist[game]; }
try { gamename = GameStrings.gamelist[game]; }
catch { gamename = "UNKNOWN GAME"; }
string[] cr = PKX.getCountryRegionText(country, region, curlanguage);
@@ -3958,7 +3656,7 @@ private void B_OUTPasserby_Click(object sender, EventArgs e)
"Game: " + gamename + Environment.NewLine +
"Country: " + cr[0] + Environment.NewLine +
"Region: " + cr[1] + Environment.NewLine +
"Favorite: " + specieslist[favpkm];
"Favorite: " + GameStrings.specieslist[favpkm];
r_offset += 0xC8; // Advance to next entry
}

View File

@@ -5,6 +5,7 @@ namespace PKHeX
{
public partial class Main
{
// Main Series
private void populateFieldsPK4()
{
PK4 pk4 = pkm as PK4;
@@ -154,7 +155,7 @@ private PKM preparePK4()
pk4.SID = Util.ToInt32(TB_SID.Text);
pk4.EXP = Util.ToUInt32(TB_EXP.Text);
pk4.PID = Util.getHEXval(TB_PID.Text);
pk4.Ability = (byte)Array.IndexOf(abilitylist, CB_Ability.Text.Remove(CB_Ability.Text.Length - 4));
pk4.Ability = (byte)Array.IndexOf(GameStrings.abilitylist, CB_Ability.Text.Remove(CB_Ability.Text.Length - 4));
pk4.FatefulEncounter = CHK_Fateful.Checked;
pk4.Gender = PKX.getGender(Label_Gender.Text);
@@ -250,6 +251,7 @@ private PKM preparePK4()
return pk4;
}
// Battle Revolution
private void populateFieldsBK4()
{
BK4 pk4 = pkm as BK4;
@@ -400,7 +402,7 @@ private PKM prepareBK4()
pk4.SID = Util.ToInt32(TB_SID.Text);
pk4.EXP = Util.ToUInt32(TB_EXP.Text);
pk4.PID = Util.getHEXval(TB_PID.Text);
pk4.Ability = (byte)Array.IndexOf(abilitylist, CB_Ability.Text.Remove(CB_Ability.Text.Length - 4));
pk4.Ability = (byte)Array.IndexOf(GameStrings.abilitylist, CB_Ability.Text.Remove(CB_Ability.Text.Length - 4));
pk4.FatefulEncounter = CHK_Fateful.Checked;
pk4.Gender = PKX.getGender(Label_Gender.Text);
@@ -496,6 +498,4 @@ private PKM prepareBK4()
return pk4;
}
}
}

View File

@@ -260,7 +260,7 @@ private PKM preparePK5()
}
else
{
pk5.Ability = (byte)Array.IndexOf(abilitylist, CB_Ability.Text.Remove(CB_Ability.Text.Length - 4));
pk5.Ability = (byte)Array.IndexOf(GameStrings.abilitylist, CB_Ability.Text.Remove(CB_Ability.Text.Length - 4));
pk5.HiddenAbility = CB_Ability.SelectedIndex > 1; // not 0 or 1
}

View File

@@ -197,7 +197,7 @@ private PKM preparePK6()
pk6.TID = Util.ToInt32(TB_TID.Text);
pk6.SID = Util.ToInt32(TB_SID.Text);
pk6.EXP = Util.ToUInt32(TB_EXP.Text);
pk6.Ability = (byte)Array.IndexOf(abilitylist, CB_Ability.Text.Remove(CB_Ability.Text.Length - 4));
pk6.Ability = (byte)Array.IndexOf(GameStrings.abilitylist, CB_Ability.Text.Remove(CB_Ability.Text.Length - 4));
pk6.AbilityNumber = Util.ToInt32(TB_AbilityNumber.Text); // Number
// pkx[0x16], pkx[0x17] are handled by the Medals UI (Hits & Training Bag)
pk6.PID = Util.getHEXval(TB_PID.Text);

View File

@@ -197,7 +197,7 @@ private PKM preparePK7()
pk7.TID = Util.ToInt32(TB_TID.Text);
pk7.SID = Util.ToInt32(TB_SID.Text);
pk7.EXP = Util.ToUInt32(TB_EXP.Text);
pk7.Ability = (byte)Array.IndexOf(abilitylist, CB_Ability.Text.Remove(CB_Ability.Text.Length - 4));
pk7.Ability = (byte)Array.IndexOf(GameStrings.abilitylist, CB_Ability.Text.Remove(CB_Ability.Text.Length - 4));
pk7.AbilityNumber = Util.ToInt32(TB_AbilityNumber.Text); // Number
// pkx[0x16], pkx[0x17] are handled by the Medals UI (Hits & Training Bag)
pk7.PID = Util.getHEXval(TB_PID.Text);

Binary file not shown.

View File

@@ -82,6 +82,7 @@
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Core" />
<Reference Include="System.Data" />
<Reference Include="System.Web" />
@@ -96,6 +97,8 @@
<Reference Include="System.Deployment" />
</ItemGroup>
<ItemGroup>
<Compile Include="Game\GameUtil.cs" />
<Compile Include="Game\GameVersion.cs" />
<Compile Include="Legality\Analysis.cs" />
<Compile Include="Legality\Checks.cs" />
<Compile Include="Legality\Core.cs" />
@@ -107,6 +110,7 @@
<Compile Include="Legality\Tables7.cs" />
<Compile Include="Legality\Tables5.cs" />
<Compile Include="Legality\Tables4.cs" />
<Compile Include="Game\GameInfo.cs" />
<Compile Include="MainWindow\MainPK7.cs">
<SubType>Form</SubType>
</Compile>
@@ -393,7 +397,7 @@
<Compile Include="Misc\SplashScreen.Designer.cs">
<DependentUpon>SplashScreen.cs</DependentUpon>
</Compile>
<Compile Include="Misc\ComboItem.cs" />
<Compile Include="Game\ComboItem.cs" />
<Compile Include="Util\BigEndian.cs" />
<Compile Include="Util\DataUtil.cs" />
<Compile Include="Util\DateUtil.cs" />
@@ -514,7 +518,6 @@
<SubType>Designer</SubType>
</EmbeddedResource>
<None Include="app.config" />
<None Include="Misc\personal_gs" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>

View File

@@ -316,41 +316,46 @@ public static string[] getCountryRegionText(int country, int region, string lang
public static string getLocation(PKM pk, bool eggmet)
{
if (pk.Format <= 2)
return "";
int locval = eggmet ? pk.Egg_Location : pk.Met_Location;
if (pk.Format == 3)
return Main.metRSEFRLG_00000[locval%0x100];
if (pk.Version < 0x10 && (eggmet || pk.Format < 5))
return Main.GameStrings.metRSEFRLG_00000[locval%0x100];
if (pk.Gen4 && (eggmet || pk.Format == 4))
{
if (locval < 2000) return Main.metHGSS_00000[locval];
if (locval < 3000) return Main.metHGSS_02000[locval % 2000];
return Main.metHGSS_03000[locval % 3000];
if (locval < 2000) return Main.GameStrings.metHGSS_00000[locval];
if (locval < 3000) return Main.GameStrings.metHGSS_02000[locval % 2000];
return Main.GameStrings.metHGSS_03000[locval % 3000];
}
if (pk.Version < 24)
if (pk.Gen5 || pk.Format <= 5)
{
if (locval < 30000) return Main.metBW2_00000[locval];
if (locval < 40000) return Main.metBW2_30000[locval % 10000 - 1];
if (locval < 60000) return Main.metBW2_40000[locval % 10000 - 1];
return Main.metBW2_60000[locval % 10000 - 1];
if (locval < 30000) return Main.GameStrings.metBW2_00000[locval];
if (locval < 40000) return Main.GameStrings.metBW2_30000[locval % 10000 - 1];
if (locval < 60000) return Main.GameStrings.metBW2_40000[locval % 10000 - 1];
return Main.GameStrings.metBW2_60000[locval % 10000 - 1];
}
if (pk.Version > 23)
if (pk.Gen6 || pk.Format <= 6)
{
if (locval < 30000) return Main.metXY_00000[locval];
if (locval < 40000) return Main.metXY_30000[locval % 10000 - 1];
if (locval < 60000) return Main.metXY_40000[locval % 10000 - 1];
return Main.metXY_60000[locval % 10000 - 1];
if (locval < 30000) return Main.GameStrings.metXY_00000[locval];
if (locval < 40000) return Main.GameStrings.metXY_30000[locval % 10000 - 1];
if (locval < 60000) return Main.GameStrings.metXY_40000[locval % 10000 - 1];
return Main.GameStrings.metXY_60000[locval % 10000 - 1];
}
return null; // Shouldn't happen.
}
public static string[] getQRText(PKM pkm)
{
var s = Main.GameStrings;
string[] response = new string[3];
// Summarize
string filename = pkm.Nickname;
if (pkm.Nickname != Main.specieslist[pkm.Species] && Main.specieslist[pkm.Species] != null)
filename += $" ({Main.specieslist[pkm.Species]})";
response[0] = $"{filename} [{Main.abilitylist[pkm.Ability]}] lv{pkm.Stat_Level} @ {Main.itemlist[pkm.HeldItem]} -- {Main.natures[pkm.Nature]}";
response[1] = $"{Main.movelist[pkm.Move1]} / {Main.movelist[pkm.Move2]} / {Main.movelist[pkm.Move3]} / {Main.movelist[pkm.Move4]}";
response[2] = String.Format(
if (pkm.Nickname != s.specieslist[pkm.Species] && s.specieslist[pkm.Species] != null)
filename += $" ({s.specieslist[pkm.Species]})";
response[0] = $"{filename} [{s.abilitylist[pkm.Ability]}] lv{pkm.Stat_Level} @ {s.itemlist[pkm.HeldItem]} -- {s.natures[pkm.Nature]}";
response[1] = $"{s.movelist[pkm.Move1]} / {s.movelist[pkm.Move2]} / {s.movelist[pkm.Move3]} / {s.movelist[pkm.Move4]}";
response[2] = string.Format(
"IVs:{0}{1}{2}{3}{4}{5}"
+ Environment.NewLine + Environment.NewLine +
"EVs:{6}{7}{8}{9}{10}{11}",

View File

@@ -125,7 +125,7 @@ private void loadFields()
RTB_OT.Visible = CB_OTQual.Enabled = CB_OTMemory.Enabled = CB_OTFeel.Enabled = CB_OTVar.Enabled = M_OT_Affection.Enabled = enable;
}
else
GB_M_OT.Text = GB_M_CT.Text = $"N/A: {Main.eggname}";
GB_M_OT.Text = GB_M_CT.Text = $"N/A: {Main.GameStrings.eggname}";
init = true;
@@ -184,12 +184,12 @@ private void B_Cancel_Click(object sender, EventArgs e)
private void getLangStrings()
{
// Memory Chooser
int memorycount = Main.memories.Length - 38;
int memorycount = Main.GameStrings.memories.Length - 38;
string[] memories = new string[memorycount];
int[] allowed = new int[memorycount];
for (int i = 0; i < memorycount; i++)
{
memories[i] = Main.memories[38 + i];
memories[i] = Main.GameStrings.memories[38 + i];
allowed[i] = i + 1;
}
Array.Resize(ref allowed, allowed.Length - 1);
@@ -209,8 +209,8 @@ private void getLangStrings()
CB_OTQual.Items.Clear();
for (int i = 0; i < 7; i++)
{
CB_CTQual.Items.Add(Main.memories[2 + i]);
CB_OTQual.Items.Add(Main.memories[2 + i]);
CB_CTQual.Items.Add(Main.GameStrings.memories[2 + i]);
CB_OTQual.Items.Add(Main.GameStrings.memories[2 + i]);
}
// Feeling Chooser
@@ -218,8 +218,8 @@ private void getLangStrings()
CB_OTFeel.Items.Clear();
for (int i = 0; i < 24; i++)
{
CB_CTFeel.Items.Add(Main.memories[10 + i]);
CB_OTFeel.Items.Add(Main.memories[10 + i]);
CB_CTFeel.Items.Add(Main.GameStrings.memories[10 + i]);
CB_OTFeel.Items.Add(Main.GameStrings.memories[10 + i]);
}
}
private void getMemoryArguments(string ARG, ComboBox sender)
@@ -235,11 +235,11 @@ private void getMemoryArguments(string ARG, ComboBox sender)
vs = "";
break;
case "PKM":
argvals = Util.getCBList(Main.specieslist, null);
argvals = Util.getCBList(Main.GameStrings.specieslist, null);
vs = vartypes[0];
break;
case "GENLOC":
argvals = Util.getCBList(Main.genloc, null);
argvals = Util.getCBList(Main.GameStrings.genloc, null);
vs = vartypes[1];
break;
case "ITEM":
@@ -265,18 +265,18 @@ private void getMemoryArguments(string ARG, ComboBox sender)
/* ORAS */
718,719,720,737,738,739,740,741,742,752,753,754,755,756,757,758,759,760,761,762,763,764,765,767,768, 769,770,775
};
var item_list = Util.getCBList(Main.itemlist, items_allowed);
var item_list = Util.getCBList(Main.GameStrings.itemlist, items_allowed);
#endregion
argvals = item_list;
vs = vartypes[2];
}
break;
case "MOVE":
argvals = Util.getCBList(Main.movelist, null);
argvals = Util.getCBList(Main.GameStrings.movelist, null);
vs = vartypes[3];
break;
case "LOCATION":
argvals = Util.getCBList(Main.metXY_00000, Legal.Met_XY_0);
argvals = Util.getCBList(Main.GameStrings.metXY_00000, Legal.Met_XY_0);
vs = vartypes[4];
break;
}
@@ -307,10 +307,10 @@ private string getMemoryString(ComboBox m, ComboBox arg, ComboBox q, ComboBox f,
bool enabled = false;
if (mem == 0)
result = Main.memories[38];
result = Main.GameStrings.memories[38];
else
{
result = string.Format(Main.memories[mem + 38], nn, tr, a, f.Text, q.Text);
result = string.Format(Main.GameStrings.memories[mem + 38], nn, tr, a, f.Text, q.Text);
enabled = true;
}

View File

@@ -26,8 +26,8 @@ public SuperTrainingEditor()
CB_Bag.Items.Clear();
CB_Bag.Items.Add("---");
for (int i = 1; i < Main.trainingbags.Length - 1; i++)
CB_Bag.Items.Add(Main.trainingbags[i]);
for (int i = 1; i < Main.GameStrings.trainingbags.Length - 1; i++)
CB_Bag.Items.Add(Main.GameStrings.trainingbags[i]);
if (pkm is PK6)
{

View File

@@ -242,27 +242,27 @@ private void populateComboBoxes()
var Any = new ComboItem {Text = "Any", Value = -1};
var DS_Species = new List<ComboItem>(Main.SpeciesDataSource);
var DS_Species = new List<ComboItem>(GameInfo.SpeciesDataSource);
DS_Species.RemoveAt(0); DS_Species.Insert(0, Any); CB_Species.DataSource = DS_Species;
var DS_Item = new List<ComboItem>(Main.ItemDataSource);
var DS_Item = new List<ComboItem>(GameInfo.ItemDataSource);
DS_Item.Insert(0, Any); CB_HeldItem.DataSource = DS_Item;
var DS_Nature = new List<ComboItem>(Main.NatureDataSource);
var DS_Nature = new List<ComboItem>(GameInfo.NatureDataSource);
DS_Nature.Insert(0, Any); CB_Nature.DataSource = DS_Nature;
var DS_Ability = new List<ComboItem>(Main.AbilityDataSource);
var DS_Ability = new List<ComboItem>(GameInfo.AbilityDataSource);
DS_Ability.Insert(0, Any); CB_Ability.DataSource = DS_Ability;
var DS_Version = new List<ComboItem>(Main.VersionDataSource);
var DS_Version = new List<ComboItem>(GameInfo.VersionDataSource);
DS_Version.Insert(0, Any); CB_GameOrigin.DataSource = DS_Version;
string[] hptypes = new string[Main.types.Length - 2]; Array.Copy(Main.types, 1, hptypes, 0, hptypes.Length);
string[] hptypes = new string[Main.GameStrings.types.Length - 2]; Array.Copy(Main.GameStrings.types, 1, hptypes, 0, hptypes.Length);
var DS_Type = Util.getCBList(hptypes, null);
DS_Type.Insert(0, Any); CB_HPType.DataSource = DS_Type;
// Set the Move ComboBoxes too..
var DS_Move = new List<ComboItem>(Main.MoveDataSource);
var DS_Move = new List<ComboItem>(GameInfo.MoveDataSource);
DS_Move.RemoveAt(0); DS_Move.Insert(0, Any);
{
foreach (ComboBox cb in new[] { CB_Move1, CB_Move2, CB_Move3, CB_Move4 })

View File

@@ -143,17 +143,17 @@ private void populateComboBoxes()
var Any = new ComboItem {Text = "Any", Value = -1};
var DS_Species = new List<ComboItem>(Main.SpeciesDataSource);
var DS_Species = new List<ComboItem>(GameInfo.SpeciesDataSource);
DS_Species.RemoveAt(0);
var filteredSpecies = DS_Species.Where(spec => RawDB.Any(mg => mg.Species == spec.Value)).ToList();
filteredSpecies.Insert(0, Any);
CB_Species.DataSource = filteredSpecies;
var DS_Item = new List<ComboItem>(Main.ItemDataSource);
var DS_Item = new List<ComboItem>(GameInfo.ItemDataSource);
DS_Item.Insert(0, Any); CB_HeldItem.DataSource = DS_Item;
// Set the Move ComboBoxes too..
var DS_Move = new List<ComboItem>(Main.MoveDataSource);
var DS_Move = new List<ComboItem>(GameInfo.MoveDataSource);
DS_Move.RemoveAt(0); DS_Move.Insert(0, Any);
{
foreach (ComboBox cb in new[] { CB_Move1, CB_Move2, CB_Move3, CB_Move4 })

View File

@@ -14,7 +14,7 @@ public SAV_BoxLayout(int box)
// Repopulate Wallpaper names
CB_BG.Items.Clear();
foreach (string wallpaper in Main.wallpapernames)
foreach (string wallpaper in Main.GameStrings.wallpapernames)
CB_BG.Items.Add(wallpaper);
// Go

View File

@@ -67,12 +67,12 @@ private void Setup()
CB_Species.DisplayMember = "Text";
CB_Species.ValueMember = "Value";
CB_Species.DataSource = new BindingSource(Main.SpeciesDataSource.Skip(1).Where(s => s.Value <= SAV.MaxSpeciesID).ToList(), null);
CB_Species.DataSource = new BindingSource(GameInfo.SpeciesDataSource.Skip(1).Where(s => s.Value <= SAV.MaxSpeciesID).ToList(), null);
CB_Move1.DisplayMember = CB_Move2.DisplayMember = CB_Move3.DisplayMember = CB_Move4.DisplayMember = "Text";
CB_Move1.ValueMember = CB_Move2.ValueMember = CB_Move3.ValueMember = CB_Move4.ValueMember = "Value";
var MoveList = Main.MoveDataSource.Where(m => m.Value <= SAV.MaxMoveID).ToList();
var MoveList = GameInfo.MoveDataSource.Where(m => m.Value <= SAV.MaxMoveID).ToList();
CB_Move1.DataSource = new BindingSource(MoveList, null);
CB_Move2.DataSource = new BindingSource(MoveList, null);
CB_Move3.DataSource = new BindingSource(MoveList, null);
@@ -80,7 +80,7 @@ private void Setup()
CB_HeldItem.DisplayMember = "Text";
CB_HeldItem.ValueMember = "Value";
CB_HeldItem.DataSource = new BindingSource(Main.ItemDataSource, null);
CB_HeldItem.DataSource = new BindingSource(GameInfo.ItemDataSource, null);
}
private void B_Cancel_Click(object sender, EventArgs e)
@@ -154,15 +154,16 @@ private void displayEntry(object sender, EventArgs e)
string genderstr=gendersymbols[gender];
string shinystr = shiny == 1 ? "Yes" : "No";
string[] movelist = Main.GameStrings.movelist;
s += "Name: " + nickname;
s += " (" + Main.specieslist[species] + " - " + genderstr + ")" + Environment.NewLine;
s += " (" + Main.GameStrings.specieslist[species] + " - " + genderstr + ")" + Environment.NewLine;
s += "Level: " + level + Environment.NewLine;
s += "Shiny: " + shinystr + Environment.NewLine;
s += "Held Item: " + Main.itemlist[helditem] + Environment.NewLine;
s += "Move 1: " + Main.movelist[move1] + Environment.NewLine;
s += "Move 2: " + Main.movelist[move2] + Environment.NewLine;
s += "Move 3: " + Main.movelist[move3] + Environment.NewLine;
s += "Move 4: " + Main.movelist[move4] + Environment.NewLine;
s += "Held Item: " + Main.GameStrings.itemlist[helditem] + Environment.NewLine;
s += "Move 1: " + movelist[move1] + Environment.NewLine;
s += "Move 2: " + movelist[move2] + Environment.NewLine;
s += "Move 3: " + movelist[move3] + Environment.NewLine;
s += "Move 4: " + movelist[move4] + Environment.NewLine;
s += "OT: " + OTname + " (" + TID + "/" + SID + ")" + Environment.NewLine;
s += Environment.NewLine;
@@ -326,7 +327,7 @@ private void setForms()
CB_Form.DisplayMember = "Text";
CB_Form.ValueMember = "Value";
CB_Form.DataSource = PKX.getFormList(species, Main.types, Main.forms, Main.gendersymbols).ToList();
CB_Form.DataSource = PKX.getFormList(species, Main.GameStrings.types, Main.GameStrings.forms, Main.gendersymbols).ToList();
}
private void updateSpecies(object sender, EventArgs e)
{

View File

@@ -14,7 +14,7 @@ public SAV_Link6()
{
cb.DisplayMember = "Text";
cb.ValueMember = "Value";
cb.DataSource = new BindingSource(Main.ItemDataSource.Where(item => item.Value <= SAV.MaxItemID).ToArray(), null);
cb.DataSource = new BindingSource(GameInfo.ItemDataSource.Where(item => item.Value <= SAV.MaxItemID).ToArray(), null);
}
Util.TranslateInterface(this, Main.curlanguage);
byte[] data = SAV.LinkBlock;
@@ -99,12 +99,12 @@ private void loadLinkData(byte[] data)
NUD_Item6.Value = LinkInfo.Quantity_6;
// Pokemon slots
TB_PKM1.Text = Main.specieslist[LinkInfo.Pokes[0].Species];
TB_PKM2.Text = Main.specieslist[LinkInfo.Pokes[1].Species];
TB_PKM3.Text = Main.specieslist[LinkInfo.Pokes[2].Species];
TB_PKM4.Text = Main.specieslist[LinkInfo.Pokes[3].Species];
TB_PKM5.Text = Main.specieslist[LinkInfo.Pokes[4].Species];
TB_PKM6.Text = Main.specieslist[LinkInfo.Pokes[5].Species];
TB_PKM1.Text = Main.GameStrings.specieslist[LinkInfo.Pokes[0].Species];
TB_PKM2.Text = Main.GameStrings.specieslist[LinkInfo.Pokes[1].Species];
TB_PKM3.Text = Main.GameStrings.specieslist[LinkInfo.Pokes[2].Species];
TB_PKM4.Text = Main.GameStrings.specieslist[LinkInfo.Pokes[3].Species];
TB_PKM5.Text = Main.GameStrings.specieslist[LinkInfo.Pokes[4].Species];
TB_PKM6.Text = Main.GameStrings.specieslist[LinkInfo.Pokes[5].Species];
}
}
}

View File

@@ -14,7 +14,7 @@ public SAV_PokeBlockORAS()
for (int i = 0; i < lbl_spec.Length; i++)
{
lbl_spec[i].Text = $"{Main.pokeblocks[94 + i]}:";
lbl_spec[i].Text = $"{Main.GameStrings.pokeblocks[94 + i]}:";
nup_spec[i].Value = BitConverter.ToUInt32(SAV.Data, SAV.Contest + i * 4);
}
}

View File

@@ -23,10 +23,10 @@ public SAV_PokedexORAS()
// Fill List
CB_Species.DisplayMember = "Text";
CB_Species.ValueMember = "Value";
CB_Species.DataSource = new BindingSource(Main.SpeciesDataSource.Skip(1).ToList(), null);
CB_Species.DataSource = new BindingSource(GameInfo.SpeciesDataSource.Skip(1).ToList(), null);
for (int i = 1; i < SAV.MaxSpeciesID + 1; i++)
LB_Species.Items.Add(i.ToString("000") + " - " + Main.specieslist[i]);
LB_Species.Items.Add(i.ToString("000") + " - " + Main.GameStrings.specieslist[i]);
getData();
editing = false;
@@ -131,7 +131,7 @@ private void getEntry()
int f = SaveUtil.getDexFormIndexORAS(species, fc);
if (f < 0)
return;
string[] forms = PKX.getFormList(species, Main.types, Main.forms, Main.gendersymbols);
string[] forms = PKX.getFormList(species, Main.GameStrings.types, Main.GameStrings.forms, Main.gendersymbols);
if (forms.Length < 1)
return;

View File

@@ -23,10 +23,10 @@ public SAV_PokedexXY()
// Fill List
CB_Species.DisplayMember = "Text";
CB_Species.ValueMember = "Value";
CB_Species.DataSource = new BindingSource(Main.SpeciesDataSource.Skip(1).ToList(), null);
CB_Species.DataSource = new BindingSource(GameInfo.SpeciesDataSource.Skip(1).ToList(), null);
for (int i = 1; i < SAV.MaxSpeciesID + 1; i++)
LB_Species.Items.Add(i.ToString("000") + " - " + Main.specieslist[i]);
LB_Species.Items.Add(i.ToString("000") + " - " + Main.GameStrings.specieslist[i]);
getData();
editing = false;
@@ -132,7 +132,7 @@ private void getEntry()
int f = SaveUtil.getDexFormIndexXY(species, fc);
if (f < 0)
return;
string[] forms = PKX.getFormList(species, Main.types, Main.forms, Main.gendersymbols);
string[] forms = PKX.getFormList(species, Main.GameStrings.types, Main.GameStrings.forms, Main.gendersymbols);
if (forms.Length < 1)
return;

View File

@@ -10,7 +10,7 @@ public SAV_Pokepuff()
InitializeComponent();
Util.TranslateInterface(this, Main.curlanguage);
pfa = Main.puffs;
pfa = Main.GameStrings.puffs;
pfa[0] = "---";
Setup();

View File

@@ -12,7 +12,7 @@ public SAV_SecretBase()
{
InitializeComponent();
Util.TranslateInterface(this, Main.curlanguage);
abilitylist = Main.abilitylist;
abilitylist = Main.GameStrings.abilitylist;
setupComboBoxes();
popFavorite();
@@ -35,16 +35,16 @@ private void setupComboBoxes()
CB_Ball.DisplayMember = CB_HeldItem.DisplayMember = CB_Species.DisplayMember = CB_Nature.DisplayMember = "Text";
CB_Ball.ValueMember = CB_HeldItem.ValueMember = CB_Species.ValueMember = CB_Nature.ValueMember = "Value";
CB_Ball.DataSource = new BindingSource(Main.BallDataSource.Where(b => b.Value <= SAV.MaxBallID).ToList(), null);
CB_HeldItem.DataSource = new BindingSource(Main.ItemDataSource.Where(i => i.Value < SAV.MaxItemID).ToList(), null);
CB_Species.DataSource = new BindingSource(Main.SpeciesDataSource.Where(s => s.Value <= SAV.MaxSpeciesID).ToList(), null);
CB_Nature.DataSource = new BindingSource(Main.NatureDataSource, null);
CB_Ball.DataSource = new BindingSource(GameInfo.BallDataSource.Where(b => b.Value <= SAV.MaxBallID).ToList(), null);
CB_HeldItem.DataSource = new BindingSource(GameInfo.ItemDataSource.Where(i => i.Value < SAV.MaxItemID).ToList(), null);
CB_Species.DataSource = new BindingSource(GameInfo.SpeciesDataSource.Where(s => s.Value <= SAV.MaxSpeciesID).ToList(), null);
CB_Nature.DataSource = new BindingSource(GameInfo.NatureDataSource, null);
CB_Move1.DisplayMember = CB_Move2.DisplayMember = CB_Move3.DisplayMember = CB_Move4.DisplayMember = "Text";
CB_Move1.ValueMember = CB_Move2.ValueMember = CB_Move3.ValueMember = CB_Move4.ValueMember = "Value";
var MoveList = Main.MoveDataSource.Where(m => m.Value <= SAV.MaxMoveID).ToList();
var MoveList = GameInfo.MoveDataSource.Where(m => m.Value <= SAV.MaxMoveID).ToList();
CB_Move1.DataSource = new BindingSource(MoveList, null);
CB_Move2.DataSource = new BindingSource(MoveList, null);
CB_Move3.DataSource = new BindingSource(MoveList, null);
@@ -434,7 +434,7 @@ private void setForms()
CB_Form.DisplayMember = "Text";
CB_Form.ValueMember = "Value";
CB_Form.DataSource = PKX.getFormList(species, Main.types, Main.forms, Main.gendersymbols).ToList();
CB_Form.DataSource = PKX.getFormList(species, Main.GameStrings.types, Main.GameStrings.forms, Main.gendersymbols).ToList();
}
private void updateSpecies(object sender, EventArgs e)

View File

@@ -8,14 +8,14 @@ public partial class SAV_SuperTrain : Form
{
public SAV_SuperTrain()
{
trba = Main.trainingbags;
trba = Main.GameStrings.trainingbags;
trba[0] = "---";
offsetTime = SAV.SuperTrain + 0x08;
offsetSpec = SAV.SuperTrain + 0x188;
offsetVal = SAV.SuperTrain + 0x18A;
InitializeComponent();
Util.TranslateInterface(this, Main.curlanguage);
string[] stages = Main.trainingstage;
string[] stages = Main.GameStrings.trainingstage;
listBox1.Items.Clear();
for (int i = 0; i < 30; i++)
listBox1.Items.Add((i + 1).ToString("00") + " - " + stages[i + 2]);
@@ -35,11 +35,11 @@ private void setup()
{
CB_Species.DisplayMember = "Text";
CB_Species.ValueMember = "Value";
CB_Species.DataSource = new BindingSource(Main.SpeciesDataSource.Where(s => s.Value <= SAV.MaxSpeciesID).ToList(), null);
CB_Species.DataSource = new BindingSource(GameInfo.SpeciesDataSource.Where(s => s.Value <= SAV.MaxSpeciesID).ToList(), null);
CB_S2.DisplayMember = "Text";
CB_S2.ValueMember = "Value";
CB_S2.DataSource = new BindingSource(Main.SpeciesDataSource.Where(s => s.Value <= SAV.MaxSpeciesID).ToList(), null);
CB_S2.DataSource = new BindingSource(GameInfo.SpeciesDataSource.Where(s => s.Value <= SAV.MaxSpeciesID).ToList(), null);
}
listBox1.SelectedIndex = 0;
fillTrainingBags();

View File

@@ -329,10 +329,10 @@ private void getComboBoxes()
CB_MultiplayerSprite.ValueMember = "Value";
CB_MultiplayerSprite.DataSource = oras_sprite_list;
L_Vivillon.Text = Main.specieslist[666] + ":";
L_Vivillon.Text = Main.GameStrings.specieslist[666] + ":";
CB_Vivillon.DisplayMember = "Text";
CB_Vivillon.ValueMember = "Value";
CB_Vivillon.DataSource = PKX.getFormList(666, Main.types, Main.forms, Main.gendersymbols).ToList();
CB_Vivillon.DataSource = PKX.getFormList(666, Main.GameStrings.types, Main.GameStrings.forms, Main.gendersymbols).ToList();
}
private void getBadges()
{

View File

@@ -11,29 +11,10 @@ public SAV_Inventory()
{
InitializeComponent();
Util.TranslateInterface(this, Main.curlanguage);
switch (SAV.Generation)
{
case 1:
itemlist = Main.g1items;
B_GiveAll.Visible = false; // Can't give all, not enough room
break;
case 2:
itemlist = Main.g2items;
B_GiveAll.Visible = false;
break;
case 3:
switch (SAV.Version)
{
case GameVersion.XD: itemlist = Main.g3xditems; break;
case GameVersion.COLO: itemlist = Main.g3coloitems; break;
default: itemlist = Main.g3items; break;
}
B_GiveAll.Visible = false;
break;
default:
itemlist = Main.itemlist;
break;
}
if (SAV.Generation <= 3)
B_GiveAll.Visible = false;
itemlist = Main.GameStrings.getItemStrings(SAV.Generation, SAV.Version);
for (int i = 0; i < itemlist.Length; i++)
if (itemlist[i] == "")
itemlist[i] = $"(Item #{i.ToString("000")})";

View File

@@ -482,7 +482,7 @@ private static string getDescription(MysteryGift gift)
string s = gift.getCardHeader() + Environment.NewLine;
if (gift.IsItem)
{
s += "Item: " + Main.itemlist[gift.Item] + Environment.NewLine + "Quantity: " + gift.Quantity;
s += "Item: " + Main.GameStrings.itemlist[gift.Item] + Environment.NewLine + "Quantity: " + gift.Quantity;
return s;
}
if (gift.IsPokémon)
@@ -491,9 +491,9 @@ private static string getDescription(MysteryGift gift)
try
{
s += $"{Main.specieslist[pk.Species]} @ {Main.itemlist[pk.HeldItem]} --- ";
s += (pk.IsEgg ? Main.eggname : $"{pk.OT_Name} - {pk.TID.ToString("00000")}/{pk.SID.ToString("00000")}") + Environment.NewLine;
s += $"{Main.movelist[pk.Move1]} / {Main.movelist[pk.Move2]} / {Main.movelist[pk.Move3]} / {Main.movelist[pk.Move4]}" + Environment.NewLine;
s += $"{Main.GameStrings.specieslist[pk.Species]} @ {Main.GameStrings.itemlist[pk.HeldItem]} --- ";
s += (pk.IsEgg ? Main.GameStrings.eggname : $"{pk.OT_Name} - {pk.TID.ToString("00000")}/{pk.SID.ToString("00000")}") + Environment.NewLine;
s += $"{Main.GameStrings.movelist[pk.Move1]} / {Main.GameStrings.movelist[pk.Move2]} / {Main.GameStrings.movelist[pk.Move3]} / {Main.GameStrings.movelist[pk.Move4]}" + Environment.NewLine;
}
catch { s += "Unable to create gift description."; }
return s;

View File

@@ -19,23 +19,23 @@ public class Preview
public string Position => pkm.Identifier;
public Image Sprite => pkm.Sprite;
public string Nickname => pkm.Nickname;
public string Species => Main.specieslist[pkm.Species];
public string Nature => Main.natures[pkm.Nature];
public string Species => Main.GameStrings.specieslist[pkm.Species];
public string Nature => Main.GameStrings.natures[pkm.Nature];
public string Gender => Main.gendersymbols[pkm.Gender];
public string ESV => pkm.PSV.ToString("0000");
public string HP_Type => Main.types[pkm.HPType+1];
public string Ability => Main.abilitylist[pkm.Ability];
public string Move1 => Main.movelist[pkm.Move1];
public string Move2 => Main.movelist[pkm.Move2];
public string Move3 => Main.movelist[pkm.Move3];
public string Move4 => Main.movelist[pkm.Move4];
public string HeldItem => Main.itemlist[pkm.HeldItem];
public string HP_Type => Main.GameStrings.types[pkm.HPType+1];
public string Ability => Main.GameStrings.abilitylist[pkm.Ability];
public string Move1 => Main.GameStrings.movelist[pkm.Move1];
public string Move2 => Main.GameStrings.movelist[pkm.Move2];
public string Move3 => Main.GameStrings.movelist[pkm.Move3];
public string Move4 => Main.GameStrings.movelist[pkm.Move4];
public string HeldItem => Main.GameStrings.itemlist[pkm.HeldItem];
public string MetLoc => PKX.getLocation(pkm, eggmet: false);
public string EggLoc => PKX.getLocation(pkm, eggmet: true);
public string Ball => Main.balllist[pkm.Ball];
public string Ball => Main.GameStrings.balllist[pkm.Ball];
public string OT => pkm.OT_Name;
public string Version => Main.gamelist[pkm.Version];
public string OTLang => Main.gamelanguages[pkm.Language] ?? $"UNK {pkm.Language}";
public string Version => Main.GameStrings.gamelist[pkm.Version];
public string OTLang => Main.GameStrings.gamelanguages[pkm.Language] ?? $"UNK {pkm.Language}";
public string CountryID => pkm.Format > 5 ? ((PK6) pkm).Country.ToString() : "N/A";
public string RegionID => pkm.Format > 5 ? ((PK6) pkm).Region.ToString() : "N/A";
public string DSRegionID => pkm.Format > 5 ? ((PK6) pkm).ConsoleRegion.ToString() : "N/A";
@@ -91,10 +91,10 @@ public class Preview
public int Move2_PPUp => pkm.Move2_PPUps;
public int Move3_PPUp => pkm.Move3_PPUps;
public int Move4_PPUp => pkm.Move4_PPUps;
public string Relearn1 => Main.movelist[pkm.RelearnMove1];
public string Relearn2 => Main.movelist[pkm.RelearnMove2];
public string Relearn3 => Main.movelist[pkm.RelearnMove3];
public string Relearn4 => Main.movelist[pkm.RelearnMove4];
public string Relearn1 => Main.GameStrings.movelist[pkm.RelearnMove1];
public string Relearn2 => Main.GameStrings.movelist[pkm.RelearnMove2];
public string Relearn3 => Main.GameStrings.movelist[pkm.RelearnMove3];
public string Relearn4 => Main.GameStrings.movelist[pkm.RelearnMove4];
public ushort Checksum => pkm.Checksum;
public int mFriendship => pkm.OT_Friendship;
public int OT_Affection => pkm.OT_Affection;