Add Seal, Accessory, and Backdrop editors (#4284)

- Adds editors for the Seal, Accessory, and Backdrop inventories in Gen4
- Adds a line in the Gen4 Mystery Gift editor to display which Goods, Seal, Accessory, Backdrop, Pokétch app, or Route Map is contained in a gift
- Changes the HG/SS Apricorn editor to display localized item names instead of hard-coded English strings
This commit is contained in:
abcboy101 2024-05-31 00:42:03 -04:00 committed by GitHub
parent 8935b95eb4
commit e6cf61330a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
68 changed files with 3083 additions and 359 deletions

View File

@ -25,6 +25,7 @@ public sealed class GameStrings : IBasicStrings
// Misc
public readonly string[] wallpapernames, puffs, walkercourses;
public readonly string[] uggoods, ugspheres, ugtraps, ugtreasures;
public readonly string[] seals, accessories, backdrops, poketchapps;
private readonly string lang;
private readonly int LanguageIndex;
@ -118,6 +119,11 @@ internal GameStrings(string l)
ugtraps = Get("ugtraps");
ugtreasures = Get("ugtreasures");
seals = Get("seals");
accessories = Get("accessories");
backdrops = Get("backdrops");
poketchapps = Get("poketchapps");
EggName = specieslist[0];
Gen4 = Get4("hgss");
Gen5 = Get6("bw2");

View File

@ -1,3 +1,4 @@
using System;
using System.Collections.Generic;
using System.IO;
@ -73,11 +74,11 @@ public static IEnumerable<string> GetDescription(this MysteryGift gift, IBasicSt
result.Add($"Quantity: {w7bean.Quantity}");
break;
case PCD pcd:
result.Add($"{pcd.GiftType}");
AddLinesPGT(pcd.Gift, result);
result.Add($"Collected: {pcd.GiftUsed}");
break;
case PGT pgt:
result.Add($"{pgt.GiftType}");
AddLinesPGT(pgt, result);
break;
default:
result.Add(MsgMysteryGiftParseTypeUnknown);
@ -126,6 +127,48 @@ private static void AddLinesPKM(MysteryGift gift, IBasicStrings strings, List<st
}
}
private static void AddLinesPGT(PGT gift, List<string> result)
{
static string Get(ReadOnlySpan<string> list, int index)
{
if ((uint)index >= list.Length)
return $"Unknown ({index})";
return list[index];
}
try
{
switch (gift.GiftType)
{
case GiftType4.Goods:
result.Add($"Goods: {Get(GameInfo.Strings.uggoods, gift.ItemID)}");
break;
case GiftType4.HasSubType:
switch (gift.GiftSubType) {
case GiftSubType4.Seal:
result.Add($"Seal: {Get(GameInfo.Strings.seals, (int)gift.Seal)}");
break;
case GiftSubType4.Accessory:
result.Add($"Accessory: {Get(GameInfo.Strings.accessories, (int)gift.Accessory)}");
break;
case GiftSubType4.Backdrop:
result.Add($"Backdrop: {Get(GameInfo.Strings.backdrops, (int)gift.Backdrop)}");
break;
}
break;
case GiftType4.PokétchApp:
result.Add($"Pokétch App: {Get(GameInfo.Strings.poketchapps, (int)gift.PoketchApp)}");
break;
case GiftType4.PokéwalkerCourse:
result.Add($"Route Map: {Get(GameInfo.Strings.walkercourses, gift.PokewalkerCourseID)}");
break;
default:
result.Add($"{gift.GiftType}");
break;
}
}
catch { result.Add(MsgMysteryGiftParseFail); }
}
/// <summary>
/// Checks if the <see cref="MysteryGift"/> data is compatible with the <see cref="SaveFile"/>. Sets appropriate data to the save file in order to receive the gift.
/// </summary>

View File

@ -36,11 +36,12 @@ public override byte Ball
public override bool GiftUsed { get => false; set { } }
public override Shiny Shiny => IsEgg ? Shiny.Random : PK.PID == 1 ? Shiny.Never : IsShiny ? Shiny.Always : Shiny.Never;
public byte CardType { get => Data[0]; set => Data[0] = value; }
// Unused 0x01
public ushort CardType { get => ReadUInt16LittleEndian(Data.AsSpan(0x0)); set => WriteUInt16LittleEndian(Data.AsSpan(0x0), value); }
public byte Slot { get => Data[2]; set => Data[2] = value; }
public byte Detail { get => Data[3]; set => Data[3] = value; }
public override int ItemID { get => ReadUInt16LittleEndian(Data.AsSpan(0x4)); set => WriteUInt16LittleEndian(Data.AsSpan(0x4), (ushort)value); }
public override int ItemID { get => ReadInt32LittleEndian(Data.AsSpan(0x4)); set => WriteInt32LittleEndian(Data.AsSpan(0x4), value); }
public int ItemSubID { get => ReadInt32LittleEndian(Data.AsSpan(0x8)); set => WriteInt32LittleEndian(Data.AsSpan(0x8), value); }
public int PokewalkerCourseID { get => Data[0x4]; set => Data[0x4] = (byte)value; }
public PK4 PK
{
@ -87,12 +88,18 @@ private void EncryptPK()
ekdata.CopyTo(span);
}
public GiftType4 GiftType { get => (GiftType4)Data[0]; set => Data[0] = (byte)value; }
public bool IsHatched => GiftType == Pokémon;
public GiftType4 GiftType { get => (GiftType4)CardType; set => CardType = (byte)value; }
public GiftSubType4 GiftSubType { get => (GiftSubType4)ItemID; set => ItemID = (int)value; }
public PoketchApp PoketchApp { get => (PoketchApp)ItemID; set => ItemID = (int)value; }
public Seal4 Seal { get => (Seal4)(ItemSubID - 1); set => ItemSubID = (int)(value + 1); }
public Accessory4 Accessory { get => (Accessory4)ItemSubID; set => ItemSubID = (int)value; }
public Backdrop4 Backdrop { get => (Backdrop4)ItemSubID; set => ItemSubID = (int)value; }
public bool IsHatched => GiftType is Pokémon or PokémonMovie;
public override bool IsEgg { get => GiftType == PokémonEgg || IsManaphyEgg; set { if (value) { GiftType = PokémonEgg; PK.IsEgg = true; } } }
public bool IsManaphyEgg { get => GiftType == ManaphyEgg; set { if (value) GiftType = ManaphyEgg; } }
public override bool IsItem { get => GiftType == Item; set { if (value) GiftType = Item; } }
public override bool IsEntity { get => GiftType is Pokémon or PokémonEgg or ManaphyEgg; set { } }
public override bool IsEntity { get => GiftType is Pokémon or PokémonEgg or ManaphyEgg or PokémonMovie; set { } }
public override ushort Species { get => IsManaphyEgg ? (ushort)490 : PK.Species; set => PK.Species = value; }
public override Moveset Moves { get => new(PK.Move1, PK.Move2, PK.Move3, PK.Move4); set => PK.SetMoves(value); }
@ -326,13 +333,23 @@ public enum GiftType4 : byte
PokémonEgg = 2,
Item = 3,
Rule = 4,
Seal = 5,
Accessory = 6,
Goods = 5,
HasSubType = 6,
ManaphyEgg = 7,
MemberCard = 8,
OaksLetter = 9,
AzureFlute = 10,
PokétchApp = 11,
Ribbon = 12,
PokéWalkerArea = 14,
SecretKey = 12,
PokémonMovie = 13,
PokéwalkerCourse = 14,
MemorialPhoto = 15,
}
public enum GiftSubType4 : byte
{
Seal = 1,
Accessory = 2,
Backdrop = 3,
}

View File

@ -17,6 +17,7 @@ L_XHT = HT
L_XKorean = Korean
L_XKoreanNon = Non-Korean
L_XMatches0_1 = Matches: {0} {1}
L_XNickname = Nickname
L_XOT = OT
L_XRareFormEvo_0_1 = Evolves into form: {0} (rare: {1})
L_XWurmpleEvo_0 = Wurmple Evolution: {0}
@ -389,6 +390,7 @@ LTransferEggLocationTransporter = Invalid Met Location, expected Poké Transfer.
LTransferEggMetLevel = Invalid Met Level for transfer.
LTransferFlagIllegal = Flagged as illegal by the game (glitch abuse).
LTransferHTFlagRequired = Current handler cannot be past gen OT for transferred specimen.
LTransferHTMismatchGender = Handling trainer does not match the expected trainer gender.
LTransferHTMismatchLanguage = Handling trainer does not match the expected trainer language.
LTransferHTMismatchName = Handling trainer does not match the expected trainer name.
LTransferMet = Invalid Met Location, expected Poké Transfer or Crown.
@ -405,3 +407,9 @@ LTransferPIDECEquals = PID should be equal to EC!
LTransferPIDECXor = Encryption Constant matches shinyxored PID.
LTransferTrackerMissing = Pokémon HOME Transfer Tracker is missing.
LTransferTrackerShouldBeZero = Pokémon HOME Transfer Tracker should be 0.
LTrashBytesExpected = Expected Trash Bytes.
LTrashBytesExpected_0 = Expected Trash Bytes: {0}
LTrashBytesMismatchInitial = Expected initial trash bytes to match the encounter.
LTrashBytesMissingTerminator = Final terminator missing.
LTrashBytesShouldBeEmpty = Trash Bytes should be cleared.
LTrashBytesUnexpected = Unexpected Trash Bytes.

View File

@ -17,6 +17,7 @@ L_XHT = HT
L_XKorean = Korean
L_XKoreanNon = Non-Korean
L_XMatches0_1 = Matches: {0} {1}
L_XNickname = Nickname
L_XOT = OT
L_XRareFormEvo_0_1 = Evolves into form: {0} (rare: {1})
L_XWurmpleEvo_0 = Wurmple Evolution: {0}
@ -389,6 +390,7 @@ LTransferEggLocationTransporter = Invalid Met Location, expected Poké Transfer.
LTransferEggMetLevel = Invalid Met Level for transfer.
LTransferFlagIllegal = Flagged as illegal by the game (glitch abuse).
LTransferHTFlagRequired = Current handler cannot be past gen OT for transferred specimen.
LTransferHTMismatchGender = Handling trainer does not match the expected trainer gender.
LTransferHTMismatchLanguage = Handling trainer does not match the expected trainer language.
LTransferHTMismatchName = Handling trainer does not match the expected trainer name.
LTransferMet = Invalid Met Location, expected Poké Transfer or Crown.
@ -405,3 +407,9 @@ LTransferPIDECEquals = PID should be equal to EC!
LTransferPIDECXor = Encryption Constant matches shinyxored PID.
LTransferTrackerMissing = Pokémon HOME Transfer Tracker is missing.
LTransferTrackerShouldBeZero = Pokémon HOME Transfer Tracker should be 0.
LTrashBytesExpected = Expected Trash Bytes.
LTrashBytesExpected_0 = Expected Trash Bytes: {0}
LTrashBytesMismatchInitial = Expected initial trash bytes to match the encounter.
LTrashBytesMissingTerminator = Final terminator missing.
LTrashBytesShouldBeEmpty = Trash Bytes should be cleared.
LTrashBytesUnexpected = Unexpected Trash Bytes.

View File

@ -17,6 +17,7 @@ L_XHT = EE
L_XKorean = Coreano
L_XKoreanNon = No es coreano.
L_XMatches0_1 = Coinciden: {0} {1}
L_XNickname = Nickname
L_XOT = EO
L_XRareFormEvo_0_1 = Evolves into form: {0} (rare: {1})
L_XWurmpleEvo_0 = Evolución de Wurmple: {0}
@ -389,6 +390,7 @@ LTransferEggLocationTransporter = Localización inválida, se esperaba Pokétran
LTransferEggMetLevel = Nivel de encuentro inválido para la transferencia.
LTransferFlagIllegal = Marcado como ilegal por el juego (abuso de glitch).
LTransferHTFlagRequired = El Entrenador actual no puede ser de una generación anterior para la especie transferida.
LTransferHTMismatchGender = Handling trainer does not match the expected trainer gender.
LTransferHTMismatchLanguage = El idioma del Entrenador actual no corresponde con el idioma esperado.
LTransferHTMismatchName = El nombre del Entrenador actual no corresponde con el nombre esperado.
LTransferMet = Localización inválida. Se esperaba Pokétransfer o Corona.
@ -405,3 +407,9 @@ LTransferPIDECEquals = ¡El PID debería de ser igual a la CE!
LTransferPIDECXor = La constante de encriptado coincide con el PID variocolor.
LTransferTrackerMissing = Falta el rastreador de transferencia de Pokémon HOME.
LTransferTrackerShouldBeZero = El rastreador de transferencia de Pokémon HOME debería ser 0.
LTrashBytesExpected = Expected Trash Bytes.
LTrashBytesExpected_0 = Expected Trash Bytes: {0}
LTrashBytesMismatchInitial = Expected initial trash bytes to match the encounter.
LTrashBytesMissingTerminator = Final terminator missing.
LTrashBytesShouldBeEmpty = Trash Bytes should be cleared.
LTrashBytesUnexpected = Unexpected Trash Bytes.

View File

@ -17,6 +17,7 @@ L_XHT = HT
L_XKorean = Coréen
L_XKoreanNon = Non-Coréen
L_XMatches0_1 = Correspondances : {0} {1}
L_XNickname = Nickname
L_XOT = DO
L_XRareFormEvo_0_1 = Evolves into form: {0} (rare: {1})
L_XWurmpleEvo_0 = Évolution de Chenipotte : {0}
@ -389,6 +390,7 @@ LTransferEggLocationTransporter = Emplacement rencontré non valide, transfert P
LTransferEggMetLevel = Niveau atteint non valide pour le transfert.
LTransferFlagIllegal = Signalé comme illégal par le jeu (abus de glitch).
LTransferHTFlagRequired = L'entraîneur actuel ne sera pas d'une génération plus ancienne pour une espèce transférée.
LTransferHTMismatchGender = Handling trainer does not match the expected trainer gender.
LTransferHTMismatchLanguage = Le dresseur qui manipule ne correspond pas à la langue du dresseur attendu.
LTransferHTMismatchName = La manipulation du dresseur ne correspond pas au nom du dresseur attendu.
LTransferMet = Lieu de rencontre non valide. Pokétransfer ou Couronne attendus.
@ -405,3 +407,9 @@ LTransferPIDECEquals = PID doit être égal à EC!
LTransferPIDECXor = La constante de chiffrement correspond au PID shinyxored.
LTransferTrackerMissing = Pokémon HOME Transfer Tracker est manquant.
LTransferTrackerShouldBeZero = Pokémon HOME Transfer Tracker doit être à 0.
LTrashBytesExpected = Expected Trash Bytes.
LTrashBytesExpected_0 = Expected Trash Bytes: {0}
LTrashBytesMismatchInitial = Expected initial trash bytes to match the encounter.
LTrashBytesMissingTerminator = Final terminator missing.
LTrashBytesShouldBeEmpty = Trash Bytes should be cleared.
LTrashBytesUnexpected = Unexpected Trash Bytes.

View File

@ -17,6 +17,7 @@ L_XHT = HT
L_XKorean = Korean
L_XKoreanNon = Non-Korean
L_XMatches0_1 = Matches: {0} {1}
L_XNickname = Nickname
L_XOT = OT
L_XRareFormEvo_0_1 = Evolve nella forma: {0} (rara: {1})
L_XWurmpleEvo_0 = Evoluzione Wurmple: {0}
@ -389,6 +390,7 @@ LTransferEggLocationTransporter = Luogo di incontro non valido, previsto Pokétr
LTransferEggMetLevel = Livello di incontro non valido per il trasferimento.
LTransferFlagIllegal = Segnato come Illegale dal gioco (abuso di glitch o clonazione).
LTransferHTFlagRequired = Current handler cannot be past gen OT for transferred specimen (l'Allenatore Originale non può essere l'Ultimo Allenatore).
LTransferHTMismatchGender = Handling trainer does not match the expected trainer gender.
LTransferHTMismatchLanguage = La lingua dell'Ultimo Allenatore non corrisponde al valore atteso.
LTransferHTMismatchName = Il nome dell'Ultimo Allenatore non corrisponde al valore atteso.
LTransferMet = Luogo di incontro invalido, previsto Pokétrasporto o Corona.
@ -405,3 +407,9 @@ LTransferPIDECEquals = Il PID dovrebbe essere uguale alla EC!
LTransferPIDECXor = La Encryption Constant corrisponde ad un PID shiny.
LTransferTrackerMissing = Il codice di monitoraggio di Pokémon Home è mancante.
LTransferTrackerShouldBeZero = Il codice di monitoraggio di Pokémon Home dovrebbe essere 0.
LTrashBytesExpected = Expected Trash Bytes.
LTrashBytesExpected_0 = Expected Trash Bytes: {0}
LTrashBytesMismatchInitial = Expected initial trash bytes to match the encounter.
LTrashBytesMissingTerminator = Final terminator missing.
LTrashBytesShouldBeEmpty = Trash Bytes should be cleared.
LTrashBytesUnexpected = Unexpected Trash Bytes.

View File

@ -17,6 +17,7 @@ L_XHT = 現在のトレーナー
L_XKorean = 韓国
L_XKoreanNon = 韓国以外
L_XMatches0_1 = 一致: {0} {1}
L_XNickname = Nickname
L_XOT = 元々のトレーナー
L_XRareFormEvo_0_1 = 次のフォルムに進化: {0} (レア: {1})
L_XWurmpleEvo_0 = ケムッソの進化: {0}
@ -106,7 +107,7 @@ LEncStaticPIDShiny = 固定シンボルエンカウント等の色(色違い
LEncStaticRelearn = 固定シンボルエンカウント等の思い出し技が一致しません。
LEncTradeChangedNickname = ゲーム内交換のニックネームが変更されています。
LEncTradeChangedOT = ゲーム内交換の親名が変更されています。
LEncTradeBad = In-game Trade invalid index?
LEncTradeIndexBad = In-game Trade invalid index?
LEncTradeMatch = 正規のゲーム内交換。
LEncTradeUnchanged = ゲーム内交換:元のトレーナーとニックネームは変更されていません。
LEncTypeMatch = エンカウントタイプが一致。
@ -389,6 +390,7 @@ LTransferEggLocationTransporter = 出会った場所が不正です。世代を
LTransferEggMetLevel = 送られてきたポケモンの出会ったレベルが不正です。
LTransferFlagIllegal = 不正にフラグが立てられています。(バグの悪用)
LTransferHTFlagRequired = 旧世代のポケモンで、親を過去のトレーナーの方にしています。
LTransferHTMismatchGender = Handling trainer does not match the expected trainer gender.
LTransferHTMismatchLanguage = 先のトレーナーと予想されるトレーナーの言語が一致しません。
LTransferHTMismatchName = 先のトレーナーと予想されるトレーナー名が一致しません。
LTransferMet = 出会った場所が不正です。原因はポケシフターかクラウンポケモンだと思われます。
@ -405,3 +407,9 @@ LTransferPIDECEquals = 性格値は暗号化定数と同じにする必要があ
LTransferPIDECXor = 暗号化定数と色違い性格値が一致します。
LTransferTrackerMissing = HOME Trackerが見つかりません。
LTransferTrackerShouldBeZero = HOME Trackerをにしてください。
LTrashBytesExpected = Expected Trash Bytes.
LTrashBytesExpected_0 = Expected Trash Bytes: {0}
LTrashBytesMismatchInitial = Expected initial trash bytes to match the encounter.
LTrashBytesMissingTerminator = Final terminator missing.
LTrashBytesShouldBeEmpty = Trash Bytes should be cleared.
LTrashBytesUnexpected = Unexpected Trash Bytes.

View File

@ -17,6 +17,7 @@ L_XHT = 소유했던 트레이너 (HT)
L_XKorean = 한국어 버전 포켓몬
L_XKoreanNon = 한국어 버전이 아닌 포켓몬
L_XMatches0_1 = 일치: {0} {1}
L_XNickname = Nickname
L_XOT = 어버이 (OT)
L_XRareFormEvo_0_1 = Evolves into form: {0} (rare: {1})
L_XWurmpleEvo_0 = 개무소 진화: {0}
@ -389,6 +390,7 @@ LTransferEggLocationTransporter = 만난 장소가 잘못되었습니다. 포케
LTransferEggMetLevel = 만난 장소가 잘못되었습니다.
LTransferFlagIllegal = Flagged as illegal by the game (glitch abuse).
LTransferHTFlagRequired = 현재 소유자는 전송된 포켓몬의 이전 세대 어버이와 같을 수 없습니다.
LTransferHTMismatchGender = Handling trainer does not match the expected trainer gender.
LTransferHTMismatchLanguage = Handling trainer does not match the expected trainer language.
LTransferHTMismatchName = Handling trainer does not match the expected trainer name.
LTransferMet = 만난 장소가 잘못되었습니다. 포케시프터 또는 크라운시티로 예상됩니다.
@ -405,3 +407,9 @@ LTransferPIDECEquals = PID는 암호화 상수와 동일해야 합니다!
LTransferPIDECXor = 암호화 상수가 색이 다르도록 계산된 PID와 일치합니다.
LTransferTrackerMissing = Pokémon HOME Transfer Tracker is missing.
LTransferTrackerShouldBeZero = Pokémon HOME Transfer Tracker should be 0.
LTrashBytesExpected = Expected Trash Bytes.
LTrashBytesExpected_0 = Expected Trash Bytes: {0}
LTrashBytesMismatchInitial = Expected initial trash bytes to match the encounter.
LTrashBytesMissingTerminator = Final terminator missing.
LTrashBytesShouldBeEmpty = Trash Bytes should be cleared.
LTrashBytesUnexpected = Unexpected Trash Bytes.

View File

@ -17,6 +17,7 @@ L_XHT = 持有人
L_XKorean = 韩版
L_XKoreanNon = 非韩版
L_XMatches0_1 = 匹配: {0} {1}
L_XNickname = Nickname
L_XOT = 初训家
L_XRareFormEvo_0_1 = 进化为「{0}」形态(该可宝梦种类的「{1}」形态更为稀有)
L_XWurmpleEvo_0 = 刺尾虫进化形态: {0}
@ -389,6 +390,7 @@ LTransferEggLocationTransporter = 非法相遇地点, 期望是宝可梦传送
LTransferEggMetLevel = 对于传送,相遇等级非法。
LTransferFlagIllegal = 游戏中被标记为非法(使用了游戏bug)。
LTransferHTFlagRequired = 对于通过前代传送获得的宝可梦,当前持有人不能为前代初训家。
LTransferHTMismatchGender = Handling trainer does not match the expected trainer gender.
LTransferHTMismatchLanguage = 持有训练家与期望训练家语言不匹配。
LTransferHTMismatchName = 持有训练家与期望训练家名字不匹配。
LTransferMet = 非法相遇地点,应该为传送或王冠。
@ -405,3 +407,9 @@ LTransferPIDECEquals = PID应与加密常数相等!
LTransferPIDECXor = 加密常数与异色xor的PID匹配。
LTransferTrackerMissing = Pokémon HOME传输跟踪信息丢失。
LTransferTrackerShouldBeZero = Pokémon HOME传输跟踪信息应为0。
LTrashBytesExpected = Expected Trash Bytes.
LTrashBytesExpected_0 = Expected Trash Bytes: {0}
LTrashBytesMismatchInitial = Expected initial trash bytes to match the encounter.
LTrashBytesMissingTerminator = Final terminator missing.
LTrashBytesShouldBeEmpty = Trash Bytes should be cleared.
LTrashBytesUnexpected = Unexpected Trash Bytes.

View File

@ -17,6 +17,7 @@ L_XHT = 持有人
L_XKorean = 韓版
L_XKoreanNon = 非韓版
L_XMatches0_1 = 匹配: {0} {1}
L_XNickname = Nickname
L_XOT = 初訓家
L_XRareFormEvo_0_1 = 將進化為「{0}」形態(該寶可夢種類之「{1}」形態更爲稀有)
L_XWurmpleEvo_0 = 刺尾蟲進化形態: {0}
@ -389,6 +390,7 @@ LTransferEggLocationTransporter = 不合法之遇見地點, 應該是虛擬傳
LTransferEggMetLevel = 對於寶可傳送不合法之遇見等級。
LTransferFlagIllegal = 游戲中被標記爲非法 (可濫用之Bug)。
LTransferHTFlagRequired = 透過寶可傳送帶過來之前代游戲寶可夢,現時持有人不能為前代之初訓家。
LTransferHTMismatchGender = Handling trainer does not match the expected trainer gender.
LTransferHTMismatchLanguage = 現時持有人與期望語言不匹配。
LTransferHTMismatchName = 現時持有人與期望名字不匹配。
LTransferMet = 不合法遇見地點,應該為寶可傳送或王冠。
@ -405,3 +407,9 @@ LTransferPIDECEquals = PID應與加密常量相同
LTransferPIDECXor = 加密常量與異色 PID 之 XOR 值匹配。
LTransferTrackerMissing = Pokémon HOME 傳輸跟蹤碼資訊丟失。
LTransferTrackerShouldBeZero = Pokémon HOME 傳輸跟蹤碼資訊應置 0。
LTrashBytesExpected = Expected Trash Bytes.
LTrashBytesExpected_0 = Expected Trash Bytes: {0}
LTrashBytesMismatchInitial = Expected initial trash bytes to match the encounter.
LTrashBytesMissingTerminator = Final terminator missing.
LTrashBytesShouldBeEmpty = Trash Bytes should be cleared.
LTrashBytesUnexpected = Unexpected Trash Bytes.

View File

@ -0,0 +1,100 @@
Weißflaum
Gelbflaum
Pinkflaum
Braunflaum
Dunkelflaum
Orangeflaum
Rundkiesel
Glitzerfels
Astkiesel
Zackenfels
Schwarzkiesel
Minikiesel
Pinkschuppe
Blauschuppe
Grünschuppe
Lilaschuppe
Großschuppe
Engschuppe
Blaufeder
Rotfeder
Gelbfeder
Weißfeder
S-Schnurrbart
W-Schnurrbart
Schwarzer Bart
Weißer Bart
Kleinblatt
Großblatt
Engblatt
Alte Klaue
Altes Horn
Dünnpilz
Dickpilz
Stumpf
Tautröpfchen
Schneeflocke
Funken
Schimmerfeuer
Mystikfeuer
Entschlusskraft
Sonderlöffel
Flauschrauch
Giftextrakt
Goldmünze
Ekliges Etwas
Sprungfeder
Muschel
Summnote
Scheinpuder
Glitzerpuder
Rotblume
Pinkblume
Weißblume
Blaublume
Orangeblume
Gelbblume
Glotzbrille
Schwarzbrille
Schönbrille
Süßbonbon
Konfetti
Buntschirm
Altschirm
Scheinwerfer
Cape
Mikrofon
Surfbrett
Teppich
Rohr
Flauschibett
Spiegelkugel
Bilderrahmen
Pinkspange
Rotspange
Blauspange
Gelbspange
Grünspange
Pinkballon
Rotballons
Blauballons
Gelbballon
Grünballons
Bortenhut
Superhut
Schleier
Heldenstirnband
Gelehrtenhut
Blumenbühne
Goldpodest
Glasbühne
Siegerpodest
Würfelbühne
Chelast-Maske
Panflam-Maske
Plinfa-Maske
Großbaum
Fahne
Krone
Diadem
Komet

View File

@ -0,0 +1,100 @@
White Fluff
Yellow Fluff
Pink Fluff
Brown Fluff
Black Fluff
Orange Fluff
Round Pebble
Glitter Boulder
Snaggy Pebble
Jagged Boulder
Black Pebble
Mini Pebble
Pink Scale
Blue Scale
Green Scale
Purple Scale
Big Scale
Narrow Scale
Blue Feather
Red Feather
Yellow Feather
White Feather
Black Moustache
White Moustache
Black Beard
White Beard
Small Leaf
Big Leaf
Narrow Leaf
Shed Claw
Shed Horn
Thin Mushroom
Thick Mushroom
Stump
Pretty Dewdrop
Snow Crystal
Sparks
Shimmering Fire
Mystic Fire
Determination
Peculiar Spoon
Puffy Smoke
Poison Extract
Wealthy Coin
Eerie Thing
Spring
Seashell
Humming Note
Shiny Powder
Glitter Powder
Red Flower
Pink Flower
White Flower
Blue Flower
Orange Flower
Yellow Flower
Googly Specs
Black Specs
Gorgeous Specs
Sweet Candy
Confetti
Colored Parasol
Old Umbrella
Spotlight
Cape
Standing Mike
Surfboard
Carpet
Retro Pipe
Fluffy Bed
Mirror Ball
Photo Board
Pink Barrette
Red Barrette
Blue Barrette
Yellow Barrette
Green Barrette
Pink Balloon
Red Balloons
Blue Balloons
Yellow Balloon
Green Balloons
Lace Headdress
Top Hat
Silk Veil
Heroic Headband
Professor Hat
Flower Stage
Gold Pedestal
Glass Stage
Award Podium
Cube Stage
Turtwig Mask
Chimchar Mask
Piplup Mask
Big Tree
Flag
Crown
Tiara
Comet

View File

@ -0,0 +1,100 @@
Algodón Blanco
Algodón Ámbar
Algodón Rosa
Algodón Marrón
Algodón Negro
Algodón Naranja
Roca Redonda
Roca Luciente
Roca Desigual
Roca Áspera
Roca Negra
Minirroca
Escama Rosa
Escama Azul
Escama Verde
Escama Morada
Escama Grande
Escama Pequeña
Pluma Azul
Pluma Roja
Pluma Amarilla
Pluma Blanca
Bigote Negro
Bigote Blanco
Barba Negra
Barba Blanca
Hoja Pequeña
Hoja Grande
Hoja Fina
Muda Garra
Muda Cuerno
Seta Delgada
Seta Gruesa
Tocón
Gota de Rocío
Cristal Nieve
Chispas
Fuego Trémulo
Fuego Místico
Determinación
Cuchara Rara
Humo Denso
Extracto Veneno
Moneda suerte
Cosa macabra
Muelle
Concha Marina
Nota tarareada
Brillantina
Purpurina
Flor Roja
Flor Rosa
Flor Blanca
Flor Azul
Flor Naranja
Flor Amarilla
Gafas Redondas
Gafas Negras
Gafas Elegantes
Caramelo
Confeti
Parasol
Paraguas Viejo
Foco
Capa
Micrófono
Tabla de Surf
Alfombra
Tubería Retro
Cama Mullida
Bola Espejo
Tablón de Fotos
Lazo Rosa
Lazo Rojo
Lazo Azul
Lazo Amarillo
Lazo Verde
Globo Rosa
Globos Rojos
Globos Azules
Globo Amarillo
Globos Verdes
Lazo
Sombrero
Velo de Seda
Cinta Heroica
Bonete profesor
Escenario Flor
Pedestal de Oro
Escen. Cristal
Podio
Escenario Cubo
Máscara Turtwig
Másc. Chimchar
Máscara Piplup
Árbol Grande
Bandera
Corona
Tiara
Cometa

View File

@ -0,0 +1,100 @@
Coton Blanc
Coton Jaune
Coton Rose
Coton Marron
Coton Noir
Coton Orange
Galet Rond
Galet Luisant
Galet Pépite
Galet Inégal
Galet Noir
Mini Galet
Ecaille Rose
Ecaille Bleue
Ecaille Verte
Ecaille Mauve
Grosse Ecaille
Ecaille Fine
Plume Bleue
Plume Rouge
Plume Jaune
Plume Blanche
Moustache Noire
Mousta. Blanche
Barbe Noire
Barbe Blanche
Petite Feuille
Grande Feuille
Feuille Longue
Griffe Perdue
Corne Perdue
Champi Mince
Champi Epais
Souche
Perle de Rosée
Cristal Neige
Etincelles
Feu Chatoyant
Feu Mystique
Détermination
Cuiller Bizarre
Nuage Fumée
Extrait Poison
Tas de Pièces
Chose Etrange
Ressort
Coquillage
Note Fredonnée
Poudre Brille
Poudre Luisante
Fleur Rouge
Fleur Rose
Fleur Blanche
Fleur Bleue
Fleur Orange
Fleur Jaune
Lunet. Bizarres
Lunettes Soleil
Lunettes Star
Bonbon
Confettis
Parasol Coloré
Ombrelle Chine
Projecteur
Cape
Micro sur Pied
Planche de Surf
Tapis
Tuyau Rétro
Lit Moelleux
Boule Facettes
Planche Photo
Noeud Rose
Noeud Rouge
Noeud Bleu
Noeud Jaune
Noeud Vert
Ballon Rose
Ballons Rouges
Ballons Bleus
Ballon Jaune
Ballons Verts
Coiffe
Haut de Forme
Voile de Soie
Bandeau Héros
Chapeau Lauréat
Piédestal Fleur
Piédestal Or
Piédestal Verre
Podium Arrivée
Piédestal Cube
Mask Tortipouss
Mask Ouisticram
Mask Tiplouf
Grand Arbre
Drapeau
Couronne
Tiare
Comète

View File

@ -0,0 +1,100 @@
Cotonbianco
Cotongiallo
Cotonrosa
Cotonocciola
Cotonpece
Cotonarancio
Ciottotondo
Massoluce
Ciottogibbo
Massorugoso
Ciottopece
Miniciotto
Lustrorosa
Lustroblu
Lustroverde
Lustroviola
Granlustro
Lustrolungo
Blupenna
Rossopenna
Giallopenna
Biancopenna
Nerobaffo
Biancobaffo
Neropizzetto
Candidobarba
Piccolfoglia
Fogliolona
Foglialunga
Artiglioguscio
Cornoguscio
Piccolfungo
Grossofungo
Ceppo
Gocciolrugiada
Nevecristallo
Sprazzo
Luccifuoco
Fuocomistico
Determinazione
Bizzocucchiaio
Nuvolfumo
Velenestratto
Belgruzzolo
Misterocosa
Spiralmolla
Conchimare
Musicalnota
Brillopolvere
Lustropolvere
Rossofior
Rosafior
Candidofior
Blufior
Aranciofior
Giallofior
Stralunocchiali
Occhialipece
Fantaocchiali
Dolceleccornia
Coriandoli
Colorombrello
Vecchiombrello
Luminfascio
Sciarpona
Microfonofisso
Surftavola
Tappeto
Tubo Retró
Sofficeletto
Pallavetro
Bizzocartello
Rosafermaglio
Rossofermaglio
Blufermaglio
Giallofermaglio
Verdefermaglio
Palloncuore
Pallonfuoco
Palloncielo
Pallonstella
Pallonprato
Coronmerletto
Cilindro
Setavelo
Eroefascia
Cappelloprof
Fiorpedana
Oropedana
Vetropedana
Premiopodio
Cubopedana
Masch. Turtwig
Masch. Chimchar
Masch. Piplup
Maxialbero
Bandierina
Corona
Diadema
Cometa

View File

@ -0,0 +1,100 @@
しろいわたげ
きいろのわたげ
ピンクのわたげ
ちゃいろのわたげ
くろいわたげ
オレンジのわたげ
まんまるストーン
きらきらストーン
こつこつストーン
ごつごつストーン
まっくろストーン
ちびストーン
ピンクのウロコ
あおいウロコ
みどりのウロコ
むらさきのウロコ
おおきいウロコ
ほそいウロコ
あおいはね
あかいはね
きいろのはね
しろいはね
くろいちょびひげ
しろいちょびひげ
くろいひげ
しろいひげ
ちいさいはっぱ
おおきいはっぱ
ほそいはっぱ
つめのカラ
つののカラ
ほそいキノコ
ふといキノコ
きりかぶ
きれいなしずく
ゆきのけっしょう
パチパチひばな
メラメラほのお
ふしぎなほのお
にじみでるきあい
ふしぎなスプーン
モコモコけむり
どくエキス
おかねもちコイン
ぶきみなもの
バネ
かいのかけら
はなうたおんぷ
ピカピカパウダー
キラキラパウダー
あかいはな
ピンクのはな
しろいはな
あおいはな
オレンジのはな
きいろのはな
ぐるぐるメガネ
まっくろメガネ
ゴージャスメガネ
あまいキャンディ
かみふぶき
カラフルパラソル
カラカサ
スポットライト
マント
スタンドマイク
サーフボード
カーペット
なつかしどかん
ふわふわベッド
ミラーボール
かおだしかんばん
ピンクのかみどめ
まっかなかみどめ
ブルーのかみどめ
きいろのかみどめ
みどりのかみどめ
ピンクのふうせん
あかいふうせん
あおいふうせん
きいろのふうせん
みどりのふうせん
ヘッドドレス
シルクハット
きぬのベール
たなびくハチマキ
はかせのぼうし
おはなのステージ
きんのおたちだい
ガラスのステージ
ひょうしょうだい
キューブステージ
ナエトルおめん
ヒコザルおめん
ポッチャマおめん
おおきいき
フラッグ
クラウン
ティアラ
ながれぼし

View File

@ -0,0 +1,100 @@
하양솜털
노랑솜털
분홍솜털
갈색솜털
검정솜털
오렌지솜털
동글동글스톤
반짝반짝스톤
똑똑딱딱스톤
울퉁불퉁스톤
새깜장스톤
꼬마스톤
분홍비늘
파랑비늘
초록비늘
보라비늘
큰 비늘
가느다란 비늘
파랑날개
빨강날개
노랑날개
하양날개
검정콧수염
하양콧수염
검정수염
하양수염
작은 나뭇잎
큰 나뭇잎
가느다란 나뭇잎
발톱껍질
뿔껍질
가느다란 버섯
굵은 버섯
그루터기
예쁜 물방울
눈의 결정
톡톡불티
활활불꽃
이상한 불꽃
배어 나오는 기합
이상한 스푼
뭉실뭉실연기
독엑기스
부자코인
낌새 나쁜 물건
스프링
조개껍질조각
콧노래음표
번쩍번쩍파우더
반짝반짝파우더
빨강꽃
분홍꽃
하양꽃
파랑꽃
오렌지꽃
노랑꽃
빙글빙글안경
새깜장안경
고저스안경
달콤한 캔디
꽃종이
컬러풀파라솔
지우산
스포트라이트
망토
스탠드마이크
서프보드
카펫
정겨운 토관
푹신푹신침대
미러볼
사진촬영대
분홍머리핀
새빨강머리핀
블루머리핀
노랑머리핀
초록머리핀
분홍풍선
빨강풍선
파랑풍선
노랑풍선
초록풍선
머리장식
실크해트
실크베일
너울너울머리띠
박사모자
꽃스테이지
금의 연단
유리스테이지
시상대
큐브스테이지
모부기가면
불꽃숭이가면
팽도리가면
큰 나무
플래그
크라운
티아러
별똥별

View File

@ -0,0 +1,100 @@
白色绒毛
黄色绒毛
粉色绒毛
茶色绒毛
黑色绒毛
橙色绒毛
滚圆石头
闪光石头
坚硬石头
粗糙石头
漆黑石头
小石子
粉色鳞片
蓝色鳞片
绿色鳞片
紫色鳞片
大鳞片
细鳞片
蓝色羽毛
红色羽毛
黄色羽毛
白色羽毛
黑色小胡子
白色小胡子
黑色胡须
白色胡须
小叶子
大叶子
细叶子
爪子壳
犄角壳
细蘑菇
粗蘑菇
树桩
漂亮的水滴
雪之结晶
霹雳火花
熊熊火焰
神秘火焰
流露出的决心
神秘的匙子
蓬松烟雾
毒精华
富有硬币
可怕的东西
弹簧
贝壳碎片
哼歌音符
闪烁粉末
闪亮粉末
红花
粉花
白花
蓝花
橙色花
金色花
圈圈眼镜
漆黑眼镜
豪华眼镜
甜甜糖果
彩色纸屑
彩色阳伞
纸伞
聚光灯
披风
立式话筒
冲浪板
地毯
怀旧的水管
松软的床
反射镜球
露脸招牌
粉色发夹
赤红发夹
蓝色发夹
黄色发夹
绿色发夹
粉色气球
红色气球
蓝色气球
黄色气球
绿色气球
蕾丝帽
高帽
丝绸面纱
飘曳头巾
博士帽
鲜花舞台
金色站台
玻璃舞台
颁奖台
方块舞台
草苗龟面具
小火焰猴面具
波加曼面具
大树
旗子
王冠
后冠
流星

View File

@ -0,0 +1,100 @@
白色絨毛
黃色絨毛
粉色絨毛
茶色絨毛
黑色絨毛
橙色絨毛
滾圓石頭
閃光石頭
堅硬石頭
粗糙石頭
漆黑石頭
小石子
粉色鱗片
藍色鱗片
綠色鱗片
紫色鱗片
大鱗片
細鱗片
藍色羽毛
紅色羽毛
黃色羽毛
白色羽毛
黑色小鬍子
白色小鬍子
黑色鬍鬚
白色鬍鬚
小葉子
大葉子
細葉子
爪子殼
犄角殼
細蘑菇
粗蘑菇
樹樁
漂亮的水滴
雪之結晶
霹靂火花
熊熊火焰
神秘火焰
流露出的決心
神秘的匙子
蓬鬆煙霧
毒精華
富有硬幣
可怕的東西
彈簧
貝殼碎片
哼歌音符
閃爍粉末
閃亮粉末
紅花
粉花
白花
藍花
橙色花
金色花
圈圈眼鏡
漆黑眼鏡
豪華眼鏡
甜甜糖果
彩色紙屑
彩色陽傘
紙傘
聚光燈
披風
立式話筒
衝浪板
地毯
懷舊的水管
鬆軟的床
反射鏡球
露臉招牌
粉色髮夾
赤紅髮夾
藍色髮夾
黃色髮夾
綠色髮夾
粉色氣球
紅色氣球
藍色氣球
黃色氣球
綠色氣球
蕾絲帽
高帽
絲綢面紗
飄曳頭巾
博士帽
鮮花舞台
金色站台
玻璃舞台
頒獎台
方塊舞台
草苗龜面具
小火焰猴面具
波加曼面具
大樹
旗子
王冠
后冠
流星

View File

@ -0,0 +1,19 @@
Kostümierung
Farm
Stadt bei Nacht
Verschneiter Ort
Feurig
Unendliche Weiten
Kumuluswolke
Wüste
Blütenmeer
Zukunft
Meer
Schwarze Dunkelheit
Tatami
Lebkuchen
Am Meeresgrund
Untergrund
Himmel
Theater
(Kein)

View File

@ -0,0 +1,19 @@
Dress Up
Ranch
City at Night
Snowy Town
Fiery
Outer Space
Cumulus Cloud
Desert
Flower Patch
Future Room
Open Sea
Total Darkness
Tatami Room
Gingerbread Room
Seafloor
Underground
Sky
Theater
(None)

View File

@ -0,0 +1,19 @@
Arreglarse
Rancho
Vida nocturna
Ciudad nevada
Fogoso
Espacio exterior
Cúmulo
Desierto
Campo de flores
Sala futurista
Mar abierto
Oscuridad total
Sala tatami
Sala pan de jengibre
Fondo marino
Subsuelo
Cielo
Teatro
(Ninguno)

View File

@ -0,0 +1,19 @@
Habillage
Ranch
Ville de Nuit
Ville Enneigée
Flammes
Espace
Cumulus
Désert
Pré Fleuri
Pièce Futur
Pleine Mer
Dans les Ténèbres
Salle Tatami
Pain d'Epices
Fonds Marins
Souterrain
Ciel
Théâtre
(Aucun)

View File

@ -0,0 +1,19 @@
Eleganza
Ranch
Città di Notte
Città Innevata
Fuoco e Fiamme
Profondo Spazio
Nuvolone
Canyon
Prato Fiorito
Stanza Trendy
Mare Aperto
Tenebre
Stanza Tatami
Stanza Ghiotta
Fondo Marino
Sottosuolo
Volta Celeste
Teatro
(Niente)

View File

@ -0,0 +1,19 @@
ドレスアップ!
ぼくじょう
よるのまち
ゆきのまち
ほのおのステージ
スペースステージ
にゅうどうぐも
さばくちたい
おはなばたけ
みらいルーム
おおうなばら
まっくらやみ
わびさびのへや
おかしのへや
うみのそこ
ちてい
てんくう
げきじょう
(なし)

View File

@ -0,0 +1,19 @@
드레스업!
목장
밤의 도시
눈의 도시
불꽃스테이지
우주스테이지
적란운
사막지대
꽃밭
미래룸
대양
깜깜한 어둠
안빈낙도의 방
과자의 방
해저
땅밑
천공
극장
(없음)

View File

@ -0,0 +1,19 @@
盛装打扮
牧场
夜晚的城市
下雪的城市
火焰的舞台
太空舞台
积雨云
沙漠地带
花田
未来房间
大海原
漆黑一片
简朴娴静的房间
玩具房间
海底
地底
天空
剧场
(无)

View File

@ -0,0 +1,19 @@
盛裝打扮
牧場
夜晚的城市
下雪的城市
火焰的舞台
太空舞台
積雨雲
沙漠地帶
花田
未來房間
大海原
漆黑一片
簡樸嫻靜的房間
玩具房間
海底
地底
天空
劇場
(無)

View File

@ -0,0 +1,25 @@
Digitaluhr
Taschenrechner
Notizblock
Schrittzähler
Pokémon-Liste
Freundschaftsstatus
Itemradar
Beerensucher
Pension-Prüfer
Pokémon-Historie
Zähler
Analoguhr
Landkarte
Linkfinder
Münzwurf
Attackentester
Kalender
Zeichenbrett
Roulette
Trainer-Zähler
Eieruhr
Farbwechsler
Vergleich
Stoppuhr
Wecker

View File

@ -0,0 +1,25 @@
Digital Watch
Calculator
Memo Pad
Pedometer
Pokémon List
Friendship Checker
Dowsing Machine
Berry Searcher
Day-Care Checker
Pokémon History
Counter
Analog Watch
Marking Map
Link Searcher
Coin Toss
Move Tester
Calendar
Dot Artist
Roulette
Trainer Counter
Kitchen Timer
Color Changer
Matchup Checker
Stopwatch
Alarm Clock

View File

@ -0,0 +1,25 @@
Reloj digital
Calculadora
Bloc
Podómetro
Lista Pokémon
Indicador de amistad
Zahorí
Buscabayas
Indicador Guardería
Historial Pokémon
Contador
Reloj analógico
Marcamapa
Buscaconexión
Lanzamonedas
Indicador de movimientos
Calendario
Artista puntos
Ruleta
Contador de entrenadores
Temporizador
Cambiacolor
Indicador de atracción
Cronómetro
Despertador

View File

@ -0,0 +1,25 @@
Montre Digitale
Calculatrice
Carnet
Podomètre
Equipe Pokémon
Contrôleur d'Amitié
Radar à Objet
Contrôleur de Baie
Contrôleur Pension
Historique Pokémon
Compteur
Montre Analogique
Carte Repères
Cherche-Connexion
Pile ou Face
Testeur de Capacités
Calendrier
Dessinateur
Roulette
Compteur Poké Radar
Minuteur
Changeur de Couleur
Testeur d'Affinités
Chronomètre
Réveil

View File

@ -0,0 +1,25 @@
Orologio Digitale
Calcolatrice
Annotazioni
Contapassi
Lista Pokémon
Verifica Amicizia
Ricerca Strumenti
Ricerca Bacche
Verifica Crescita
Storia Pokémon
Contatore
Orologio Analogico
Segna Mappa
Ricerca Collegamenti
Testa o Croce
Verifica Mosse
Calendario
Puntinismo
Roulette
ContaPokémon
Timer da Cucina
Modifica Colore
Verifica Sintonia
Cronometro
Orologio a Sveglia

View File

@ -0,0 +1,25 @@
デジタルどけい
けいさんき
メモようし
ほすうカウンター
ポケモンリスト
なつきチェッカー
ダウジングマシン
きのみサーチャー
そだてやチェッカー
ポケモンヒストリー
カウンター
アナログどけい
マーキングマップ
つうしんサーチャー
コイントス
わざこうかチェッカー
カレンダー
ドットアート
ルーレット
ポケトレカウンター
キッチンタイマー
カラーチェンジャー
あいしょうチェッカー
ストップウォッチ
アラームどけい

View File

@ -0,0 +1,25 @@
디지털시계
계산기
메모용지
만보기
포켓몬리스트
친밀도체커
다우징머신
나무열매탐색기
키우미집체커
포켓몬히스토리
카운터
아날로그시계
마킹맵
통신탐색기
동전던지기
기술효과체커
캘린더
도트아트
룰렛
포켓트레카운터
키친타이머
컬러체인저
상성체커
스톱워치
알람시계

View File

@ -0,0 +1,25 @@
数字时钟
计算器
便签
步数计
宝可梦列表
亲密度检测器
探宝器
树果检测器
蛋检测器
宝可梦履历
计数器
模拟时钟
标记地图
连接搜索器
掷硬币
招式效果检测器
日历
像素画
轮盘
宝可追踪计数器
计时器
变色器
契合度检测器
秒表
闹钟

View File

@ -0,0 +1,25 @@
數位錶
計算機
便條紙
步數計
寶可夢列表
親密度檢測器
探寶器
樹果檢測器
蛋檢測器
寶可夢履歷
計數器
指針錶
標記地圖
連線搜索器
擲硬幣
招式效果檢測器
月曆
像素畫
輪盤
寶可追蹤計數器
計時器
變色器
契合度檢測器
秒表
鬧鐘

View File

@ -0,0 +1,80 @@
Herz A
Herz B
Herz C
Herz D
Herz E
Herz F
Stern A
Stern B
Stern C
Stern D
Stern E
Stern F
Linie A
Linie B
Linie C
Linie D
Rauch A
Rauch B
Rauch C
Rauch D
Elementar A
Elementar B
Elementar C
Elementar D
Blasen A
Blasen B
Blasen C
Blasen D
Feuer A
Feuer B
Feuer C
Feuer D
Konfetti A
Konfetti B
Konfetti C
Konfetti D
Blüten A
Blüten B
Blüten C
Blüten D
Blüten E
Blüten F
Musik A
Musik B
Musik C
Musik D
Musik E
Musik F
Musik G
Sticker A
Sticker B
Sticker C
Sticker D
Sticker E
Sticker F
Sticker G
Sticker H
Sticker I
Sticker J
Sticker K
Sticker L
Sticker M
Sticker N
Sticker O
Sticker P
Sticker Q
Sticker R
Sticker S
Sticker T
Sticker U
Sticker V
Sticker W
Sticker X
Sticker Y
Sticker Z
Schockstick.
Mystikstick.
Wasserstick.
Explosticker
Glitzer

View File

@ -0,0 +1,80 @@
Heart Seal A
Heart Seal B
Heart Seal C
Heart Seal D
Heart Seal E
Heart Seal F
Star Seal A
Star Seal B
Star Seal C
Star Seal D
Star Seal E
Star Seal F
Line Seal A
Line Seal B
Line Seal C
Line Seal D
Smoke Seal A
Smoke Seal B
Smoke Seal C
Smoke Seal D
Ele-Seal A
Ele-Seal B
Ele-Seal C
Ele-Seal D
Foamy Seal A
Foamy Seal B
Foamy Seal C
Foamy Seal D
Fire Seal A
Fire Seal B
Fire Seal C
Fire Seal D
Party Seal A
Party Seal B
Party Seal C
Party Seal D
Flora Seal A
Flora Seal B
Flora Seal C
Flora Seal D
Flora Seal E
Flora Seal F
Song Seal A
Song Seal B
Song Seal C
Song Seal D
Song Seal E
Song Seal F
Song Seal G
A Seal
B Seal
C Seal
D Seal
E Seal
F Seal
G Seal
H Seal
I Seal
J Seal
K Seal
L Seal
M Seal
N Seal
O Seal
P Seal
Q Seal
R Seal
S Seal
T Seal
U Seal
V Seal
W Seal
X Seal
Y Seal
Z Seal
Shock Seal
Mystery Seal
Liquid Seal
Burst Seal
Twinkle Seal

View File

@ -0,0 +1,80 @@
S. Corazón A
S. Corazón B
S. Corazón C
S. Corazón D
S. Corazón E
S. Corazón F
S. Astro A
S. Astro B
S. Astro C
S. Astro D
S. Astro E
S. Astro F
S. Línea A
S. Línea B
S. Línea C
S. Línea D
S. Humo A
S. Humo B
S. Humo C
S. Humo D
S. Electro A
S. Electro B
S. Electro C
S. Electro D
S. Espuma A
S. Espuma B
S. Espuma C
S. Espuma D
S. Fuego A
S. Fuego B
S. Fuego C
S. Fuego D
S. Fiesta A
S. Fiesta B
S. Fiesta C
S. Fiesta D
S. Floral A
S. Floral B
S. Floral C
S. Floral D
S. Floral E
S. Floral F
S. Lírico A
S. Lírico B
S. Lírico C
S. Lírico D
S. Lírico E
S. Lírico F
S. Lírico G
Sello A
Sello B
Sello C
Sello D
Sello E
Sello F
Sello G
Sello H
Sello I
Sello J
Sello K
Sello L
Sello M
Sello N
Sello O
Sello P
Sello Q
Sello R
Sello S
Sello T
Sello U
Sello V
Sello W
Sello X
Sello Y
Sello Z
S. Sacudida
S. Misterio
S. Líquido
S. Explosión
S. Chispa

View File

@ -0,0 +1,80 @@
Sc. Cœur A
Sc. Cœur B
Sc. Cœur C
Sc. Cœur D
Sc. Cœur E
Sc. Cœur F
Sc. Etoile A
Sc. Etoile B
Sc. Etoile C
Sc. Etoile D
Sc. Etoile E
Sc. Etoile F
Sc. Trait A
Sc. Trait B
Sc. Trait C
Sc. Trait D
Sc. Fumée A
Sc. Fumée B
Sc. Fumée C
Sc. Fumée D
Sc. Eclair A
Sc. Eclair B
Sc. Eclair C
Sc. Eclair D
Sc. Bulle A
Sc. Bulle B
Sc. Bulle C
Sc. Bulle D
Sc. Feu A
Sc. Feu B
Sc. Feu C
Sc. Feu D
Sc. Fête A
Sc. Fête B
Sc. Fête C
Sc. Fête D
Sc. Fleur A
Sc. Fleur B
Sc. Fleur C
Sc. Fleur D
Sc. Fleur E
Sc. Fleur F
Sc. Chant A
Sc. Chant B
Sc. Chant C
Sc. Chant D
Sc. Chant E
Sc. Chant F
Sc. Chant G
Sceau A
Sceau B
Sceau C
Sceau D
Sceau E
Sceau F
Sceau G
Sceau H
Sceau I
Sceau J
Sceau K
Sceau L
Sceau M
Sceau N
Sceau O
Sceau P
Sceau Q
Sceau R
Sceau S
Sceau T
Sceau U
Sceau V
Sceau W
Sceau X
Sceau Y
Sceau Z
Sceau Choc
Sc. Mystère
Sc. Liquide
Sceau Boom
Sc. Brille

View File

@ -0,0 +1,80 @@
Amorbollo A
Amorbollo B
Amorbollo C
Amorbollo D
Amorbollo E
Amorbollo F
Astrobollo A
Astrobollo B
Astrobollo C
Astrobollo D
Astrobollo E
Astrobollo F
Lineabollo A
Lineabollo B
Lineabollo C
Lineabollo D
Fumobollo A
Fumobollo B
Fumobollo C
Fumobollo D
Lampobollo A
Lampobollo B
Lampobollo C
Lampobollo D
Bollabollo A
Bollabollo B
Bollabollo C
Bollabollo D
Fuocobollo A
Fuocobollo B
Fuocobollo C
Fuocobollo D
Partybollo A
Partybollo B
Partybollo C
Partybollo D
Florabollo A
Florabollo B
Florabollo C
Florabollo D
Florabollo E
Florabollo F
Musicbollo A
Musicbollo B
Musicbollo C
Musicbollo D
Musicbollo E
Musicbollo F
Musicbollo G
Bollo A
Bollo B
Bollo C
Bollo D
Bollo E
Bollo F
Bollo G
Bollo H
Bollo I
Bollo J
Bollo K
Bollo L
Bollo M
Bollo N
Bollo O
Bollo P
Bollo Q
Bollo R
Bollo S
Bollo T
Bollo U
Bollo V
Bollo W
Bollo X
Bollo Y
Bollo Z
Stuporbollo
Misterobollo
Liquidbollo
Bottobollo
Favillobollo

View File

@ -0,0 +1,80 @@
ハートシールA
ハートシールB
ハートシールC
ハートシールD
ハートシールE
ハートシールF
スターシールA
スターシールB
スターシールC
スターシールD
スターシールE
スターシールF
ラインシールA
ラインシールB
ラインシールC
ラインシールD
スモークシールA
スモークシールB
スモークシールC
スモークシールD
エレキシールA
エレキシールB
エレキシールC
エレキシールD
バブルシールA
バブルシールB
バブルシールC
バブルシールD
ファイアシールA
ファイアシールB
ファイアシールC
ファイアシールD
パーティシールA
パーティシールB
パーティシールC
パーティシールD
フラワーシールA
フラワーシールB
フラワーシールC
フラワーシールD
フラワーシールE
フラワーシールF
ソングシールA
ソングシールB
ソングシールC
ソングシールD
ソングシールE
ソングシールF
ソングシールG
Aシール
Bシール
Cシール
Dシール
Eシール
Fシール
Gシール
Hシール
Iシール
Jシール
Kシール
Lシール
Mシール
Nシール
Oシール
Pシール
Qシール
Rシール
Sシール
Tシール
Uシール
Vシール
Wシール
Xシール
Yシール
Zシール
びっくりシール
はてなシール
リキッドシール
ばくはつシール
キラキラシール

View File

@ -0,0 +1,80 @@
하트실A
하트실B
하트실C
하트실D
하트실E
하트실F
스타실A
스타실B
스타실C
스타실D
스타실E
스타실F
라인실A
라인실B
라인실C
라인실D
스모크실A
스모크실B
스모크실C
스모크실D
일렉트릭실A
일렉트릭실B
일렉트릭실C
일렉트릭실D
버블실A
버블실B
버블실C
버블실D
파이어실A
파이어실B
파이어실C
파이어실D
파티실A
파티실B
파티실C
파티실D
플라워실A
플라워실B
플라워실C
플라워실D
플라워실E
플라워실F
노래실A
노래실B
노래실C
노래실D
노래실E
노래실F
노래실G
A실
B실
C실
D실
E실
F실
G실
H실
I실
J실
K실
L실
M실
N실
O실
P실
Q실
R실
S실
T실
U실
V실
W실
X실
Y실
Z실
느낌표실
물음표실
리퀴드실
폭발실
반짝반짝실

View File

@ -0,0 +1,80 @@
爱心贴纸A
爱心贴纸B
爱心贴纸C
爱心贴纸D
爱心贴纸E
爱心贴纸F
星星贴纸A
星星贴纸B
星星贴纸C
星星贴纸D
星星贴纸E
星星贴纸F
线条贴纸A
线条贴纸B
线条贴纸C
线条贴纸D
烟雾贴纸A
烟雾贴纸B
烟雾贴纸C
烟雾贴纸D
电力贴纸A
电力贴纸B
电力贴纸C
电力贴纸D
泡泡贴纸A
泡泡贴纸B
泡泡贴纸C
泡泡贴纸D
火焰贴纸A
火焰贴纸B
火焰贴纸C
火焰贴纸D
派对贴纸A
派对贴纸B
派对贴纸C
派对贴纸D
花朵贴纸A
花朵贴纸B
花朵贴纸C
花朵贴纸D
花朵贴纸E
花朵贴纸F
乐曲贴纸A
乐曲贴纸B
乐曲贴纸C
乐曲贴纸D
乐曲贴纸E
乐曲贴纸F
乐曲贴纸G
A贴纸
B贴纸
C贴纸
D贴纸
E贴纸
F贴纸
G贴纸
H贴纸
I贴纸
J贴纸
K贴纸
L贴纸
M贴纸
N贴纸
O贴纸
P贴纸
Q贴纸
R贴纸
S贴纸
T贴纸
U贴纸
V贴纸
W贴纸
X贴纸
Y贴纸
Z贴纸
叹号贴纸
问号贴纸
液体贴纸
爆炸贴纸
闪烁贴纸

View File

@ -0,0 +1,80 @@
愛心貼紙A
愛心貼紙B
愛心貼紙C
愛心貼紙D
愛心貼紙E
愛心貼紙F
星星貼紙A
星星貼紙B
星星貼紙C
星星貼紙D
星星貼紙E
星星貼紙F
線條貼紙A
線條貼紙B
線條貼紙C
線條貼紙D
煙霧貼紙A
煙霧貼紙B
煙霧貼紙C
煙霧貼紙D
電力貼紙A
電力貼紙B
電力貼紙C
電力貼紙D
泡泡貼紙A
泡泡貼紙B
泡泡貼紙C
泡泡貼紙D
火焰貼紙A
火焰貼紙B
火焰貼紙C
火焰貼紙D
派對貼紙A
派對貼紙B
派對貼紙C
派對貼紙D
花朵貼紙A
花朵貼紙B
花朵貼紙C
花朵貼紙D
花朵貼紙E
花朵貼紙F
樂曲貼紙A
樂曲貼紙B
樂曲貼紙C
樂曲貼紙D
樂曲貼紙E
樂曲貼紙F
樂曲貼紙G
A貼紙
B貼紙
C貼紙
D貼紙
E貼紙
F貼紙
G貼紙
H貼紙
I貼紙
J貼紙
K貼紙
L貼紙
M貼紙
N貼紙
O貼紙
P貼紙
Q貼紙
R貼紙
S貼紙
T貼紙
U貼紙
V貼紙
W貼紙
X貼紙
Y貼紙
Z貼紙
嘆號貼紙
問號貼紙
液體貼紙
爆炸貼紙
閃爍貼紙

View File

@ -108,12 +108,16 @@ public sealed override void CopyChangesFrom(SaveFile sav)
public sealed override int MaxBallID => Legal.MaxBallID_4;
public sealed override GameVersion MaxGameID => Legal.MaxGameID_4; // Colo/XD
// Checksums
#region Checksums
protected abstract int FooterSize { get; }
private ushort CalcBlockChecksum(ReadOnlySpan<byte> data) => Checksums.CRC16_CCITT(data[..^FooterSize]);
private static ushort GetBlockChecksumSaved(ReadOnlySpan<byte> data) => ReadUInt16LittleEndian(data[^2..]);
private bool GetBlockChecksumValid(ReadOnlySpan<byte> data) => CalcBlockChecksum(data) == GetBlockChecksumSaved(data);
public const uint MAGIC_JAPAN_INTL = 0x20060623;
public const uint MAGIC_KOREAN = 0x20070903;
public uint Magic { get => ReadUInt32LittleEndian(General[^8..^4]); set => SetMagics(value); }
protected void SetMagics(uint magic)
{
WriteUInt32LittleEndian(General[^8..^4], magic);
@ -196,6 +200,7 @@ private int GetActiveExtraBlock(BlockInfo4 block)
var prefer = General[PreferOffset + (index - 1)];
return SAV4BlockDetection.CompareExtra(Data, Data.AsSpan(PartitionSize), block, key, keyBackup, prefer);
}
#endregion
public BattleVideo4? GetBattleVideo(int index)
{
@ -227,6 +232,11 @@ private int GetActiveExtraBlock(BlockInfo4 block)
protected int Trainer1;
public int GTS { get; protected set; } = int.MinValue;
protected int FashionCase = int.MinValue;
private int OFS_AccessoryMultiCount => FashionCase; // 4 bits each
private int OFS_AccessorySingleCount => FashionCase + 0x20; // 1 bit each
private int OFS_Backdrop => FashionCase + 0x28;
public int ChatterOffset { get; protected set; } = int.MinValue;
public Chatter4 Chatter => new(this, Data.AsMemory(ChatterOffset));
@ -239,7 +249,7 @@ public override int PartyCount
public sealed override int GetPartyOffset(int slot) => Party + (SIZE_PARTY * slot);
// Trainer Info
#region Trainer Info
public override string OT
{
get => GetString(General.Slice(Trainer1, 16));
@ -350,10 +360,7 @@ public int Region
get => General[Geonet + 2];
set { if (value < 0) return; General[Geonet + 2] = (byte)value; }
}
public const uint MAGIC_JAPAN_INTL = 0x20060623;
public const uint MAGIC_KOREAN = 0x20070903;
public uint Magic { get => ReadUInt32LittleEndian(General[^8..^4]); set => SetMagics(value); }
#endregion
protected sealed override PK4 GetPKM(byte[] data) => new(data);
protected sealed override byte[] DecryptPKM(byte[] data) => PokeCrypto.DecryptArray45(data);
@ -366,7 +373,7 @@ protected sealed override void SetPKM(PKM pk, bool isParty = false)
pk.RefreshChecksum();
}
// Daycare
#region Daycare
public int DaycareSlotCount => 2;
private const int DaycareSlotSize = PokeCrypto.SIZE_4PARTY;
protected abstract int DaycareOffset { get; }
@ -417,6 +424,7 @@ public bool IsEggAvailable
((IDaycareRandomState<uint>)this).Seed = (uint)Util.Rand.Next(1, int.MaxValue);
}
}
#endregion
// Mystery Gift
public bool IsMysteryGiftUnlocked { get => (General[72] & 1) == 1; set => General[72] = (byte)((General[72] & 0xFE) | (value ? 1 : 0)); }
@ -504,23 +512,92 @@ public void SetEventFlag(int flagNumber, bool value)
public void SetWork(int index, ushort value) => WriteUInt16LittleEndian(General[EventWork..][(index * 2)..], value);
#endregion
// Seals
#region Seals
public const byte SealMaxCount = 99;
public Span<byte> GetSealCase() => General.Slice(Seal, (int)Seal4.MAX);
public void SetSealCase(ReadOnlySpan<byte> value) => SetData(General.Slice(Seal, (int)Seal4.MAX), value);
public byte GetSealCount(Seal4 id) => General[Seal + (int)id];
public byte SetSealCount(Seal4 id, byte count) => General[Seal + (int)id] = Math.Min(SealMaxCount, count);
public void SetSealCount(Seal4 id, byte count) => General[Seal + (int)id] = Math.Min(SealMaxCount, count);
#endregion
public void SetAllSeals(byte count, bool unreleased = false)
#region Accessories
public byte GetAccessoryOwnedCount(Accessory4 accessory)
{
var sealIndexCount = (int)(unreleased ? Seal4.MAX : Seal4.MAXLEGAL);
var clamped = Math.Min(count, SealMaxCount);
for (int i = 0; i < sealIndexCount; i++)
General[Seal + i] = clamped;
if (accessory.IsMultiple())
{
byte enumIdx = (byte)accessory;
byte val = General[OFS_AccessoryMultiCount + (enumIdx / 2)];
if (enumIdx % 2 == 0)
return (byte)(val & 0x0F);
return (byte)(val >> 4);
}
// Otherwise, it's a single-count accessory
var flagIdx = accessory.GetSingleBitIndex();
if (GetFlag(OFS_AccessorySingleCount + (flagIdx >> 3), flagIdx & 7))
return 1;
return 0;
}
public void SetAccessoryOwnedCount(Accessory4 accessory, byte count)
{
if (accessory.IsMultiple())
{
if (count > 9)
count = 9;
var enumIdx = (byte)accessory;
var addr = OFS_AccessoryMultiCount + (enumIdx / 2);
if (enumIdx % 2 == 0)
{
General[addr] &= 0xF0; // Reset old count to 0
General[addr] |= count; // Set new count
}
else
{
General[addr] &= 0x0F; // Reset old count to 0
General[addr] |= (byte)(count << 4); // Set new count
}
}
else
{
var flagIdx = accessory.GetSingleBitIndex();
SetFlag(OFS_AccessorySingleCount + (flagIdx >> 3), flagIdx & 7, count != 0);
}
State.Edited = true;
}
#endregion
#region Backdrops
public byte GetBackdropPosition(Backdrop4 backdrop)
{
ArgumentOutOfRangeException.ThrowIfGreaterThan((uint)backdrop, (uint)Backdrop4.Unset);
return General[OFS_Backdrop + (byte)backdrop];
}
public bool GetBackdropUnlocked(Backdrop4 backdrop) => GetBackdropPosition(backdrop) != (byte)Backdrop4.Unset;
public void RemoveBackdrop(Backdrop4 backdrop) => SetBackdropPosition(backdrop, (byte)Backdrop4.Unset);
/// <summary>
/// Sets the position of a backdrop.
/// </summary>
/// <remarks>
/// Every unlocked backdrop must have a different position.
/// Use <see cref="RemoveBackdrop"/> to remove a backdrop.
/// </remarks>
public void SetBackdropPosition(Backdrop4 backdrop, byte position)
{
ArgumentOutOfRangeException.ThrowIfGreaterThan((uint)backdrop, (uint)Backdrop4.Unset);
General[OFS_Backdrop + (byte)backdrop] = Math.Min(position, (byte)Backdrop4.Unset);
State.Edited = true;
}
#endregion
public int GetMailOffset(int index)
{
int ofs = (index * Mail4.SIZE);

View File

@ -58,6 +58,7 @@ private void GetSAVOffsets()
AdventureInfo = 0;
Trainer1 = 0x64;
Party = 0x98;
FashionCase = 0x4BA8;
ChatterOffset = 0x61CC;
Geonet = 0x96D8;
WondercardFlags = 0xA6D0;

View File

@ -66,6 +66,7 @@ private void GetSAVOffsets()
Trainer1 = 0x64;
Party = 0x98;
Extra = 0x230C;
FashionCase = 0x3F64;
ChatterOffset = 0x4E74;
Geonet = 0x8D44;
WondercardFlags = 0x9D3C;

View File

@ -34,8 +34,6 @@ public SAV4Pt(byte[] data) : base(data, GeneralSize, StorageSize, GeneralSize)
public const int GeneralSize = 0xCF2C;
private const int StorageSize = 0x121E4; // Start 0xCF2C, +4 starts box data
public const byte BACKDROP_POSITION_IF_NOT_UNLOCKED = 0x12;
protected override BlockInfo4[] ExtraBlocks =>
[
new BlockInfo4(0, 0x20000, 0x2AC0), // Hall of Fame
@ -54,9 +52,6 @@ public SAV4Pt(byte[] data) : base(data, GeneralSize, StorageSize, GeneralSize)
protected override int DaycareOffset => 0x1654;
public override BattleFrontierFacility4 MaxFacility => BattleFrontierFacility4.Arcade;
private const int OFS_AccessoryMultiCount = 0x4E38; // 4 bits each
private const int OFS_AccessorySingleCount = 0x4E58; // 1 bit each
private const int OFS_Backdrop = 0x4E60;
private const int OFS_ToughWord = 0xCEB4;
private const int OFS_VillaFurniture = 0x111F;
@ -68,6 +63,7 @@ private void GetSAVOffsets()
Trainer1 = 0x68;
Party = 0xA0;
Extra = 0x2820;
FashionCase = 0x4E38;
ChatterOffset = 0x64EC;
Geonet = 0xA4C4;
WondercardFlags = 0xB4C0;
@ -198,85 +194,6 @@ private Roamer4 GetRoamer(int index)
return new Roamer4(mem);
}
public byte GetAccessoryOwnedCount(Accessory4 accessory)
{
if (accessory < Accessory4.ColoredParasol)
{
byte enumIdx = (byte)accessory;
byte val = General[OFS_AccessoryMultiCount + (enumIdx / 2)];
if (enumIdx % 2 == 0)
return (byte)(val & 0x0F);
return (byte)(val >> 4);
}
// Otherwise, it's a single-count accessory
var flagIdx = accessory - Accessory4.ColoredParasol;
if (GetFlag(OFS_AccessorySingleCount + (flagIdx >> 3), flagIdx & 7))
return 1;
return 0;
}
public void SetAccessoryOwnedCount(Accessory4 accessory, byte count)
{
if (accessory < Accessory4.ColoredParasol)
{
if (count > 9)
count = 9;
var enumIdx = (byte)accessory;
var addr = OFS_AccessoryMultiCount + (enumIdx / 2);
if (enumIdx % 2 == 0)
{
General[addr] &= 0xF0; // Reset old count to 0
General[addr] |= count; // Set new count
}
else
{
General[addr] &= 0x0F; // Reset old count to 0
General[addr] |= (byte)(count << 4); // Set new count
}
}
else
{
var flagIdx = accessory - Accessory4.ColoredParasol;
SetFlag(OFS_AccessorySingleCount + (flagIdx >> 3), flagIdx & 7, count != 0);
}
State.Edited = true;
}
public byte GetBackdropPosition(Backdrop4 backdrop)
{
if (backdrop > Backdrop4.Theater)
throw new ArgumentOutOfRangeException(nameof(backdrop), backdrop, null);
return General[OFS_Backdrop + (byte)backdrop];
}
public bool GetBackdropUnlocked(Backdrop4 backdrop)
{
return GetBackdropPosition(backdrop) != BACKDROP_POSITION_IF_NOT_UNLOCKED;
}
public void RemoveBackdrop(Backdrop4 backdrop) => SetBackdropPosition(backdrop, BACKDROP_POSITION_IF_NOT_UNLOCKED);
/// <summary>
/// Sets the position of a backdrop.
/// </summary>
/// <remarks>
/// Every unlocked backdrop must have a different position.
/// Use <see cref="RemoveBackdrop"/> to remove a backdrop.
/// </remarks>
public void SetBackdropPosition(Backdrop4 backdrop, byte position)
{
if (backdrop > Backdrop4.Theater)
throw new ArgumentOutOfRangeException(nameof(backdrop), backdrop, null);
if (position > BACKDROP_POSITION_IF_NOT_UNLOCKED)
position = BACKDROP_POSITION_IF_NOT_UNLOCKED;
General[OFS_Backdrop + (byte)backdrop] = position;
State.Edited = true;
}
public bool GetToughWordUnlocked(ToughWord4 word)
{
if (word > ToughWord4.REMSleep)

View File

@ -1,107 +1,129 @@
using System;
namespace PKHeX.Core;
public enum Accessory4 : byte
{
WhiteFluff = 0,
YellowFluff = 1,
PinkFluff = 2,
BrownFluff = 3,
BlackFluff = 4,
OrangeFluff = 5,
RoundPebble = 6,
GlitterBoulder = 7,
SnaggyPebble = 8,
JaggedBoulder = 9,
BlackPebble = 10,
MiniPebble = 11,
PinkScale = 12,
BlueScale = 13,
GreenScale = 14,
PurpleScale = 15,
BigScale = 16,
NarrowScale = 17,
BlueFeather = 18,
RedFeather = 19,
YellowFeather = 20,
WhiteFeather = 21,
BlackMoustache = 22,
WhiteMoustache = 23,
BlackBeard = 24,
WhiteBeard = 25,
SmallLeaf = 26,
BigLeaf = 27,
NarrowLeaf = 28,
ShedClaw = 29,
ShedHorn = 30,
ThinMushroom = 31,
ThickMushroom = 32,
Stump = 33,
PrettyDewdrop = 34,
SnowCrystal = 35,
Sparks = 36,
ShimmeringFire = 37,
MysticFire = 38,
Determination = 39,
PeculiarSpoon = 40,
PuffySmoke = 41,
PoisonExtract = 42,
WealthyCoin = 43,
EerieThing = 44,
Spring = 45,
Seashell = 46,
HummingNote = 47,
ShinyPowder = 48,
GlitterPowder = 49,
RedFlower = 50,
PinkFlower = 51,
WhiteFlower = 52,
BlueFlower = 53,
OrangeFlower = 54,
YellowFlower = 55,
GooglySpecs = 56,
BlackSpecs = 57,
GorgeousSpecs = 58,
SweetCandy = 59,
Confetti = 60,
WhiteFluff,
YellowFluff,
PinkFluff,
BrownFluff,
BlackFluff,
OrangeFluff,
RoundPebble,
GlitterBoulder,
SnaggyPebble,
JaggedBoulder,
BlackPebble,
MiniPebble,
PinkScale,
BlueScale,
GreenScale,
PurpleScale,
BigScale,
NarrowScale,
BlueFeather,
RedFeather,
YellowFeather,
WhiteFeather,
BlackMoustache,
WhiteMoustache,
BlackBeard,
WhiteBeard,
SmallLeaf,
BigLeaf,
NarrowLeaf,
ShedClaw,
ShedHorn,
ThinMushroom,
ThickMushroom,
Stump,
PrettyDewdrop,
SnowCrystal,
Sparks,
ShimmeringFire,
MysticFire,
Determination,
PeculiarSpoon,
PuffySmoke,
PoisonExtract,
WealthyCoin,
EerieThing,
Spring,
Seashell,
HummingNote,
ShinyPowder,
GlitterPowder,
RedFlower,
PinkFlower,
WhiteFlower,
BlueFlower,
OrangeFlower,
YellowFlower,
GooglySpecs,
BlackSpecs,
GorgeousSpecs,
SweetCandy,
Confetti,
// For accessories below this point, only 1 copy can be owned at once
ColoredParasol = 61,
OldUmbrella = 62,
Spotlight = 63,
Cape = 64,
StandingMike = 65,
Surfboard = 66,
Carpet = 67,
RetroPipe = 68,
FluffyBed = 69,
MirrorBall = 70,
PhotoBoard = 71,
PinkBarrette = 72,
RedBarrette = 73,
BlueBarrette = 74,
YellowBarrette = 75,
GreenBarrette = 76,
PinkBalloon = 77,
RedBalloons = 78,
BlueBalloons = 79,
YellowBalloon = 80,
GreenBalloons = 81,
LaceHeadress = 82,
TopHat = 83,
SilkVeil = 84,
HeroicHeadband = 85,
ProfessorHat = 86,
FlowerStage = 87,
GoldPedestal = 88,
GlassStage = 89,
AwardPodium = 90,
CubeStage = 91,
TURTWIGMask = 92,
CHIMCHARMask = 93,
PIPLUPMask = 94,
BigTree = 95,
Flag = 96,
Crown = 97,
Tiara = 98,
Comet = 99,
ColoredParasol,
OldUmbrella,
Spotlight,
Cape,
StandingMike,
Surfboard,
Carpet,
RetroPipe,
FluffyBed,
MirrorBall,
PhotoBoard,
PinkBarrette,
RedBarrette,
BlueBarrette,
YellowBarrette,
GreenBarrette,
PinkBalloon,
RedBalloons,
BlueBalloons,
YellowBalloon,
GreenBalloons,
LaceHeadress,
TopHat,
SilkVeil,
HeroicHeadband,
ProfessorHat,
FlowerStage,
GoldPedestal,
GlassStage,
AwardPodium,
CubeStage,
TURTWIGMask,
CHIMCHARMask,
PIPLUPMask,
BigTree,
Flag,
Crown,
Tiara,
// Unreleased
Comet,
}
public static class AccessoryInfo
{
public const int Count = 100;
public const int MaxMulti = (int)Accessory4.Confetti;
public const int MaxLegal = (int)Accessory4.Tiara;
public const byte AccessoryMaxCount = 9;
public static bool IsMultiple(this Accessory4 acc) => (uint)acc <= MaxMulti;
public static bool IsSingle(this Accessory4 acc) => (uint)acc > MaxMulti;
public static int GetSingleBitIndex(this Accessory4 acc)
{
var index = (int)acc - MaxMulti - 1;
ArgumentOutOfRangeException.ThrowIfLessThan(index, 0, nameof(acc));
return index;
}
}

View File

@ -2,22 +2,33 @@ namespace PKHeX.Core;
public enum Backdrop4 : byte
{
DressUp = 0,
Ranch = 1,
CityatNight = 2,
SnowyTown = 3,
Fiery = 4,
OuterSpace = 5,
Desert = 6,
CumulusCloud = 7,
FlowerPatch = 8,
FutureRoom = 9,
OpenSea = 10,
TotalDarkness = 11,
TatamiRoom = 12,
GingerbreadRoom = 13,
Seafloor = 14,
Underground = 15,
Sky = 16,
Theater = 17,
DressUp,
Ranch,
CityatNight,
SnowyTown,
Fiery,
OuterSpace,
Desert,
CumulusCloud,
FlowerPatch,
FutureRoom,
OpenSea,
TotalDarkness,
TatamiRoom,
GingerbreadRoom,
Seafloor,
Underground,
Sky,
// Unreleased
Theater,
Unset,
}
public static class BackdropInfo
{
public const int Count = (int)Backdrop4.Unset;
public const Backdrop4 MaxLegal = Backdrop4.Theater;
public static bool IsUnset(this Backdrop4 backdrop) => (uint)backdrop >= (uint)Backdrop4.Unset;
}

View File

@ -2,29 +2,29 @@ namespace PKHeX.Core;
public enum PoketchApp
{
Digital_Watch = 0,
Calculator = 1,
Memo_Pad = 2,
Pedometer = 3,
Party = 4,
Friendship_Checker = 5,
Dowsing_Machine = 6,
Berry_Searcher = 7,
Daycare = 8,
History = 9,
Counter = 10,
Analog_Watch = 11,
Marking_Map = 12,
Link_Searcher = 13,
Coin_Toss = 14,
Move_Tester = 15,
Calendar = 16,
Dot_Artist = 17,
Roulette = 18,
Trainer_Counter = 19,
Kitchen_Timer = 20,
Color_Changer = 21,
Matchup_Checker = 22,
Stopwatch = 23,
Alarm_Clock = 24,
Digital_Watch,
Calculator,
Memo_Pad,
Pedometer,
Party,
Friendship_Checker,
Dowsing_Machine,
Berry_Searcher,
Daycare,
History,
Counter,
Analog_Watch,
Marking_Map,
Link_Searcher,
Coin_Toss,
Move_Tester,
Calendar,
Dot_Artist,
Roulette,
Trainer_Counter,
Kitchen_Timer,
Color_Changer,
Matchup_Checker,
Stopwatch,
Alarm_Clock,
}

View File

@ -1,4 +1,4 @@
namespace PKHeX.Core;
namespace PKHeX.Core;
/// <summary>
/// Ball Capsule Seals used in Generation 4 save files.

View File

@ -93,6 +93,7 @@ ErrorWindow.B_Abort=Abbrechen
ErrorWindow.B_Continue=Fortfahren
ErrorWindow.B_CopyToClipboard=In Zwischenablage kopieren
ErrorWindow.L_ProvideInfo=Bitte gib diese Informationen an, wenn du den Fehler meldest:
LocalizedDescription.AllowBoxDataDrop=Allow drag and drop of boxdata binary files from the GUI via the Box tab.
LocalizedDescription.AllowGen1Tradeback=Erlaube Gen 1 Rücktausch
LocalizedDescription.AllowGuessRejuvenateHOME=Erlaube der PKM Konvertierung, legale Begegnungs Daten, welche nicht im vorherigen Format gespeichert sind, zu erraten.
LocalizedDescription.AllowIncompatibleConversion=Erlaube PKM Transfer Methoden, die nicht offiziell möglich sind. Einzelne Eigenschaften werden der Reihe nach kopiert.
@ -111,6 +112,7 @@ LocalizedDescription.CurrentHandlerMismatch=Schweregrad mit dem der aktuelle Bes
LocalizedDescription.DefaultBoxExportNamer=Selected File namer to use for box exports for the GUI, if multiple are available.
LocalizedDescription.DisableScalingDpi=Disables the GUI scaling based on Dpi on program startup, falling back to font scaling.
LocalizedDescription.DisableWordFilterPastGen=Disables the Word Filter check for formats prior to 3DS-era.
LocalizedDescription.ExtraProperties=Extra entity properties to try and show in addition to the default properties displayed.
LocalizedDescription.Female=Female gender color.
LocalizedDescription.FilterUnavailableSpecies=Versteckt nicht erhältliche Pokémon, wenn diese nicht in den Spielstand importiert werden können.
LocalizedDescription.FlagIllegal=Illegale Pokémon in den Boxen markieren
@ -121,6 +123,7 @@ LocalizedDescription.Gen8MemoryMissingHT=Schweregrad der Legalitäts Analyse wen
LocalizedDescription.GlowFinal=Hovering over a PKM color 2.
LocalizedDescription.GlowInitial=Hovering over a PKM color 1.
LocalizedDescription.HiddenPowerOnChangeMaxPower=Wenn der Kraftreserve Typ geändert wird, ändere die DVs auf den höchst möglichen Wert, um die best mögliche Stärke zu erhalten. Sonst werden die originalen DVs nur leicht abgeändert.
LocalizedDescription.HiddenProperties=Properties to hide from the report grid.
LocalizedDescription.HideEvent8Contains=Verstecke Event Variablen Namen, welche die unten stehenden, durch Komma getrennten, Zeichenfolgen enthalten. Entfernt Event Variablen aus der Benutzeroberfläche, die den Benutzer nicht interessieren.
LocalizedDescription.HideEventTypeBelow=Verstecke Event Variablen unter diesem Event Typ Wert. Entfernt Event Variablen aus der Benutzeroberfläche, die den Benutzer nicht interessieren.
LocalizedDescription.HideSAVDetails=Verstecke Spielstand Details in Programmtitel
@ -203,6 +206,8 @@ LocalizedDescription.Unicode=Unicode
LocalizedDescription.UseTabsAsCriteria=Nutze Eigeschaften aus den PKM Editor Tabs um Kriterien wie Geschlecht und Wesen bei der Generierung einer neuen Begegnung zu bestimmen.
LocalizedDescription.UseTabsAsCriteriaAnySpecies=Nutze Eigenschaften aus den PKM Editor Tabs, auch wenn die neue Begegnung nicht in der selben Evolutionslinie ist.
LocalizedDescription.Version=Zuletzt verwendete Version von PKHeX.
LocalizedDescription.VerticalSelectPrimary=Vertical tab selected primary color.
LocalizedDescription.VerticalSelectSecondary=Vertical tab selected secondary color.
LocalizedDescription.VirtualConsoleSourceGen1=Default version to set when transferring from Generation 1 3DS Virtual Console to Generation 7.
LocalizedDescription.VirtualConsoleSourceGen2=Default version to set when transferring from Generation 2 3DS Virtual Console to Generation 7.
LocalizedDescription.ZeroHeightWeight=Strenge der Legalitäts Analyse bei Pokémon mit einer Höhe und einem Gewicht von 0.
@ -860,12 +865,19 @@ SAV_Misc3.TAB_Ferry=Fähre
SAV_Misc3.TAB_Joyful=Spielhalle
SAV_Misc3.TAB_Main=Verschiedenes
SAV_Misc3.Tab_Records=Statistik
SAV_Misc4.B_AllAccessoriesIllegal=Alle Accessoires (Illegal)
SAV_Misc4.B_AllAccessoriesLegal=Alle Accessoires (Legal)
SAV_Misc4.B_AllBackdropsIllegal=Alle Hintergründe (Illegal)
SAV_Misc4.B_AllBackdropsLegal=Alle Hintergründe (Legal)
SAV_Misc4.B_AllFlyDest=Alle auswählen
SAV_Misc4.B_AllPoketch=Alle erhalten
SAV_Misc4.B_AllSealsIllegal=Alle Sticker (Illegal)
SAV_Misc4.B_AllSealsLegal=Alle Sticker (Legal)
SAV_Misc4.B_AllWalkerCourses=Alle asuwählen
SAV_Misc4.B_Cancel=Abbrechen
SAV_Misc4.B_ClearAccessories=Alle Accessoires löschen
SAV_Misc4.B_ClearBackdrops=Alle Hintergründe löschen
SAV_Misc4.B_ClearSeals=Alle Sticker löschen
SAV_Misc4.B_DeleteAll=Alle Löschen
SAV_Misc4.B_GiveAll=Alle erhalten
SAV_Misc4.B_GiveAllNoTrainers=Alle Nicht-Trainer erhalten
@ -903,10 +915,11 @@ SAV_Misc4.L_Watts=Watt:
SAV_Misc4.RB_Stats3_01=Lv. 50
SAV_Misc4.RB_Stats3_02=Offen
SAV_Misc4.TAB_BF=Kampfzone
SAV_Misc4.Tab_FashionCase=Modekoffer
SAV_Misc4.TAB_Main=Verschiedenes
SAV_Misc4.Tab_Misc=Sonstige
SAV_Misc4.Tab_Poffins=Knurspe
SAV_Misc4.Tab_PokeGear=PokéCom
SAV_Misc4.Tab_Seals=Sticker
SAV_Misc4.TAB_Walker=Pokéwalker
SAV_Misc5.B_AllFlyDest=Alle auswählen
SAV_Misc5.B_AllKeys=Alle auswählen

View File

@ -93,6 +93,7 @@ ErrorWindow.B_Abort=Abort
ErrorWindow.B_Continue=Continue
ErrorWindow.B_CopyToClipboard=Copy to Clipboard
ErrorWindow.L_ProvideInfo=Please provide this information when reporting this error:
LocalizedDescription.AllowBoxDataDrop=Allow drag and drop of boxdata binary files from the GUI via the Box tab.
LocalizedDescription.AllowGen1Tradeback=GB: Allow Generation 2 tradeback learnsets
LocalizedDescription.AllowGuessRejuvenateHOME=Allow PKM file conversion paths to guess the legal original encounter data that is not stored in the format that it was converted from.
LocalizedDescription.AllowIncompatibleConversion=Allow PKM file conversion paths that are not possible via official methods. Individual properties will be copied sequentially.
@ -111,6 +112,7 @@ LocalizedDescription.CurrentHandlerMismatch=Severity to flag a Legality Check if
LocalizedDescription.DefaultBoxExportNamer=Selected File namer to use for box exports for the GUI, if multiple are available.
LocalizedDescription.DisableScalingDpi=Disables the GUI scaling based on Dpi on program startup, falling back to font scaling.
LocalizedDescription.DisableWordFilterPastGen=Disables the Word Filter check for formats prior to 3DS-era.
LocalizedDescription.ExtraProperties=Extra entity properties to try and show in addition to the default properties displayed.
LocalizedDescription.Female=Female gender color.
LocalizedDescription.FilterUnavailableSpecies=Hides unavailable Species if the currently loaded save file cannot import them.
LocalizedDescription.FlagIllegal=Flag Illegal Slots in Save File
@ -121,6 +123,7 @@ LocalizedDescription.Gen8MemoryMissingHT=Severity to flag a Legality Check if a
LocalizedDescription.GlowFinal=Hovering over a PKM color 2.
LocalizedDescription.GlowInitial=Hovering over a PKM color 1.
LocalizedDescription.HiddenPowerOnChangeMaxPower=When changing the Hidden Power type, automatically maximize the IVs to ensure the highest Base Power result. Otherwise, keep the IVs as close as possible to the original.
LocalizedDescription.HiddenProperties=Properties to hide from the report grid.
LocalizedDescription.HideEvent8Contains=Hide event variable names for that contain any of the comma-separated substrings below. Removes event values from the GUI that the user doesn't care to view.
LocalizedDescription.HideEventTypeBelow=Hide event variables below this event type value. Removes event values from the GUI that the user doesn't care to view.
LocalizedDescription.HideSAVDetails=Hide Save File Details in Program Title
@ -203,6 +206,8 @@ LocalizedDescription.Unicode=Unicode
LocalizedDescription.UseTabsAsCriteria=Use properties from the PKM Editor tabs to specify criteria like Gender and Nature when generating an encounter.
LocalizedDescription.UseTabsAsCriteriaAnySpecies=Use properties from the PKM Editor tabs even if the new encounter isn't the same evolution chain.
LocalizedDescription.Version=Last version that the program was run with.
LocalizedDescription.VerticalSelectPrimary=Vertical tab selected primary color.
LocalizedDescription.VerticalSelectSecondary=Vertical tab selected secondary color.
LocalizedDescription.VirtualConsoleSourceGen1=Default version to set when transferring from Generation 1 3DS Virtual Console to Generation 7.
LocalizedDescription.VirtualConsoleSourceGen2=Default version to set when transferring from Generation 2 3DS Virtual Console to Generation 7.
LocalizedDescription.ZeroHeightWeight=Severity to flag a Legality Check if Pokémon has a zero value for both Height and Weight.
@ -856,12 +861,19 @@ SAV_Misc3.TAB_Ferry=Ferry
SAV_Misc3.TAB_Joyful=Joyful
SAV_Misc3.TAB_Main=Main
SAV_Misc3.Tab_Records=Records
SAV_Misc4.B_AllAccessoriesIllegal=Give All Accessories (Illegal)
SAV_Misc4.B_AllAccessoriesLegal=Give All Accessories (Legal)
SAV_Misc4.B_AllBackdropsIllegal=Give All Backdrops (Illegal)
SAV_Misc4.B_AllBackdropsLegal=Give All Backdrops (Legal)
SAV_Misc4.B_AllFlyDest=Check All
SAV_Misc4.B_AllPoketch=Give All
SAV_Misc4.B_AllSealsIllegal=Give All Seals (Illegal)
SAV_Misc4.B_AllSealsLegal=Give All Seals (Legal)
SAV_Misc4.B_AllWalkerCourses=Check All
SAV_Misc4.B_Cancel=Cancel
SAV_Misc4.B_ClearAccessories=Delete All Accessories
SAV_Misc4.B_ClearBackdrops=Delete All Backdrops
SAV_Misc4.B_ClearSeals=Delete All Seals
SAV_Misc4.B_DeleteAll=Delete All
SAV_Misc4.B_GiveAll=Give All
SAV_Misc4.B_GiveAllNoTrainers=Give All Non-Trainers
@ -899,10 +911,11 @@ SAV_Misc4.L_Watts=Watts:
SAV_Misc4.RB_Stats3_01=Lv. 50
SAV_Misc4.RB_Stats3_02=Open
SAV_Misc4.TAB_BF=Battle Frontier
SAV_Misc4.Tab_FashionCase=Fashion Case
SAV_Misc4.TAB_Main=Main
SAV_Misc4.Tab_Misc=Misc
SAV_Misc4.Tab_Poffins=Poffins
SAV_Misc4.Tab_PokeGear=PokeGear
SAV_Misc4.Tab_Seals=Seals
SAV_Misc4.TAB_Walker=Pokewalker
SAV_Misc5.B_AllFlyDest=Check All
SAV_Misc5.B_AllKeys=Check All

View File

@ -93,6 +93,7 @@ ErrorWindow.B_Abort=Abortar
ErrorWindow.B_Continue=Continuar
ErrorWindow.B_CopyToClipboard=Copiar al portapapeles
ErrorWindow.L_ProvideInfo=Por favor, proporcione esta información cuando reporte el fallo:
LocalizedDescription.AllowBoxDataDrop=Allow drag and drop of boxdata binary files from the GUI via the Box tab.
LocalizedDescription.AllowGen1Tradeback=GB: Permitir intercambio de movimientos desde la Generación 2.
LocalizedDescription.AllowGuessRejuvenateHOME=Permitir adivinar a la ruta de conversión de archivos PKM los datos del encuentro original que no estén almacenados en el formato origen.
LocalizedDescription.AllowIncompatibleConversion=Permitir direcciones de conversión de archivos PKM que no son posibles por métodos oficiales. Las propiedades individuales serán copiadas secuencialmente.
@ -111,6 +112,7 @@ LocalizedDescription.CurrentHandlerMismatch=En la validación de Legalidad, marc
LocalizedDescription.DefaultBoxExportNamer=Selected File namer to use for box exports for the GUI, if multiple are available.
LocalizedDescription.DisableScalingDpi=Disables the GUI scaling based on Dpi on program startup, falling back to font scaling.
LocalizedDescription.DisableWordFilterPastGen=Disables the Word Filter check for formats prior to 3DS-era.
LocalizedDescription.ExtraProperties=Extra entity properties to try and show in addition to the default properties displayed.
LocalizedDescription.Female=Female gender color.
LocalizedDescription.FilterUnavailableSpecies=Ocultar Especie no disponible si la partida cargada no puede importarla.
LocalizedDescription.FlagIllegal=Detectar ilegal
@ -121,6 +123,7 @@ LocalizedDescription.Gen8MemoryMissingHT=En la validación de Legalidad, marcar
LocalizedDescription.GlowFinal=Hovering over a PKM color 2.
LocalizedDescription.GlowInitial=Hovering over a PKM color 1.
LocalizedDescription.HiddenPowerOnChangeMaxPower=Cuando se cambia el tipo de Poder Oculto, automáticamente maximixar los IVs para resultar con el mayor Poder Base. De otra forma mantener lo más cerca posible al original.
LocalizedDescription.HiddenProperties=Properties to hide from the report grid.
LocalizedDescription.HideEvent8Contains=Ocultar eventos que contengan alguna de las palabras (separadas por comas) siguientes en el nombre. Elimina de la interfaz los valores de los eventos que no le interesa version al usuario.
LocalizedDescription.HideEventTypeBelow=Ocultar variables de evento por debajo de este valor de tipo de evento. Elimina de la interfaz los valores de los eventos que no le interesa version al usuario.
LocalizedDescription.HideSAVDetails=Ocultar detalles de partidas guardadas en el título del programa
@ -203,6 +206,8 @@ LocalizedDescription.Unicode=Unicode
LocalizedDescription.UseTabsAsCriteria=Usar propiedades del tablero del Editor PKM para especificar criterios como Género y Naturaleza cuando se genera un encuentro.
LocalizedDescription.UseTabsAsCriteriaAnySpecies=Usar propiedades del tablero del Editor PKM incluso si el nuevo encuentro no es de la misma línea evolutiva.
LocalizedDescription.Version=Última versión con la que se ejecutó el programa.
LocalizedDescription.VerticalSelectPrimary=Vertical tab selected primary color.
LocalizedDescription.VerticalSelectSecondary=Vertical tab selected secondary color.
LocalizedDescription.VirtualConsoleSourceGen1=Default version to set when transferring from Generation 1 3DS Virtual Console to Generation 7.
LocalizedDescription.VirtualConsoleSourceGen2=Default version to set when transferring from Generation 2 3DS Virtual Console to Generation 7.
LocalizedDescription.ZeroHeightWeight=En la validación de Legalidad, marcar Severidad si se detecta que el Pokémon tiene los valores de Altura y Peso son ambos cero.
@ -856,12 +861,19 @@ SAV_Misc3.TAB_Ferry=Ferry
SAV_Misc3.TAB_Joyful=Alegre
SAV_Misc3.TAB_Main=General
SAV_Misc3.Tab_Records=Registros
SAV_Misc4.B_AllAccessoriesIllegal=Obtener todos los Accesorios (Ilegal)
SAV_Misc4.B_AllAccessoriesLegal=Obtener todos los Accesorios (Legal)
SAV_Misc4.B_AllBackdropsIllegal=Obtener todos los Fondos (Ilegal)
SAV_Misc4.B_AllBackdropsLegal=Obtener todos los Fondos (Legal)
SAV_Misc4.B_AllFlyDest=Marcar todos
SAV_Misc4.B_AllPoketch=Obtener todas
SAV_Misc4.B_AllSealsIllegal=Adquirir todos los Sellos (Ilegal)
SAV_Misc4.B_AllSealsLegal=Adquirir todos los Sellos (Legal)
SAV_Misc4.B_AllSealsIllegal=Obtener todos los Sellos (Ilegal)
SAV_Misc4.B_AllSealsLegal=Obtener todos los Sellos (Legal)
SAV_Misc4.B_AllWalkerCourses=Marcar todos
SAV_Misc4.B_Cancel=Cancelar
SAV_Misc4.B_ClearAccessories=Quitar todos los Accesorios
SAV_Misc4.B_ClearBackdrops=Quitar todos los Fondos
SAV_Misc4.B_ClearSeals=Quitar todos los Sellos
SAV_Misc4.B_DeleteAll=Borrar todos
SAV_Misc4.B_GiveAll=Registrar todos
SAV_Misc4.B_GiveAllNoTrainers=Registrar importantes
@ -899,10 +911,11 @@ SAV_Misc4.L_Watts=Vatios:
SAV_Misc4.RB_Stats3_01=Nv. 50
SAV_Misc4.RB_Stats3_02=Abierto
SAV_Misc4.TAB_BF=Frente Batalla
SAV_Misc4.Tab_FashionCase=Caja Corazón
SAV_Misc4.TAB_Main=General
SAV_Misc4.Tab_Misc=Misc.
SAV_Misc4.Tab_Poffins=Pokochos
SAV_Misc4.Tab_PokeGear=Pokégear
SAV_Misc4.Tab_Seals=Sellos
SAV_Misc4.TAB_Walker=Pokéwalker
SAV_Misc5.B_AllFlyDest=Marcar todos
SAV_Misc5.B_AllKeys=Marcar todas

View File

@ -93,6 +93,7 @@ ErrorWindow.B_Abort=Abandonner
ErrorWindow.B_Continue=Continuer
ErrorWindow.B_CopyToClipboard=Copier dans le presse-papier
ErrorWindow.L_ProvideInfo=Veuillez fournir les informations suivantes dans votre rapport d'erreur :
LocalizedDescription.AllowBoxDataDrop=Allow drag and drop of boxdata binary files from the GUI via the Box tab.
LocalizedDescription.AllowGen1Tradeback=GB: Permettre les movepools de revenants de la Gén. 2
LocalizedDescription.AllowGuessRejuvenateHOME=Permettre aux chemins de conversion des fichiers PKM de deviner les données de rencontre originales légales qui ne sont pas stockées dans le format à partir duquel elles ont été converties.
LocalizedDescription.AllowIncompatibleConversion=Permet des chemins de conversion de fichiers PKM qui ne sont pas possibles via les méthodes officielles. Les propriétés individuelles seront copiées de manière séquentielle.
@ -111,6 +112,7 @@ LocalizedDescription.CurrentHandlerMismatch=Severity to flag a Legality Check if
LocalizedDescription.DefaultBoxExportNamer=Selected File namer to use for box exports for the GUI, if multiple are available.
LocalizedDescription.DisableScalingDpi=Disables the GUI scaling based on Dpi on program startup, falling back to font scaling.
LocalizedDescription.DisableWordFilterPastGen=Disables the Word Filter check for formats prior to 3DS-era.
LocalizedDescription.ExtraProperties=Extra entity properties to try and show in addition to the default properties displayed.
LocalizedDescription.Female=Female gender color.
LocalizedDescription.FilterUnavailableSpecies=Hides unavailable Species if the currently loaded save file cannot import them.
LocalizedDescription.FlagIllegal=Marquer les Pokémon illégaux dans la sauvegarde
@ -121,6 +123,7 @@ LocalizedDescription.Gen8MemoryMissingHT=Severity to flag a Legality Check if a
LocalizedDescription.GlowFinal=Hovering over a PKM color 2.
LocalizedDescription.GlowInitial=Hovering over a PKM color 1.
LocalizedDescription.HiddenPowerOnChangeMaxPower=When changing the Hidden Power type, automatically maximize the IVs to ensure the highest Base Power result. Otherwise, keep the IVs as close as possible to the original.
LocalizedDescription.HiddenProperties=Properties to hide from the report grid.
LocalizedDescription.HideEvent8Contains=Hide event variable names for that contain any of the comma-separated substrings below. Removes event values from the GUI that the user doesn't care to view.
LocalizedDescription.HideEventTypeBelow=Hide event variables below this event type value. Removes event values from the GUI that the user doesn't care to view.
LocalizedDescription.HideSAVDetails=Cacher les détails de la sauvegarde
@ -203,6 +206,8 @@ LocalizedDescription.Unicode=Unicode
LocalizedDescription.UseTabsAsCriteria=Use properties from the PKM Editor tabs to specify criteria like Gender and Nature when generating an encounter.
LocalizedDescription.UseTabsAsCriteriaAnySpecies=Use properties from the PKM Editor tabs even if the new encounter isn't the same evolution chain.
LocalizedDescription.Version=Last version that the program was run with.
LocalizedDescription.VerticalSelectPrimary=Vertical tab selected primary color.
LocalizedDescription.VerticalSelectSecondary=Vertical tab selected secondary color.
LocalizedDescription.VirtualConsoleSourceGen1=Default version to set when transferring from Generation 1 3DS Virtual Console to Generation 7.
LocalizedDescription.VirtualConsoleSourceGen2=Default version to set when transferring from Generation 2 3DS Virtual Console to Generation 7.
LocalizedDescription.ZeroHeightWeight=Severity to flag a Legality Check if Pokémon has a zero value for both Height and Weight.
@ -856,12 +861,19 @@ SAV_Misc3.TAB_Ferry=Ferry
SAV_Misc3.TAB_Joyful=Joyeux
SAV_Misc3.TAB_Main=Main
SAV_Misc3.Tab_Records=Records
SAV_Misc4.B_AllAccessoriesIllegal=Donner tous les Accessoires (illégal)
SAV_Misc4.B_AllAccessoriesLegal=Donner tous les Accessoires (légal)
SAV_Misc4.B_AllBackdropsIllegal=Donner tous les Décors (illégal)
SAV_Misc4.B_AllBackdropsLegal=Donner tous les Décors (légal)
SAV_Misc4.B_AllFlyDest=Tout vérifier
SAV_Misc4.B_AllPoketch=Tout donner
SAV_Misc4.B_AllSealsIllegal=Donner tous les sceaux (illégal)
SAV_Misc4.B_AllSealsLegal=Donner tous les sceaux (légal)
SAV_Misc4.B_AllWalkerCourses=Tout vérifier
SAV_Misc4.B_Cancel=Annuler
SAV_Misc4.B_ClearAccessories=Supprimer tous les Accessoires
SAV_Misc4.B_ClearBackdrops=Supprimer tous les Décors
SAV_Misc4.B_ClearSeals=Supprimer tous les sceaux
SAV_Misc4.B_DeleteAll=Tout retirer
SAV_Misc4.B_GiveAll=Tout donner
SAV_Misc4.B_GiveAllNoTrainers=Give All Non-Trainers
@ -899,10 +911,11 @@ SAV_Misc4.L_Watts=Watts :
SAV_Misc4.RB_Stats3_01=N. 50
SAV_Misc4.RB_Stats3_02=Ouvrir
SAV_Misc4.TAB_BF=Zone de Combat
SAV_Misc4.Tab_FashionCase=Coffret Mode
SAV_Misc4.TAB_Main=Main
SAV_Misc4.Tab_Misc=Divers
SAV_Misc4.Tab_Poffins=Poffins
SAV_Misc4.Tab_PokeGear=PokeGear
SAV_Misc4.Tab_Seals=Sceaux
SAV_Misc4.TAB_Walker=Pokéwalker
SAV_Misc5.B_AllFlyDest=Tout vérifier
SAV_Misc5.B_AllKeys=Tout vérifier

View File

@ -93,6 +93,7 @@ ErrorWindow.B_Abort=Annulla
ErrorWindow.B_Continue=Continua
ErrorWindow.B_CopyToClipboard=Copiato negli appunti
ErrorWindow.L_ProvideInfo=Per favore includi queste informazioni quando riporti questo errore:
LocalizedDescription.AllowBoxDataDrop=Allow drag and drop of boxdata binary files from the GUI via the Box tab.
LocalizedDescription.AllowGen1Tradeback=GB:Consenti insieme di mosse tradeback da 2° Generazione.
LocalizedDescription.AllowGuessRejuvenateHOME=Prova ad indovinare dati di incontro originali legali, quando questi non sono contenuti all'interno del file di origine.
LocalizedDescription.AllowIncompatibleConversion=Consenti conversioni di file PKM via percorsi non possibili con metodi ufficiali. Le proprietà individuali verranno copiate in maniera sequenziale.
@ -111,6 +112,7 @@ LocalizedDescription.CurrentHandlerMismatch=Forza una segnalazione di legalità
LocalizedDescription.DefaultBoxExportNamer=Selected File namer to use for box exports for the GUI, if multiple are available.
LocalizedDescription.DisableScalingDpi=Disables the GUI scaling based on Dpi on program startup, falling back to font scaling.
LocalizedDescription.DisableWordFilterPastGen=Disables the Word Filter check for formats prior to 3DS-era.
LocalizedDescription.ExtraProperties=Extra entity properties to try and show in addition to the default properties displayed.
LocalizedDescription.Female=Female gender color.
LocalizedDescription.FilterUnavailableSpecies=Nascondi specie non disponibili se il salvatggio caricato non è in grado di importarli.
LocalizedDescription.FlagIllegal=Segnala Slot Illegali nel Salvataggio
@ -121,6 +123,7 @@ LocalizedDescription.Gen8MemoryMissingHT=Forza una segnalazione di Legalità se
LocalizedDescription.GlowFinal=Hovering over a PKM color 2.
LocalizedDescription.GlowInitial=Hovering over a PKM color 1.
LocalizedDescription.HiddenPowerOnChangeMaxPower=Massimizza automaticamente gli IV quando si cambia il tipo di Introforza per assicurare il massimo punteggio di Potenza Base. Altrimenti, mantieni gli IV il più vicino possibile agli originali.
LocalizedDescription.HiddenProperties=Properties to hide from the report grid.
LocalizedDescription.HideEvent8Contains=Nascondi i nomi delle variabili evento che contengono una qualsiasi delle sottostringhe separate da virgole di seguito riportate. Rimuove i valori evento dall'Interfaccia di non interesse dell'utente.
LocalizedDescription.HideEventTypeBelow=Nascondi variabili evento al di sotto del valore di questa tipologia di eventi. Rimuove i valori evento dall'Interfaccia di non interesse dell'utente.
LocalizedDescription.HideSAVDetails=Nascondi i dettagli del File di Salvataggio dal Titolo del Programma.
@ -203,6 +206,8 @@ LocalizedDescription.Unicode=Unicode
LocalizedDescription.UseTabsAsCriteria=Usa proprietà dell'Editor Pokémon per specificare criteri come il Sesso o la Natura quando si genera un incontro.
LocalizedDescription.UseTabsAsCriteriaAnySpecies=Usa prorietà dell'Editor Pokémon anche se il nuovo incontro non è della stessa catena evolutiva.
LocalizedDescription.Version=Ultima versione con cui il programma era stato eseguito.
LocalizedDescription.VerticalSelectPrimary=Vertical tab selected primary color.
LocalizedDescription.VerticalSelectSecondary=Vertical tab selected secondary color.
LocalizedDescription.VirtualConsoleSourceGen1=Default version to set when transferring from Generation 1 3DS Virtual Console to Generation 7.
LocalizedDescription.VirtualConsoleSourceGen2=Default version to set when transferring from Generation 2 3DS Virtual Console to Generation 7.
LocalizedDescription.ZeroHeightWeight=Forza una segnalazione di Legalità se il Pokémon ha zero sia nel Peso che nell'Altezza.
@ -856,12 +861,19 @@ SAV_Misc3.TAB_Ferry=Traghetto
SAV_Misc3.TAB_Joyful=Arena Giochi
SAV_Misc3.TAB_Main=Main
SAV_Misc3.Tab_Records=Record
SAV_Misc4.B_AllAccessoriesIllegal=Dai Tutti gli Accessori (Illegale)
SAV_Misc4.B_AllAccessoriesLegal=Dai Tutti gli Accessori (Legale)
SAV_Misc4.B_AllBackdropsIllegal=Dai Tutti gli Sfondi (Illegale)
SAV_Misc4.B_AllBackdropsLegal=Dai Tutti gli Sfondi (Legale)
SAV_Misc4.B_AllFlyDest=Sel. Tutto
SAV_Misc4.B_AllPoketch=Dai Tutto
SAV_Misc4.B_AllSealsIllegal=Dai Tutti i Bolli (Illegale)
SAV_Misc4.B_AllSealsLegal=Dai Tutti i Bolli (Legale)
SAV_Misc4.B_AllWalkerCourses=Sel. Tutto
SAV_Misc4.B_Cancel=Annulla
SAV_Misc4.B_ClearAccessories=Elimina Tutti gli Accessori
SAV_Misc4.B_ClearBackdrops=Elimina Tutti gli Sfondi
SAV_Misc4.B_ClearSeals=Elimina Tutti i Bolli
SAV_Misc4.B_DeleteAll=Elimina Tutto
SAV_Misc4.B_GiveAll=Dai Tutto
SAV_Misc4.B_GiveAllNoTrainers=Dai Tutto Non-Allenatori
@ -899,10 +911,11 @@ SAV_Misc4.L_Watts=Watt:
SAV_Misc4.RB_Stats3_01=Lv. 50
SAV_Misc4.RB_Stats3_02=Aperto
SAV_Misc4.TAB_BF=Parco Lotta
SAV_Misc4.Tab_FashionCase=Scatola chic
SAV_Misc4.TAB_Main=Main
SAV_Misc4.Tab_Misc=Varie
SAV_Misc4.Tab_Poffins=Poffins
SAV_Misc4.Tab_PokeGear=PokéGear
SAV_Misc4.Tab_Seals=Bolli
SAV_Misc4.TAB_Walker=Pokéwalker
SAV_Misc5.B_AllFlyDest=Sel. Tutto
SAV_Misc5.B_AllKeys=Sel. Tutto

View File

@ -93,6 +93,7 @@ ErrorWindow.B_Abort=キャンセル
ErrorWindow.B_Continue=続ける
ErrorWindow.B_CopyToClipboard=クリップボードにコピー
ErrorWindow.L_ProvideInfo=このエラーを報告する時は、こちらの情報を提供してください:
LocalizedDescription.AllowBoxDataDrop=Allow drag and drop of boxdata binary files from the GUI via the Box tab.
LocalizedDescription.AllowGen1Tradeback=GB: Allow Generation 2 tradeback learnsets
LocalizedDescription.AllowGuessRejuvenateHOME=Allow PKM file conversion paths to guess the legal original encounter data that is not stored in the format that it was converted from.
LocalizedDescription.AllowIncompatibleConversion=Allow PKM file conversion paths that are not possible via official methods. Individual properties will be copied sequentially.
@ -111,6 +112,7 @@ LocalizedDescription.CurrentHandlerMismatch=Severity to flag a Legality Check if
LocalizedDescription.DefaultBoxExportNamer=Selected File namer to use for box exports for the GUI, if multiple are available.
LocalizedDescription.DisableScalingDpi=Disables the GUI scaling based on Dpi on program startup, falling back to font scaling.
LocalizedDescription.DisableWordFilterPastGen=3DS時代より前のワードチェックを無効にします。
LocalizedDescription.ExtraProperties=Extra entity properties to try and show in addition to the default properties displayed.
LocalizedDescription.Female=メスのアイコンの色
LocalizedDescription.FilterUnavailableSpecies=読み込まれているセーブファイルにインポートできないポケモンがいた場合、非表示にします。
LocalizedDescription.FlagIllegal=不正ポケモンのアイコンを表示。
@ -121,6 +123,7 @@ LocalizedDescription.Gen8MemoryMissingHT=Severity to flag a Legality Check if a
LocalizedDescription.GlowFinal=マウスオーバー時に、ポケモンが点滅する時の次の色。
LocalizedDescription.GlowInitial=マウスオーバー時に、ポケモンが点滅する時の最初の色。
LocalizedDescription.HiddenPowerOnChangeMaxPower=めざパのタイプを変更した場合、自動的に個体値が最大化され、理想個体になります。それ以外の場合、個体値をなるべく正規にしてください。
LocalizedDescription.HiddenProperties=Properties to hide from the report grid.
LocalizedDescription.HideEvent8Contains=Hide event variable names for that contain any of the comma-separated substrings below. Removes event values from the GUI that the user doesn't care to view.
LocalizedDescription.HideEventTypeBelow=Hide event variables below this event type value. Removes event values from the GUI that the user doesn't care to view.
LocalizedDescription.HideSAVDetails=プログラム名の部分のセーブファイル情報を隠す。
@ -203,6 +206,8 @@ LocalizedDescription.Unicode=Unicodeを使用するかどうか。
LocalizedDescription.UseTabsAsCriteria=Use properties from the PKM Editor tabs to specify criteria like Gender and Nature when generating an encounter.
LocalizedDescription.UseTabsAsCriteriaAnySpecies=Use properties from the PKM Editor tabs even if the new encounter isn't the same evolution chain.
LocalizedDescription.Version=Last version that the program was run with.
LocalizedDescription.VerticalSelectPrimary=Vertical tab selected primary color.
LocalizedDescription.VerticalSelectSecondary=Vertical tab selected secondary color.
LocalizedDescription.VirtualConsoleSourceGen1=第1世代のポケモンを第7世代に送る際に設定するデフォルトのバージョン。
LocalizedDescription.VirtualConsoleSourceGen2=第2世代のポケモンを第7世代に送る際に設定するデフォルトのバージョン。
LocalizedDescription.ZeroHeightWeight=ポケモンの高さと重さがゼロの場合、正規チェックにフラグを立てる。
@ -856,12 +861,19 @@ SAV_Misc3.TAB_Ferry=タイドリップ号
SAV_Misc3.TAB_Joyful=ミニゲーム
SAV_Misc3.TAB_Main=メイン
SAV_Misc3.Tab_Records=記録
SAV_Misc4.B_AllAccessoriesIllegal=アクセサリー全て取得(没含む)
SAV_Misc4.B_AllAccessoriesLegal=アクセサリー全て取得(正規)
SAV_Misc4.B_AllBackdropsIllegal=はいけい全て取得(没含む)
SAV_Misc4.B_AllBackdropsLegal=はいけい全て取得(正規)
SAV_Misc4.B_AllFlyDest=全てチェック
SAV_Misc4.B_AllPoketch=全て取得
SAV_Misc4.B_AllSealsIllegal=シール全て取得(没含む)
SAV_Misc4.B_AllSealsLegal=シール全て取得(正規)
SAV_Misc4.B_AllWalkerCourses=全てチェック
SAV_Misc4.B_Cancel=キャンセル
SAV_Misc4.B_ClearAccessories=アクセサリー全て消去
SAV_Misc4.B_ClearBackdrops=はいけい全て消去
SAV_Misc4.B_ClearSeals=シール全て消去
SAV_Misc4.B_DeleteAll=全て消去
SAV_Misc4.B_GiveAll=全て取得
SAV_Misc4.B_GiveAllNoTrainers=非トレーナーだけ全て取得
@ -899,10 +911,11 @@ SAV_Misc4.L_Watts=ワット:
SAV_Misc4.RB_Stats3_01=Lv.50
SAV_Misc4.RB_Stats3_02=オープン
SAV_Misc4.TAB_BF=バトルフロンティア
SAV_Misc4.Tab_FashionCase=アクセサリーいれ
SAV_Misc4.TAB_Main=全般
SAV_Misc4.Tab_Misc=その他
SAV_Misc4.Tab_Poffins=ポフィン
SAV_Misc4.Tab_PokeGear=ポケギア
SAV_Misc4.Tab_Seals=シール
SAV_Misc4.TAB_Walker=ポケウォーカー
SAV_Misc5.B_AllFlyDest=全てチェック
SAV_Misc5.B_AllKeys=全てチェック

View File

@ -93,6 +93,7 @@ ErrorWindow.B_Abort=중단
ErrorWindow.B_Continue=계속
ErrorWindow.B_CopyToClipboard=클립보드에 복사
ErrorWindow.L_ProvideInfo=오류를 보고할 때 이 정보를 제공해 주세요:
LocalizedDescription.AllowBoxDataDrop=Allow drag and drop of boxdata binary files from the GUI via the Box tab.
LocalizedDescription.AllowGen1Tradeback=GB: 2세대에서 옮겨온 1세대 기술 허용
LocalizedDescription.AllowGuessRejuvenateHOME=Allow PKM file conversion paths to guess the legal original encounter data that is not stored in the format that it was converted from.
LocalizedDescription.AllowIncompatibleConversion=Allow PKM file conversion paths that are not possible via official methods. Individual properties will be copied sequentially.
@ -111,6 +112,7 @@ LocalizedDescription.CurrentHandlerMismatch=Severity to flag a Legality Check if
LocalizedDescription.DefaultBoxExportNamer=Selected File namer to use for box exports for the GUI, if multiple are available.
LocalizedDescription.DisableScalingDpi=Disables the GUI scaling based on Dpi on program startup, falling back to font scaling.
LocalizedDescription.DisableWordFilterPastGen=Disables the Word Filter check for formats prior to 3DS-era.
LocalizedDescription.ExtraProperties=Extra entity properties to try and show in addition to the default properties displayed.
LocalizedDescription.Female=Female gender color.
LocalizedDescription.FilterUnavailableSpecies=Hides unavailable Species if the currently loaded save file cannot import them.
LocalizedDescription.FlagIllegal=세이브 파일에서 적법하지 않은 포켓몬 표시
@ -121,6 +123,7 @@ LocalizedDescription.Gen8MemoryMissingHT=Severity to flag a Legality Check if a
LocalizedDescription.GlowFinal=Hovering over a PKM color 2.
LocalizedDescription.GlowInitial=Hovering over a PKM color 1.
LocalizedDescription.HiddenPowerOnChangeMaxPower=When changing the Hidden Power type, automatically maximize the IVs to ensure the highest Base Power result. Otherwise, keep the IVs as close as possible to the original.
LocalizedDescription.HiddenProperties=Properties to hide from the report grid.
LocalizedDescription.HideEvent8Contains=Hide event variable names for that contain any of the comma-separated substrings below. Removes event values from the GUI that the user doesn't care to view.
LocalizedDescription.HideEventTypeBelow=Hide event variables below this event type value. Removes event values from the GUI that the user doesn't care to view.
LocalizedDescription.HideSAVDetails=프로그램 제목에서 세이브 파일 상세 정보 숨기기
@ -203,6 +206,8 @@ LocalizedDescription.Unicode=유니코드 사용
LocalizedDescription.UseTabsAsCriteria=Use properties from the PKM Editor tabs to specify criteria like Gender and Nature when generating an encounter.
LocalizedDescription.UseTabsAsCriteriaAnySpecies=Use properties from the PKM Editor tabs even if the new encounter isn't the same evolution chain.
LocalizedDescription.Version=Last version that the program was run with.
LocalizedDescription.VerticalSelectPrimary=Vertical tab selected primary color.
LocalizedDescription.VerticalSelectSecondary=Vertical tab selected secondary color.
LocalizedDescription.VirtualConsoleSourceGen1=Default version to set when transferring from Generation 1 3DS Virtual Console to Generation 7.
LocalizedDescription.VirtualConsoleSourceGen2=Default version to set when transferring from Generation 2 3DS Virtual Console to Generation 7.
LocalizedDescription.ZeroHeightWeight=Severity to flag a Legality Check if Pokémon has a zero value for both Height and Weight.
@ -856,12 +861,19 @@ SAV_Misc3.TAB_Ferry=Ferry
SAV_Misc3.TAB_Joyful=Joyful
SAV_Misc3.TAB_Main=기본
SAV_Misc3.Tab_Records=Records
SAV_Misc4.B_AllAccessoriesIllegal=Give All (Illegal)
SAV_Misc4.B_AllAccessoriesLegal=Give All (Legal)
SAV_Misc4.B_AllBackdropsIllegal=Give All (Illegal)
SAV_Misc4.B_AllBackdropsLegal=Give All (Legal)
SAV_Misc4.B_AllFlyDest=모두 선택
SAV_Misc4.B_AllPoketch=모두 주기
SAV_Misc4.B_AllSealsIllegal=Give All Seals (Illegal)
SAV_Misc4.B_AllSealsLegal=Give All Seals (Legal)
SAV_Misc4.B_AllWalkerCourses=Check All
SAV_Misc4.B_Cancel=취소
SAV_Misc4.B_ClearAccessories=Clear All
SAV_Misc4.B_ClearBackdrops=Clear All
SAV_Misc4.B_ClearSeals=Clear All Seals
SAV_Misc4.B_DeleteAll=모두 삭제
SAV_Misc4.B_GiveAll=모두 주기
SAV_Misc4.B_GiveAllNoTrainers=Give All Non-Trainers
@ -882,6 +894,8 @@ SAV_Misc4.GB_Poketch=포켓치
SAV_Misc4.GB_Prints=Print
SAV_Misc4.GB_Streaks=연승
SAV_Misc4.GB_WalkerCourses=Pokewalker Courses
SAV_Misc4.L_Accessories=액세서리:
SAV_Misc4.L_Backdrops=벽지:
SAV_Misc4.L_BP=BP:
SAV_Misc4.L_CastleRank01=Recovery / Item / Info
SAV_Misc4.L_Coin=Coin:
@ -899,10 +913,11 @@ SAV_Misc4.L_Watts=Watts:
SAV_Misc4.RB_Stats3_01=레벨 50
SAV_Misc4.RB_Stats3_02=열기
SAV_Misc4.TAB_BF=배틀프런티어
SAV_Misc4.Tab_FashionCase=액세서리상자
SAV_Misc4.TAB_Main=기본
SAV_Misc4.Tab_Misc=기타
SAV_Misc4.Tab_Poffins=포핀
SAV_Misc4.Tab_PokeGear=포켓기어
SAV_Misc4.Tab_Seals=실
SAV_Misc4.TAB_Walker=포켓워커
SAV_Misc5.B_AllFlyDest=모두 선택
SAV_Misc5.B_AllKeys=모두 선택

View File

@ -93,6 +93,7 @@ ErrorWindow.B_Abort=终止
ErrorWindow.B_Continue=继续
ErrorWindow.B_CopyToClipboard=复制到剪切板
ErrorWindow.L_ProvideInfo=提交错误报告时请提供以下信息:
LocalizedDescription.AllowBoxDataDrop=Allow drag and drop of boxdata binary files from the GUI via the Box tab.
LocalizedDescription.AllowGen1Tradeback=GB 允许二代传回的招式组合
LocalizedDescription.AllowGuessRejuvenateHOME=允许在PKM文件转换中猜测那些未在文件中存储的合法原始相遇数据。
LocalizedDescription.AllowIncompatibleConversion=允许在PKM文件使用非官方方法转换其个体值将按顺序复制。
@ -111,6 +112,7 @@ LocalizedDescription.CurrentHandlerMismatch=如果当前持有人与预期值不
LocalizedDescription.DefaultBoxExportNamer=如果有多个可用的文件名则选择文件名用于GUI的框导出。
LocalizedDescription.DisableScalingDpi=在程序启动时禁用基于 Dpi 的 GUI 缩放,回退到字体缩放。
LocalizedDescription.DisableWordFilterPastGen=禁用3DS时代之前格式的文字过滤检查。
LocalizedDescription.ExtraProperties=Extra entity properties to try and show in addition to the default properties displayed.
LocalizedDescription.Female=女性性别颜色。
LocalizedDescription.FilterUnavailableSpecies=隐藏当前存档无法导入的宝可梦种类。
LocalizedDescription.FlagIllegal=标记非法。
@ -121,6 +123,7 @@ LocalizedDescription.Gen8MemoryMissingHT=如果第八世代当前持有人回忆
LocalizedDescription.GlowFinal=PKM鼠标悬停闪烁颜色2。
LocalizedDescription.GlowInitial=PKM鼠标悬停闪烁颜色1。
LocalizedDescription.HiddenPowerOnChangeMaxPower=当修改觉醒力量属性时,程序将自动尽最大可能使用最高的个体值来确保基础能力,否则使用最接近原始数值的个体值。
LocalizedDescription.HiddenProperties=Properties to hide from the report grid.
LocalizedDescription.HideEvent8Contains=隐藏不需要展示的活动名称,输入格式以逗号分隔。
LocalizedDescription.HideEventTypeBelow=隐藏不要展示的活动类型。
LocalizedDescription.HideSAVDetails=隐藏程序标题中的保存文件详细信息。
@ -203,6 +206,8 @@ LocalizedDescription.Unicode=使用Unicode显示性别符号禁用时使用AS
LocalizedDescription.UseTabsAsCriteria=在生成相遇时,使用 PKM 编辑器选项卡中的属性指定性别和特性等标准。
LocalizedDescription.UseTabsAsCriteriaAnySpecies=使用PKM编辑器选项卡中的属性即使新相遇不是同一个进化链。
LocalizedDescription.Version=上次程序运行时的版本。
LocalizedDescription.VerticalSelectPrimary=Vertical tab selected primary color.
LocalizedDescription.VerticalSelectSecondary=Vertical tab selected secondary color.
LocalizedDescription.VirtualConsoleSourceGen1=从第1代3DS虚拟传送转移到第7代时要设置的默认版本。
LocalizedDescription.VirtualConsoleSourceGen2=从第2代3DS虚拟传送转移到第7代时要设置的默认版本。
LocalizedDescription.ZeroHeightWeight=宝可梦身高体重都为0时合法性检查的严格程度。
@ -856,12 +861,19 @@ SAV_Misc3.TAB_Ferry=游轮
SAV_Misc3.TAB_Joyful=欢乐游戏城
SAV_Misc3.TAB_Main=主界面
SAV_Misc3.Tab_Records=记录
SAV_Misc4.B_AllAccessoriesIllegal=获得所有饰品 (非法)
SAV_Misc4.B_AllAccessoriesLegal=获得所有饰品 (合法)
SAV_Misc4.B_AllBackdropsIllegal=获得所有背景 (非法)
SAV_Misc4.B_AllBackdropsLegal=获得所有背景 (合法)
SAV_Misc4.B_AllFlyDest=全勾选
SAV_Misc4.B_AllPoketch=获得全部
SAV_Misc4.B_AllSealsIllegal=获得所有图章 (非法)
SAV_Misc4.B_AllSealsLegal=获得所有图章 (合法)
SAV_Misc4.B_AllSealsIllegal=获得所有贴纸 (非法)
SAV_Misc4.B_AllSealsLegal=获得所有贴纸 (合法)
SAV_Misc4.B_AllWalkerCourses=获得所有
SAV_Misc4.B_Cancel=取消
SAV_Misc4.B_ClearAccessories=删除所有饰品
SAV_Misc4.B_ClearBackdrops=删除所有背景
SAV_Misc4.B_ClearSeals=删除所有贴纸
SAV_Misc4.B_DeleteAll=删除全部
SAV_Misc4.B_GiveAll=获得全部
SAV_Misc4.B_GiveAllNoTrainers=获得所有非训练家
@ -899,10 +911,11 @@ SAV_Misc4.L_Watts=瓦特:
SAV_Misc4.RB_Stats3_01=等级50
SAV_Misc4.RB_Stats3_02=打开
SAV_Misc4.TAB_BF=对战开拓区
SAV_Misc4.Tab_FashionCase=饰品盒
SAV_Misc4.TAB_Main=主界面
SAV_Misc4.Tab_Misc=杂项
SAV_Misc4.Tab_Poffins=宝芬
SAV_Misc4.Tab_PokeGear=宝可装置
SAV_Misc4.Tab_Seals=贴纸
SAV_Misc4.TAB_Walker=宝可计步器
SAV_Misc5.B_AllFlyDest=全勾选
SAV_Misc5.B_AllKeys=全勾选
@ -1031,7 +1044,6 @@ SAV_OPower.B_Cancel=取消
SAV_OPower.B_ClearAll=清空
SAV_OPower.B_GiveAll=获得全部
SAV_OPower.B_Save=保存
SAV_OPower.L_Points=能量:
SAV_OPower.GB_Battle=对战内
SAV_OPower.GB_Field=对战外
SAV_Poffin8b.B_All=所有

View File

@ -93,6 +93,7 @@ ErrorWindow.B_Abort=終止
ErrorWindow.B_Continue=繼續
ErrorWindow.B_CopyToClipboard=複製到剪切板
ErrorWindow.L_ProvideInfo=提交錯誤報告時請提供以下資訊:
LocalizedDescription.AllowBoxDataDrop=Allow drag and drop of boxdata binary files from the GUI via the Box tab.
LocalizedDescription.AllowGen1Tradeback=GB 允許從第二世代傳回之招式組合
LocalizedDescription.AllowGuessRejuvenateHOME=允許 PKM 檔轉換時猜測未於轉換格式存儲的合法原始遇見數據。
LocalizedDescription.AllowIncompatibleConversion=允許 PKM 檔依照非官方方法進行轉換。個體值將按順序複製。
@ -111,6 +112,7 @@ LocalizedDescription.CurrentHandlerMismatch=如果寶可夢現時持有人與預
LocalizedDescription.DefaultBoxExportNamer=Selected File namer to use for box exports for the GUI, if multiple are available.
LocalizedDescription.DisableScalingDpi=Disables the GUI scaling based on Dpi on program startup, falling back to font scaling.
LocalizedDescription.DisableWordFilterPastGen=Disables the Word Filter check for formats prior to 3DS-era.
LocalizedDescription.ExtraProperties=Extra entity properties to try and show in addition to the default properties displayed.
LocalizedDescription.Female=Female gender color.
LocalizedDescription.FilterUnavailableSpecies=隱藏無法匯入當前儲存資料之寶可夢種類
LocalizedDescription.FlagIllegal=標記不合法
@ -121,6 +123,7 @@ LocalizedDescription.Gen8MemoryMissingHT=對缺失第八世代現時持有人回
LocalizedDescription.GlowFinal=Hovering over a PKM color 2.
LocalizedDescription.GlowInitial=Hovering over a PKM color 1.
LocalizedDescription.HiddenPowerOnChangeMaxPower=當修改覺醒力量屬性時,自動最大化個體值以確保基礎能力。否則使個體值盡量與原個體值接近。
LocalizedDescription.HiddenProperties=Properties to hide from the report grid.
LocalizedDescription.HideEvent8Contains=隱藏包含逗號分隔子串之活動名稱並從GUI中移除不關心之活動名稱值。
LocalizedDescription.HideEventTypeBelow=隱藏該活動類型值下之各類事件並從GUI中移除用戶不關心的活動名稱值。
LocalizedDescription.HideSAVDetails=隱藏程式標題中的儲存資料檔詳細資訊
@ -203,6 +206,8 @@ LocalizedDescription.Unicode=使用Unicode顯示性別符號禁用時使用AS
LocalizedDescription.UseTabsAsCriteria=Use properties from the PKM Editor tabs to specify criteria like Gender and Nature when generating an encounter.
LocalizedDescription.UseTabsAsCriteriaAnySpecies=Use properties from the PKM Editor tabs even if the new encounter isn't the same evolution chain.
LocalizedDescription.Version=上次程式運行時的版本
LocalizedDescription.VerticalSelectPrimary=Vertical tab selected primary color.
LocalizedDescription.VerticalSelectSecondary=Vertical tab selected secondary color.
LocalizedDescription.VirtualConsoleSourceGen1=Default version to set when transferring from Generation 1 3DS Virtual Console to Generation 7.
LocalizedDescription.VirtualConsoleSourceGen2=Default version to set when transferring from Generation 2 3DS Virtual Console to Generation 7.
LocalizedDescription.ZeroHeightWeight=對身高體重均為0之寶可夢的合法性檢測嚴格程度。
@ -856,12 +861,19 @@ SAV_Misc3.TAB_Ferry=遊輪
SAV_Misc3.TAB_Joyful=歡樂遊戲城
SAV_Misc3.TAB_Main=主介面
SAV_Misc3.Tab_Records=記錄
SAV_Misc4.B_AllAccessoriesIllegal=獲得所有飾品 (非法)
SAV_Misc4.B_AllAccessoriesLegal=獲得所有飾品 (合法)
SAV_Misc4.B_AllBackdropsIllegal=獲得所有背景 (非法)
SAV_Misc4.B_AllBackdropsLegal=獲得所有背景 (合法)
SAV_Misc4.B_AllFlyDest=全勾選
SAV_Misc4.B_AllPoketch=獲得全部
SAV_Misc4.B_AllSealsIllegal=獲得所有圖章 (非法)
SAV_Misc4.B_AllSealsLegal=獲得所有圖章 (合法)
SAV_Misc4.B_AllSealsIllegal=獲得所有貼紙 (非法)
SAV_Misc4.B_AllSealsLegal=獲得所有貼紙 (合法)
SAV_Misc4.B_AllWalkerCourses=獲得所有
SAV_Misc4.B_Cancel=取消
SAV_Misc4.B_ClearAccessories=刪除所有飾品
SAV_Misc4.B_ClearBackdrops=刪除所有背景
SAV_Misc4.B_ClearSeals=刪除所有貼紙
SAV_Misc4.B_DeleteAll=刪除全部
SAV_Misc4.B_GiveAll=獲得全部
SAV_Misc4.B_GiveAllNoTrainers=獲得所有非訓練家
@ -899,10 +911,11 @@ SAV_Misc4.L_Watts=瓦特:
SAV_Misc4.RB_Stats3_01=等級50
SAV_Misc4.RB_Stats3_02=打開
SAV_Misc4.TAB_BF=對戰開拓區
SAV_Misc4.Tab_FashionCase=飾品盒
SAV_Misc4.TAB_Main=主介面
SAV_Misc4.Tab_Misc=雜項
SAV_Misc4.Tab_Poffins=寶芬
SAV_Misc4.Tab_PokeGear=寶可裝置
SAV_Misc4.Tab_Seals=貼紙
SAV_Misc4.TAB_Walker=寶可計步器
SAV_Misc5.B_AllFlyDest=全勾選
SAV_Misc5.B_AllKeys=全勾選

View File

@ -1,4 +1,4 @@
using System;
using System;
using System.Windows.Forms;
using PKHeX.Core;
@ -18,7 +18,18 @@ public SAV_Apricorn(SAV4HGSS sav)
private readonly SAV4HGSS Origin;
private readonly SAV4HGSS SAV;
private const int Count = 7;
private static readonly string[] itemlist = ["Red", "Yellow", "Blue", "Green", "Pink", "White", "Black"];
private const int ItemNameBase = 485; // Red Apricorn
private static ReadOnlySpan<byte> ItemNameOffset =>
[
0, // 485: Red
2, // 487: Yellow - out of order
1, // 486: Blue - out of order
3, // 488: Green
4, // 489: Pink
5, // 490: White
6, // 491: Black
];
private void Setup()
{
@ -42,8 +53,12 @@ private void Setup()
dgv.Columns.Add(dgvCount);
dgv.Rows.Add(Count);
var itemNames = GameInfo.Strings.itemlist;
for (int i = 0; i < Count; i++)
dgv.Rows[i].Cells[0].Value = itemlist[i];
{
var itemId = ItemNameBase + ItemNameOffset[i];
dgv.Rows[i].Cells[0].Value = itemNames[itemId];
}
LoadCount();
}

View File

@ -1,4 +1,4 @@
namespace PKHeX.WinForms
namespace PKHeX.WinForms
{
partial class SAV_Misc4
{
@ -36,8 +36,6 @@ private void InitializeComponent()
NUD_Coin = new System.Windows.Forms.NumericUpDown();
L_Coin = new System.Windows.Forms.Label();
L_CurrentMap = new System.Windows.Forms.Label();
L_UGFlags = new System.Windows.Forms.Label();
NUD_UGFlags = new System.Windows.Forms.NumericUpDown();
NUD_BP = new System.Windows.Forms.NumericUpDown();
L_BP = new System.Windows.Forms.Label();
CB_UpgradeMap = new System.Windows.Forms.ComboBox();
@ -50,6 +48,10 @@ private void InitializeComponent()
B_AllPoketch = new System.Windows.Forms.Button();
CLB_Poketch = new System.Windows.Forms.CheckedListBox();
PB_DotArtist = new System.Windows.Forms.PictureBox();
NUD_PokeathlonPoints = new System.Windows.Forms.NumericUpDown();
L_PokeathlonPoints = new System.Windows.Forms.Label();
L_UGFlags = new System.Windows.Forms.Label();
NUD_UGFlags = new System.Windows.Forms.NumericUpDown();
TAB_BF = new System.Windows.Forms.TabPage();
GB_Prints = new System.Windows.Forms.GroupBox();
BTN_PrintTower = new System.Windows.Forms.Button();
@ -106,25 +108,35 @@ private void InitializeComponent()
L_Watts = new System.Windows.Forms.Label();
NUD_Steps = new System.Windows.Forms.NumericUpDown();
L_Steps = new System.Windows.Forms.Label();
Tab_Misc = new System.Windows.Forms.TabPage();
Tab_Seals = new System.Windows.Forms.TabPage();
B_ClearSeals = new System.Windows.Forms.Button();
DGV_Seals = new System.Windows.Forms.DataGridView();
B_AllSealsIllegal = new System.Windows.Forms.Button();
B_AllSealsLegal = new System.Windows.Forms.Button();
Tab_FashionCase = new System.Windows.Forms.TabPage();
B_ClearBackdrops = new System.Windows.Forms.Button();
B_ClearAccessories = new System.Windows.Forms.Button();
B_AllBackdropsIllegal = new System.Windows.Forms.Button();
B_AllBackdropsLegal = new System.Windows.Forms.Button();
B_AllAccessoriesIllegal = new System.Windows.Forms.Button();
B_AllAccessoriesLegal = new System.Windows.Forms.Button();
DGV_Backdrops = new System.Windows.Forms.DataGridView();
DGV_Accessories = new System.Windows.Forms.DataGridView();
Tab_Poffins = new System.Windows.Forms.TabPage();
poffinCase4Editor1 = new PoffinCase4Editor();
Tab_PokeGear = new System.Windows.Forms.TabPage();
pokeGear4Editor1 = new PokeGear4Editor();
tip1 = new System.Windows.Forms.ToolTip(components);
tip2 = new System.Windows.Forms.ToolTip(components);
NUD_PokeathlonPoints = new System.Windows.Forms.NumericUpDown();
L_PokeathlonPoints = new System.Windows.Forms.Label();
TC_Misc.SuspendLayout();
TAB_Main.SuspendLayout();
((System.ComponentModel.ISupportInitialize)NUD_Coin).BeginInit();
((System.ComponentModel.ISupportInitialize)NUD_UGFlags).BeginInit();
((System.ComponentModel.ISupportInitialize)NUD_BP).BeginInit();
GB_FlyDest.SuspendLayout();
GB_Poketch.SuspendLayout();
((System.ComponentModel.ISupportInitialize)PB_DotArtist).BeginInit();
((System.ComponentModel.ISupportInitialize)NUD_PokeathlonPoints).BeginInit();
((System.ComponentModel.ISupportInitialize)NUD_UGFlags).BeginInit();
TAB_BF.SuspendLayout();
GB_Prints.SuspendLayout();
GB_Streaks.SuspendLayout();
@ -159,10 +171,13 @@ private void InitializeComponent()
GB_WalkerCourses.SuspendLayout();
((System.ComponentModel.ISupportInitialize)NUD_Watts).BeginInit();
((System.ComponentModel.ISupportInitialize)NUD_Steps).BeginInit();
Tab_Misc.SuspendLayout();
Tab_Seals.SuspendLayout();
((System.ComponentModel.ISupportInitialize)DGV_Seals).BeginInit();
Tab_FashionCase.SuspendLayout();
((System.ComponentModel.ISupportInitialize)DGV_Backdrops).BeginInit();
((System.ComponentModel.ISupportInitialize)DGV_Accessories).BeginInit();
Tab_Poffins.SuspendLayout();
Tab_PokeGear.SuspendLayout();
((System.ComponentModel.ISupportInitialize)NUD_PokeathlonPoints).BeginInit();
SuspendLayout();
//
// B_Cancel
@ -195,7 +210,8 @@ private void InitializeComponent()
TC_Misc.Controls.Add(TAB_Main);
TC_Misc.Controls.Add(TAB_BF);
TC_Misc.Controls.Add(TAB_Walker);
TC_Misc.Controls.Add(Tab_Misc);
TC_Misc.Controls.Add(Tab_Seals);
TC_Misc.Controls.Add(Tab_FashionCase);
TC_Misc.Controls.Add(Tab_Poffins);
TC_Misc.Controls.Add(Tab_PokeGear);
TC_Misc.Location = new System.Drawing.Point(14, 15);
@ -210,13 +226,15 @@ private void InitializeComponent()
TAB_Main.Controls.Add(NUD_Coin);
TAB_Main.Controls.Add(L_Coin);
TAB_Main.Controls.Add(L_CurrentMap);
TAB_Main.Controls.Add(L_UGFlags);
TAB_Main.Controls.Add(NUD_UGFlags);
TAB_Main.Controls.Add(NUD_BP);
TAB_Main.Controls.Add(L_BP);
TAB_Main.Controls.Add(CB_UpgradeMap);
TAB_Main.Controls.Add(GB_FlyDest);
TAB_Main.Controls.Add(GB_Poketch);
TAB_Main.Controls.Add(NUD_PokeathlonPoints);
TAB_Main.Controls.Add(L_PokeathlonPoints);
TAB_Main.Controls.Add(L_UGFlags);
TAB_Main.Controls.Add(NUD_UGFlags);
TAB_Main.Location = new System.Drawing.Point(4, 24);
TAB_Main.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
TAB_Main.Name = "TAB_Main";
@ -234,7 +252,7 @@ private void InitializeComponent()
NUD_Coin.Maximum = new decimal(new int[] { 65535, 0, 0, 0 });
NUD_Coin.Name = "NUD_Coin";
NUD_Coin.Size = new System.Drawing.Size(59, 23);
NUD_Coin.TabIndex = 9;
NUD_Coin.TabIndex = 1;
NUD_Coin.Value = new decimal(new int[] { 65535, 0, 0, 0 });
//
// L_Coin
@ -257,26 +275,6 @@ private void InitializeComponent()
L_CurrentMap.Text = "Current Map";
L_CurrentMap.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// L_UGFlags
//
L_UGFlags.Location = new System.Drawing.Point(-12, 32);
L_UGFlags.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
L_UGFlags.Name = "L_UGFlags";
L_UGFlags.Size = new System.Drawing.Size(117, 29);
L_UGFlags.TabIndex = 7;
L_UGFlags.Text = "Flags Obtained:";
L_UGFlags.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// NUD_UGFlags
//
NUD_UGFlags.Location = new System.Drawing.Point(106, 36);
NUD_UGFlags.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
NUD_UGFlags.Maximum = new decimal(new int[] { 999999, 0, 0, 0 });
NUD_UGFlags.Name = "NUD_UGFlags";
NUD_UGFlags.Size = new System.Drawing.Size(71, 23);
NUD_UGFlags.TabIndex = 2;
NUD_UGFlags.Value = new decimal(new int[] { 999999, 0, 0, 0 });
//
// NUD_BP
//
NUD_BP.Location = new System.Drawing.Point(35, 9);
@ -305,18 +303,18 @@ private void InitializeComponent()
CB_UpgradeMap.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
CB_UpgradeMap.Name = "CB_UpgradeMap";
CB_UpgradeMap.Size = new System.Drawing.Size(152, 23);
CB_UpgradeMap.TabIndex = 3;
CB_UpgradeMap.TabIndex = 4;
//
// GB_FlyDest
//
GB_FlyDest.Controls.Add(B_AllFlyDest);
GB_FlyDest.Controls.Add(CLB_FlyDest);
GB_FlyDest.Location = new System.Drawing.Point(4, 117);
GB_FlyDest.Location = new System.Drawing.Point(4, 129);
GB_FlyDest.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
GB_FlyDest.Name = "GB_FlyDest";
GB_FlyDest.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3);
GB_FlyDest.Size = new System.Drawing.Size(163, 159);
GB_FlyDest.TabIndex = 4;
GB_FlyDest.Size = new System.Drawing.Size(163, 146);
GB_FlyDest.TabIndex = 5;
GB_FlyDest.TabStop = false;
GB_FlyDest.Text = "Fly Destination";
//
@ -353,7 +351,7 @@ private void InitializeComponent()
GB_Poketch.Name = "GB_Poketch";
GB_Poketch.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3);
GB_Poketch.Size = new System.Drawing.Size(226, 267);
GB_Poketch.TabIndex = 5;
GB_Poketch.TabIndex = 6;
GB_Poketch.TabStop = false;
GB_Poketch.Text = "Pokétch";
//
@ -409,6 +407,46 @@ private void InitializeComponent()
PB_DotArtist.TabStop = false;
PB_DotArtist.MouseClick += PB_DotArtist_MouseClick;
//
// NUD_PokeathlonPoints
//
NUD_PokeathlonPoints.Location = new System.Drawing.Point(126, 39);
NUD_PokeathlonPoints.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
NUD_PokeathlonPoints.Maximum = new decimal(new int[] { 9999999, 0, 0, 0 });
NUD_PokeathlonPoints.Name = "NUD_PokeathlonPoints";
NUD_PokeathlonPoints.Size = new System.Drawing.Size(75, 23);
NUD_PokeathlonPoints.TabIndex = 3;
NUD_PokeathlonPoints.Value = new decimal(new int[] { 9999999, 0, 0, 0 });
//
// L_PokeathlonPoints
//
L_PokeathlonPoints.Location = new System.Drawing.Point(5, 36);
L_PokeathlonPoints.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
L_PokeathlonPoints.Name = "L_PokeathlonPoints";
L_PokeathlonPoints.Size = new System.Drawing.Size(119, 25);
L_PokeathlonPoints.TabIndex = 14;
L_PokeathlonPoints.Text = "Pokeathlon Points:";
L_PokeathlonPoints.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// L_UGFlags
//
L_UGFlags.Location = new System.Drawing.Point(8, 35);
L_UGFlags.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
L_UGFlags.Name = "L_UGFlags";
L_UGFlags.Size = new System.Drawing.Size(117, 29);
L_UGFlags.TabIndex = 7;
L_UGFlags.Text = "Flags Obtained:";
L_UGFlags.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// NUD_UGFlags
//
NUD_UGFlags.Location = new System.Drawing.Point(126, 39);
NUD_UGFlags.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
NUD_UGFlags.Maximum = new decimal(new int[] { 999999, 0, 0, 0 });
NUD_UGFlags.Name = "NUD_UGFlags";
NUD_UGFlags.Size = new System.Drawing.Size(75, 23);
NUD_UGFlags.TabIndex = 2;
NUD_UGFlags.Value = new decimal(new int[] { 999999, 0, 0, 0 });
//
// TAB_BF
//
TAB_BF.Controls.Add(GB_Prints);
@ -1087,24 +1125,54 @@ private void InitializeComponent()
L_Steps.Text = "Steps:";
L_Steps.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// Tab_Misc
// Tab_Seals
//
Tab_Misc.Controls.Add(NUD_PokeathlonPoints);
Tab_Misc.Controls.Add(L_PokeathlonPoints);
Tab_Misc.Controls.Add(B_AllSealsIllegal);
Tab_Misc.Controls.Add(B_AllSealsLegal);
Tab_Misc.Location = new System.Drawing.Point(4, 24);
Tab_Misc.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
Tab_Misc.Name = "Tab_Misc";
Tab_Misc.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3);
Tab_Misc.Size = new System.Drawing.Size(436, 278);
Tab_Misc.TabIndex = 3;
Tab_Misc.Text = "Misc";
Tab_Misc.UseVisualStyleBackColor = true;
Tab_Seals.Controls.Add(B_ClearSeals);
Tab_Seals.Controls.Add(DGV_Seals);
Tab_Seals.Controls.Add(B_AllSealsIllegal);
Tab_Seals.Controls.Add(B_AllSealsLegal);
Tab_Seals.Location = new System.Drawing.Point(4, 24);
Tab_Seals.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
Tab_Seals.Name = "Tab_Seals";
Tab_Seals.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3);
Tab_Seals.Size = new System.Drawing.Size(436, 278);
Tab_Seals.TabIndex = 3;
Tab_Seals.Text = "Seals";
Tab_Seals.UseVisualStyleBackColor = true;
//
// B_ClearSeals
//
B_ClearSeals.Location = new System.Drawing.Point(42, 68);
B_ClearSeals.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
B_ClearSeals.Name = "B_ClearSeals";
B_ClearSeals.Size = new System.Drawing.Size(140, 43);
B_ClearSeals.TabIndex = 20;
B_ClearSeals.Text = "Clear All Seals";
B_ClearSeals.UseVisualStyleBackColor = true;
B_ClearSeals.Click += B_ClearSeals_Click;
//
// DGV_Seals
//
DGV_Seals.AllowUserToAddRows = false;
DGV_Seals.AllowUserToDeleteRows = false;
DGV_Seals.AllowUserToResizeColumns = false;
DGV_Seals.AllowUserToResizeRows = false;
DGV_Seals.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.None;
DGV_Seals.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single;
DGV_Seals.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
DGV_Seals.ColumnHeadersVisible = false;
DGV_Seals.EditMode = System.Windows.Forms.DataGridViewEditMode.EditOnEnter;
DGV_Seals.Location = new System.Drawing.Point(220, 6);
DGV_Seals.MultiSelect = false;
DGV_Seals.Name = "DGV_Seals";
DGV_Seals.RowHeadersVisible = false;
DGV_Seals.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect;
DGV_Seals.Size = new System.Drawing.Size(209, 266);
DGV_Seals.TabIndex = 2;
//
// B_AllSealsIllegal
//
B_AllSealsIllegal.Location = new System.Drawing.Point(7, 57);
B_AllSealsIllegal.Location = new System.Drawing.Point(42, 166);
B_AllSealsIllegal.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
B_AllSealsIllegal.Name = "B_AllSealsIllegal";
B_AllSealsIllegal.Size = new System.Drawing.Size(140, 43);
@ -1115,7 +1183,8 @@ private void InitializeComponent()
//
// B_AllSealsLegal
//
B_AllSealsLegal.Location = new System.Drawing.Point(7, 7);
B_AllSealsLegal.Anchor = System.Windows.Forms.AnchorStyles.Right;
B_AllSealsLegal.Location = new System.Drawing.Point(42, 117);
B_AllSealsLegal.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
B_AllSealsLegal.Name = "B_AllSealsLegal";
B_AllSealsLegal.Size = new System.Drawing.Size(140, 43);
@ -1124,6 +1193,122 @@ private void InitializeComponent()
B_AllSealsLegal.UseVisualStyleBackColor = true;
B_AllSealsLegal.Click += OnBAllSealsLegalOnClick;
//
// Tab_FashionCase
//
Tab_FashionCase.Controls.Add(B_ClearBackdrops);
Tab_FashionCase.Controls.Add(B_ClearAccessories);
Tab_FashionCase.Controls.Add(B_AllBackdropsIllegal);
Tab_FashionCase.Controls.Add(B_AllBackdropsLegal);
Tab_FashionCase.Controls.Add(B_AllAccessoriesIllegal);
Tab_FashionCase.Controls.Add(B_AllAccessoriesLegal);
Tab_FashionCase.Controls.Add(DGV_Backdrops);
Tab_FashionCase.Controls.Add(DGV_Accessories);
Tab_FashionCase.Location = new System.Drawing.Point(4, 24);
Tab_FashionCase.Name = "Tab_FashionCase";
Tab_FashionCase.Padding = new System.Windows.Forms.Padding(3);
Tab_FashionCase.Size = new System.Drawing.Size(436, 278);
Tab_FashionCase.TabIndex = 6;
Tab_FashionCase.Text = "Fashion Case";
Tab_FashionCase.UseVisualStyleBackColor = true;
//
// B_ClearBackdrops
//
B_ClearBackdrops.Location = new System.Drawing.Point(221, 7);
B_ClearBackdrops.Name = "B_ClearBackdrops";
B_ClearBackdrops.Size = new System.Drawing.Size(209, 29);
B_ClearBackdrops.TabIndex = 16;
B_ClearBackdrops.Text = "Clear All Backdrops";
B_ClearBackdrops.UseVisualStyleBackColor = true;
B_ClearBackdrops.Click += B_ClearBackdrops_Click;
//
// B_ClearAccessories
//
B_ClearAccessories.Location = new System.Drawing.Point(6, 7);
B_ClearAccessories.Name = "B_ClearAccessories";
B_ClearAccessories.Size = new System.Drawing.Size(209, 29);
B_ClearAccessories.TabIndex = 15;
B_ClearAccessories.Text = "Clear All Accessories";
B_ClearAccessories.UseVisualStyleBackColor = true;
B_ClearAccessories.Click += B_ClearAccessories_Click;
//
// B_AllBackdropsIllegal
//
B_AllBackdropsIllegal.Location = new System.Drawing.Point(221, 73);
B_AllBackdropsIllegal.Name = "B_AllBackdropsIllegal";
B_AllBackdropsIllegal.Size = new System.Drawing.Size(209, 29);
B_AllBackdropsIllegal.TabIndex = 13;
B_AllBackdropsIllegal.Text = "Give All Backdrops (Illegal)";
B_AllBackdropsIllegal.UseVisualStyleBackColor = true;
B_AllBackdropsIllegal.Click += OnBAllBackdropsLegalOnClick;
//
// B_AllBackdropsLegal
//
B_AllBackdropsLegal.Location = new System.Drawing.Point(221, 40);
B_AllBackdropsLegal.Name = "B_AllBackdropsLegal";
B_AllBackdropsLegal.Size = new System.Drawing.Size(209, 29);
B_AllBackdropsLegal.TabIndex = 12;
B_AllBackdropsLegal.Text = "Give All Backdrops (Legal)";
B_AllBackdropsLegal.UseVisualStyleBackColor = true;
B_AllBackdropsLegal.Click += OnBAllBackdropsLegalOnClick;
//
// B_AllAccessoriesIllegal
//
B_AllAccessoriesIllegal.Location = new System.Drawing.Point(6, 73);
B_AllAccessoriesIllegal.Name = "B_AllAccessoriesIllegal";
B_AllAccessoriesIllegal.Size = new System.Drawing.Size(209, 29);
B_AllAccessoriesIllegal.TabIndex = 10;
B_AllAccessoriesIllegal.Text = "Give All Accessories (Illegal)";
B_AllAccessoriesIllegal.UseVisualStyleBackColor = true;
B_AllAccessoriesIllegal.Click += OnBAllAccessoriesLegalOnClick;
//
// B_AllAccessoriesLegal
//
B_AllAccessoriesLegal.Location = new System.Drawing.Point(6, 40);
B_AllAccessoriesLegal.Name = "B_AllAccessoriesLegal";
B_AllAccessoriesLegal.Size = new System.Drawing.Size(209, 29);
B_AllAccessoriesLegal.TabIndex = 9;
B_AllAccessoriesLegal.Text = "Give All Accessories (Legal)";
B_AllAccessoriesLegal.UseVisualStyleBackColor = true;
B_AllAccessoriesLegal.Click += OnBAllAccessoriesLegalOnClick;
//
// DGV_Backdrops
//
DGV_Backdrops.AllowUserToAddRows = false;
DGV_Backdrops.AllowUserToDeleteRows = false;
DGV_Backdrops.AllowUserToResizeColumns = false;
DGV_Backdrops.AllowUserToResizeRows = false;
DGV_Backdrops.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.None;
DGV_Backdrops.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single;
DGV_Backdrops.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
DGV_Backdrops.ColumnHeadersVisible = false;
DGV_Backdrops.EditMode = System.Windows.Forms.DataGridViewEditMode.EditOnEnter;
DGV_Backdrops.Location = new System.Drawing.Point(221, 108);
DGV_Backdrops.MultiSelect = false;
DGV_Backdrops.Name = "DGV_Backdrops";
DGV_Backdrops.RowHeadersVisible = false;
DGV_Backdrops.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect;
DGV_Backdrops.Size = new System.Drawing.Size(209, 164);
DGV_Backdrops.TabIndex = 14;
//
// DGV_Accessories
//
DGV_Accessories.AllowUserToAddRows = false;
DGV_Accessories.AllowUserToDeleteRows = false;
DGV_Accessories.AllowUserToResizeColumns = false;
DGV_Accessories.AllowUserToResizeRows = false;
DGV_Accessories.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.None;
DGV_Accessories.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single;
DGV_Accessories.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
DGV_Accessories.ColumnHeadersVisible = false;
DGV_Accessories.EditMode = System.Windows.Forms.DataGridViewEditMode.EditOnEnter;
DGV_Accessories.Location = new System.Drawing.Point(6, 108);
DGV_Accessories.MultiSelect = false;
DGV_Accessories.Name = "DGV_Accessories";
DGV_Accessories.RowHeadersVisible = false;
DGV_Accessories.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect;
DGV_Accessories.Size = new System.Drawing.Size(209, 164);
DGV_Accessories.TabIndex = 11;
//
// Tab_Poffins
//
Tab_Poffins.Controls.Add(poffinCase4Editor1);
@ -1166,26 +1351,6 @@ private void InitializeComponent()
pokeGear4Editor1.Size = new System.Drawing.Size(428, 272);
pokeGear4Editor1.TabIndex = 0;
//
// NUD_PokeathlonPoints
//
NUD_PokeathlonPoints.Location = new System.Drawing.Point(149, 131);
NUD_PokeathlonPoints.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
NUD_PokeathlonPoints.Maximum = new decimal(new int[] { 9999999, 0, 0, 0 });
NUD_PokeathlonPoints.Name = "NUD_PokeathlonPoints";
NUD_PokeathlonPoints.Size = new System.Drawing.Size(75, 23);
NUD_PokeathlonPoints.TabIndex = 11;
NUD_PokeathlonPoints.Value = new decimal(new int[] { 9999999, 0, 0, 0 });
//
// L_PokeathlonPoints
//
L_PokeathlonPoints.Location = new System.Drawing.Point(28, 128);
L_PokeathlonPoints.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
L_PokeathlonPoints.Name = "L_PokeathlonPoints";
L_PokeathlonPoints.Size = new System.Drawing.Size(119, 25);
L_PokeathlonPoints.TabIndex = 12;
L_PokeathlonPoints.Text = "Pokeathlon Points:";
L_PokeathlonPoints.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// SAV_Misc4
//
AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
@ -1201,12 +1366,13 @@ private void InitializeComponent()
TC_Misc.ResumeLayout(false);
TAB_Main.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)NUD_Coin).EndInit();
((System.ComponentModel.ISupportInitialize)NUD_UGFlags).EndInit();
((System.ComponentModel.ISupportInitialize)NUD_BP).EndInit();
GB_FlyDest.ResumeLayout(false);
GB_Poketch.ResumeLayout(false);
GB_Poketch.PerformLayout();
((System.ComponentModel.ISupportInitialize)PB_DotArtist).EndInit();
((System.ComponentModel.ISupportInitialize)NUD_PokeathlonPoints).EndInit();
((System.ComponentModel.ISupportInitialize)NUD_UGFlags).EndInit();
TAB_BF.ResumeLayout(false);
GB_Prints.ResumeLayout(false);
GB_Streaks.ResumeLayout(false);
@ -1243,10 +1409,13 @@ private void InitializeComponent()
GB_WalkerCourses.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)NUD_Watts).EndInit();
((System.ComponentModel.ISupportInitialize)NUD_Steps).EndInit();
Tab_Misc.ResumeLayout(false);
Tab_Seals.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)DGV_Seals).EndInit();
Tab_FashionCase.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)DGV_Backdrops).EndInit();
((System.ComponentModel.ISupportInitialize)DGV_Accessories).EndInit();
Tab_Poffins.ResumeLayout(false);
Tab_PokeGear.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)NUD_PokeathlonPoints).EndInit();
ResumeLayout(false);
}
@ -1329,7 +1498,6 @@ private void InitializeComponent()
private System.Windows.Forms.Label L_Steps;
private System.Windows.Forms.NumericUpDown NUD_Coin;
private System.Windows.Forms.Label L_Coin;
private System.Windows.Forms.TabPage Tab_Misc;
private System.Windows.Forms.Button B_AllSealsIllegal;
private System.Windows.Forms.Button B_AllSealsLegal;
private System.Windows.Forms.TabPage Tab_Poffins;
@ -1340,5 +1508,17 @@ private void InitializeComponent()
private System.Windows.Forms.ToolTip tip2;
private System.Windows.Forms.NumericUpDown NUD_PokeathlonPoints;
private System.Windows.Forms.Label L_PokeathlonPoints;
private System.Windows.Forms.DataGridView DGV_Seals;
private System.Windows.Forms.DataGridView DGV_Backdrops;
private System.Windows.Forms.DataGridView DGV_Accessories;
private System.Windows.Forms.Button B_AllBackdropsIllegal;
private System.Windows.Forms.Button B_AllBackdropsLegal;
private System.Windows.Forms.Button B_AllAccessoriesIllegal;
private System.Windows.Forms.Button B_AllAccessoriesLegal;
private System.Windows.Forms.TabPage Tab_Seals;
private System.Windows.Forms.TabPage Tab_FashionCase;
private System.Windows.Forms.Button B_ClearBackdrops;
private System.Windows.Forms.Button B_ClearAccessories;
private System.Windows.Forms.Button B_ClearSeals;
}
}

View File

@ -16,12 +16,21 @@ public partial class SAV_Misc4 : Form
private readonly SAV4 SAV;
private readonly Hall4? Hall;
private readonly string[] seals, accessories, backdrops, poketchapps;
private readonly string[] backdropsSorted;
public SAV_Misc4(SAV4 sav)
{
InitializeComponent();
WinFormsUtil.TranslateInterface(this, Main.CurrentLanguage);
SAV = (SAV4)(Origin = sav).Clone();
seals = GameInfo.Strings.seals;
accessories = GameInfo.Strings.accessories;
backdrops = GameInfo.Strings.backdrops;
poketchapps = GameInfo.Strings.poketchapps;
backdropsSorted = [.. backdrops.OrderBy(z => z)]; // sorted copy
StatNUDA = [NUD_Stat0, NUD_Stat1, NUD_Stat2, NUD_Stat3];
StatLabelA = [L_Stat0, L_Stat1, L_Stat2, L_Stat3]; // Current, Trade, Record, Trade
StatRBA = [RB_Stats3_01, RB_Stats3_02];
@ -130,6 +139,7 @@ private void ReadMain()
{
ReadPoketch(sinnoh);
NUD_UGFlags.Value = Math.Clamp(sinnoh.UG_Flags, 0, 999_999);
L_PokeathlonPoints.Visible = NUD_PokeathlonPoints.Visible = false;
}
else if (SAV is SAV4HGSS hgss)
{
@ -144,6 +154,10 @@ private void ReadMain()
CB_UpgradeMap.Items.Add(item);
CB_UpgradeMap.SelectedIndex = (int)index;
}
ReadSeals();
ReadAccessories();
ReadBackdrops();
}
private void SaveMain()
@ -169,6 +183,10 @@ private void SaveMain()
SavePokeathlon(hgss);
hgss.MapUnlockState = (MapUnlockState4)CB_UpgradeMap.SelectedIndex;
}
SaveSeals();
SaveAccessories();
SaveBackdrops();
}
private void B_AllFlyDest_Click(object sender, EventArgs e)
@ -186,7 +204,7 @@ private void ReadPoketch(SAV4Sinnoh s)
CLB_Poketch.Items.Clear();
for (PoketchApp i = 0; i <= PoketchApp.Alarm_Clock; i++)
{
var name = i.ToString();
var name = poketchapps[(int)i];
var title = $"{(int)i:00} - {name}";
CB_CurrentApp.Items.Add(name);
var value = s.GetPoketchAppUnlocked(i);
@ -659,6 +677,7 @@ private void NUD_HallStreaks_ValueChanged(object sender, EventArgs e)
}
#endregion
#region Walker
private void ReadWalker(SAV4HGSS s)
{
ReadOnlySpan<string> walkercourses = GameInfo.Sources.Strings.walkercourses;
@ -698,13 +717,7 @@ private void B_AllWalkerCourses_Click(object sender, EventArgs e)
s.PokewalkerCoursesUnlockAll();
ReadWalkerCourseUnlockFlags(s);
}
private void OnBAllSealsLegalOnClick(object sender, EventArgs e)
{
bool setUnreleasedIndexes = sender == B_AllSealsIllegal;
SAV.SetAllSeals(SAV4.SealMaxCount, setUnreleasedIndexes);
System.Media.SystemSounds.Asterisk.Play();
}
#endregion
private void ReadPokeathlon(SAV4HGSS s)
{
@ -715,6 +728,221 @@ private void SavePokeathlon(SAV4HGSS s)
{
s.PokeathlonPoints = (uint)NUD_PokeathlonPoints.Value;
}
#region Seals
private void ReadSeals()
{
DGV_Seals.Rows.Clear();
DGV_Seals.Columns.Clear();
DataGridViewTextBoxColumn dgvSlot = new()
{
HeaderText = "Slot",
DisplayIndex = 0,
Width = 145,
ReadOnly = true,
};
DataGridViewTextBoxColumn dgvCount = new()
{
DisplayIndex = 1,
Width = 45,
DefaultCellStyle = { Alignment = DataGridViewContentAlignment.MiddleCenter },
MaxInputLength = 2, // 0-99
};
DGV_Seals.Columns.Add(dgvSlot);
DGV_Seals.Columns.Add(dgvCount);
var count = (int)Seal4.MAX;
DGV_Seals.Rows.Add(count);
for (int i = 0; i < count; i++)
DGV_Seals.Rows[i].Cells[0].Value = seals[i];
LoadSealsCount();
}
private void LoadSealsCount()
{
for (int i = 0; i < (int)Seal4.MAX; i++)
DGV_Seals.Rows[i].Cells[1].Value = SAV.GetSealCount((Seal4)i).ToString();
}
public void ClearSeals()
{
for (int i = 0; i < (int)Seal4.MAX; i++)
DGV_Seals.Rows[i].Cells[1].Value = "0";
}
public void SetAllSeals(bool unreleased = false)
{
var sealIndexCount = (int)(unreleased ? Seal4.MAX : Seal4.MAXLEGAL);
for (int i = 0; i < sealIndexCount; i++)
DGV_Seals.Rows[i].Cells[1].Value = SAV4.SealMaxCount.ToString();
}
private void SaveSeals()
{
for (int i = 0; i < (int)Seal4.MAX; i++)
{
var cells = DGV_Seals.Rows[i].Cells;
var count = int.TryParse(cells[1].Value?.ToString() ?? "0", out var val) ? val : 0;
SAV.SetSealCount((Seal4)i, (byte)Math.Clamp(count, 0, byte.MaxValue));
}
}
private void B_ClearSeals_Click(object sender, EventArgs e) => ClearSeals();
private void OnBAllSealsLegalOnClick(object sender, EventArgs e)
{
bool setUnreleasedIndexes = sender == B_AllSealsIllegal;
SetAllSeals(setUnreleasedIndexes);
System.Media.SystemSounds.Asterisk.Play();
}
#endregion
#region Accessories
private void ReadAccessories()
{
DGV_Accessories.Rows.Clear();
DGV_Accessories.Columns.Clear();
DataGridViewTextBoxColumn dgvSlot = new()
{
HeaderText = "Slot",
DisplayIndex = 0,
Width = 140,
ReadOnly = true,
};
DataGridViewTextBoxColumn dgvCount = new()
{
DisplayIndex = 1,
Width = 50,
DefaultCellStyle = { Alignment = DataGridViewContentAlignment.MiddleCenter },
MaxInputLength = 1, // 0-9
};
DGV_Accessories.Columns.Add(dgvSlot);
DGV_Accessories.Columns.Add(dgvCount);
var count = AccessoryInfo.Count;
DGV_Accessories.Rows.Add(count);
for (int i = 0; i < count; i++)
DGV_Accessories.Rows[i].Cells[0].Value = accessories[i];
LoadAccessoriesCount();
}
private void LoadAccessoriesCount()
{
for (int i = 0; i < AccessoryInfo.Count; i++)
DGV_Accessories.Rows[i].Cells[1].Value = SAV.GetAccessoryOwnedCount((Accessory4)i).ToString();
}
public void ClearAccessories()
{
for (int i = 0; i < AccessoryInfo.Count; i++)
DGV_Accessories.Rows[i].Cells[1].Value = "0";
}
public void SetAllAccessories(bool unreleased = false)
{
for (int i = 0; i <= AccessoryInfo.MaxMulti; i++)
DGV_Accessories.Rows[i].Cells[1].Value = AccessoryInfo.AccessoryMaxCount.ToString();
var count = unreleased ? AccessoryInfo.Count : (AccessoryInfo.MaxLegal + 1);
for (int i = AccessoryInfo.MaxMulti + 1; i < count; i++)
DGV_Accessories.Rows[i].Cells[1].Value = "1";
}
private void SaveAccessories()
{
for (int i = 0; i < AccessoryInfo.Count; i++)
{
var cells = DGV_Accessories.Rows[i].Cells;
var count = int.TryParse(cells[1].Value?.ToString() ?? "0", out var val) ? val : 0;
SAV.SetAccessoryOwnedCount((Accessory4)i, (byte)Math.Clamp(count, 0, byte.MaxValue));
}
}
private void B_ClearAccessories_Click(object sender, EventArgs e) => ClearAccessories();
private void OnBAllAccessoriesLegalOnClick(object sender, EventArgs e)
{
bool setUnreleasedIndexes = sender == B_AllAccessoriesIllegal;
SetAllAccessories(setUnreleasedIndexes);
System.Media.SystemSounds.Asterisk.Play();
}
#endregion
#region Backdrops
private void ReadBackdrops()
{
DGV_Backdrops.Rows.Clear();
DGV_Backdrops.Columns.Clear();
DataGridViewComboBoxColumn dgv = new()
{
HeaderText = "Slot",
DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing,
DisplayIndex = 0,
Width = 190,
FlatStyle = FlatStyle.Flat,
DataSource = new BindingSource(backdropsSorted, null),
};
DGV_Backdrops.Columns.Add(dgv);
LoadBackdropPositions();
}
private void LoadBackdropPositions()
{
const int count = BackdropInfo.Count;
DGV_Backdrops.Rows.Add(count);
ClearBackdrops();
for (int i = 0; i < count; i++)
{
var pos = SAV.GetBackdropPosition((Backdrop4)i);
if (pos < BackdropInfo.Count)
DGV_Backdrops.Rows[pos].Cells[0].Value = backdrops[i];
}
}
private void ClearBackdrops()
{
for (int i = 0; i < BackdropInfo.Count; i++)
DGV_Backdrops.Rows[i].Cells[0].Value = backdrops[(int)Backdrop4.Unset];
}
public void SetAllBackdrops(bool unreleased = false)
{
var count = unreleased ? BackdropInfo.Count : ((int)BackdropInfo.MaxLegal + 1);
for (int i = 0; i < count; i++)
DGV_Backdrops.Rows[i].Cells[0].Value = backdrops[i];
}
private void SaveBackdrops()
{
for (int i = 0; i < BackdropInfo.Count; i++)
SAV.RemoveBackdrop((Backdrop4)i); // clear all slots
byte ctr = 0;
for (int i = 0; i < BackdropInfo.Count; i++)
{
Backdrop4 bd = (Backdrop4)Array.IndexOf(backdrops, DGV_Backdrops.Rows[i].Cells[0].Value);
if (bd.IsUnset()) // skip empty slots
continue;
SAV.SetBackdropPosition(bd, ctr);
ctr++;
}
}
private void B_ClearBackdrops_Click(object sender, EventArgs e) => ClearBackdrops();
private void OnBAllBackdropsLegalOnClick(object sender, EventArgs e)
{
bool setUnreleasedIndexes = sender == B_AllBackdropsIllegal;
SetAllBackdrops(setUnreleasedIndexes);
System.Media.SystemSounds.Asterisk.Play();
}
#endregion
}
public static class PoketchDotMatrix