From 81cf6514f8b127e4975c4ba864202c2213bccd8d Mon Sep 17 00:00:00 2001 From: Manu <52102823+Manu098vm@users.noreply.github.com> Date: Mon, 27 Oct 2025 17:26:14 +0100 Subject: [PATCH] Compatibility with Legends ZA --- SwitchGiftDataManager.CommandLine/Program.cs | 5 +- .../Classes/BCATManager/BCATManager.cs | 11 +- .../Classes/WCManager/GiftData/OtherGift.cs | 20 +- .../Classes/WCManager/WA9.cs | 138 +++++++ .../Classes/WCManager/Wondercard.cs | 7 +- SwitchGiftDataManager.Core/Enums/Enums.cs | 11 + .../Resources/Items.txt | 373 +++++++++++------- .../MainWindow.Designer.cs | 43 +- SwitchGiftDataManager.WinForm/MainWindow.cs | 9 + SwitchGiftDataManager.WinForm/MainWindow.resx | 6 +- SwitchGiftDataManager.WinForm/MgdbForm.cs | 6 +- 11 files changed, 451 insertions(+), 178 deletions(-) create mode 100644 SwitchGiftDataManager.Core/Classes/WCManager/WA9.cs diff --git a/SwitchGiftDataManager.CommandLine/Program.cs b/SwitchGiftDataManager.CommandLine/Program.cs index 725e59e..8dfdca2 100644 --- a/SwitchGiftDataManager.CommandLine/Program.cs +++ b/SwitchGiftDataManager.CommandLine/Program.cs @@ -17,11 +17,12 @@ public static class Program $"2 - SWSH{Environment.NewLine}" + $"3 - BDSP{Environment.NewLine}" + $"4 - PLA{Environment.NewLine}" + - $"5 - SCVI"; + $"5 - SCVI{Environment.NewLine}" + + $"6 - ZA"; Log(msg); Games game = (Games)int.Parse(Console.ReadLine()!); - if (game is Games.None || game > Games.SCVI) + if (game is Games.None || game > Games.ZA) { Log("Invalid input. Aborted."); Console.ReadKey(); diff --git a/SwitchGiftDataManager.Core/Classes/BCATManager/BCATManager.cs b/SwitchGiftDataManager.Core/Classes/BCATManager/BCATManager.cs index 9615abf..72e6981 100644 --- a/SwitchGiftDataManager.Core/Classes/BCATManager/BCATManager.cs +++ b/SwitchGiftDataManager.Core/Classes/BCATManager/BCATManager.cs @@ -7,7 +7,7 @@ namespace SwitchGiftDataManager.Core; public class BCATManager { - public const string Version = "1.8.0"; + public const string Version = "1.9.0"; private const int FileNameOffset = 0x00; private const int UnkOffset = 0x20; @@ -35,6 +35,7 @@ public class BCATManager Games.BDSP => new WB8(data), Games.PLA => new WA8(data), Games.SCVI => new WC9(data), + Games.ZA => new WA9(data), _ => throw new ArgumentOutOfRangeException(nameof(Game)), }; } @@ -341,10 +342,12 @@ public class BCATManager return Games.SWSH; else if (data.Length % (int)Wondercard.GetSize(Games.BDSP) == 0) return Games.BDSP; - else if (data.Length % (int)Wondercard.GetSize(Games.PLA) == 0 && data[Wondercard.GenOffset] != 0) + else if (data.Length % (int)Wondercard.GetSize(Games.PLA) == 0 && data[0x0F] != 0) return Games.PLA; - else if (data.Length % (int)Wondercard.GetSize(Games.SCVI) == 0 && data[Wondercard.GenOffset] == 0) + else if (data.Length % (int)Wondercard.GetSize(Games.SCVI) == 0 && data[0x0F] == 0 && data[0x2C0] == 0) return Games.SCVI; + else if (data.Length % (int)Wondercard.GetSize(Games.ZA) == 0 && data[0x2C0] != 0) + return Games.ZA; else return Games.None; } @@ -358,6 +361,7 @@ public class BCATManager Games.BDSP => "99", Games.PLA => "normal", Games.SCVI => "normal", + Games.ZA => "normal", _ => throw new ArgumentOutOfRangeException(nameof(game)), }; } @@ -370,6 +374,7 @@ public class BCATManager Games.BDSP => "99", Games.PLA => "distribution_internet", Games.SCVI => "distribution_internet", + Games.ZA => "distribution_internet", _ => throw new ArgumentOutOfRangeException(nameof(game)), }; } diff --git a/SwitchGiftDataManager.Core/Classes/WCManager/GiftData/OtherGift.cs b/SwitchGiftDataManager.Core/Classes/WCManager/GiftData/OtherGift.cs index 79672c3..d369ed3 100644 --- a/SwitchGiftDataManager.Core/Classes/WCManager/GiftData/OtherGift.cs +++ b/SwitchGiftDataManager.Core/Classes/WCManager/GiftData/OtherGift.cs @@ -1,4 +1,5 @@ using Enums; +using System.Runtime.CompilerServices; namespace SwitchGiftDataManager.Core; @@ -7,11 +8,11 @@ public class OtherGift public object? Type { get; set; } public ushort Item { get; set; } public uint Quantity { get; set; } - public ushort Opt { get; set; } + public uint Opt { get; set; } public string GetItemName() => GetItemName(Item, Type!, Opt); - public static string GetItemName(ushort id, object type, ushort opt = 0) + public static string GetItemName(ushort id, object type, uint opt = 0) { var str = ""; @@ -98,7 +99,20 @@ public class OtherGift else str = ((GiftType9)type).ToString(); } - + else if (type.GetType() == typeof(GiftType9A)) + { + if ((GiftType9A)type is GiftType9A.Item) + str = Properties.Resources.Items.Split(new String[] { "\n" }, StringSplitOptions.None)[id]; + else if ((GiftType9A)type is GiftType9A.Clothing) + str = Clothing9A[opt]; + else + str = ((GiftType9A)type).ToString(); + } return str; } + + private static Dictionary Clothing9A = new() + { + { 0x2E1937, "Trench Coat and Pants Set (Beige)" }, + }; } \ No newline at end of file diff --git a/SwitchGiftDataManager.Core/Classes/WCManager/WA9.cs b/SwitchGiftDataManager.Core/Classes/WCManager/WA9.cs new file mode 100644 index 0000000..13c3ce1 --- /dev/null +++ b/SwitchGiftDataManager.Core/Classes/WCManager/WA9.cs @@ -0,0 +1,138 @@ +using System.Buffers.Binary; +using Enums; + +namespace SwitchGiftDataManager.Core; + +public class WA9 : Wondercard +{ + private const int WondercardIDOffset = 0x08; + private const int FlagOffset = 0x10; + private const int GiftTypeOffset = 0x11; + private const int ItemOffset = 0x18; + private const int QuantityOffset = 0x1A; + private const int TIDOffset = 0x18; + private const int SIDOffset = 0x1A; + private const int PIDOffset = 0x24; + private const int SpeciesOffset = 0x270; + private const int ShinyTypeOffset = 0x278; + private const int ChecksumOffset = 0x2C0; + + public WA9(ReadOnlySpan data) : base(data) + { + WCID = BinaryPrimitives.ReadUInt16LittleEndian(data[WondercardIDOffset..]); + IsRepeatable = (Data![FlagOffset] & 1) == 0; + Type = (GiftType9A)Data![GiftTypeOffset]; + Content = Type switch + { + GiftType9A.Pokemon => GetPokemon(), + _ => GetItems(), + }; + } + + private PokemonGift GetPokemon() + { + var species = BinaryPrimitives.ReadUInt16LittleEndian(Data.AsSpan(SpeciesOffset)); + var pid = BinaryPrimitives.ReadUInt32LittleEndian(Data.AsSpan(PIDOffset)); + var tid = BinaryPrimitives.ReadUInt16LittleEndian(Data.AsSpan(TIDOffset)); + var sid = BinaryPrimitives.ReadUInt16LittleEndian(Data.AsSpan(SIDOffset)); + var pidtype = (ShinyType9)Data![ShinyTypeOffset] switch + { + ShinyType9.ShinyLocked => PIDType.RandomPID, + ShinyType9.ShinyRandom => PIDType.RandomPID, + ShinyType9.ShinyStar => PIDType.FixedPID, + ShinyType9.ShinySquare => PIDType.FixedPID, + ShinyType9.Fixed => PIDType.FixedPID, + _ => throw new ArgumentOutOfRangeException(), + }; + var shinytype = (ShinyType9)Data![ShinyTypeOffset] switch + { + ShinyType9.ShinyLocked => ShinyType.ShinyLocked, + ShinyType9.ShinyRandom => ShinyType.ShinyPossible, + ShinyType9.ShinyStar or ShinyType9.ShinySquare => ShinyType.ShinyForced, + ShinyType9.Fixed => PokemonGift.IsShiny(pid, tid, sid) ? ShinyType.ShinyForced : + PokemonGift.IsTIDAbusePossible(tid, sid, pidtype) ? ShinyType.ShinyTIDAbuse : ShinyType.ShinyLocked, + _ => throw new ArgumentOutOfRangeException(), + }; + + return new PokemonGift + { + Species = species, + PID = pid, + TID = tid, + SID = sid, + ShinyType = shinytype, + PIDType = pidtype, + }; + } + + private List GetItems() + { + List items = new(); + for (int i = 0; i < MaxItemCount; i++) + { + ushort item = 0; + uint quantity = 0; + uint opt = 0; + var type = (GiftType9A)Type!; + + if (type is GiftType9A.Clothing) + { + item = BinaryPrimitives.ReadUInt16LittleEndian(Data.AsSpan(ItemOffset + (0x04 * i))); + opt = BinaryPrimitives.ReadUInt32LittleEndian(Data.AsSpan(ItemOffset + (0x04 * i))); + } + else + { + item = BinaryPrimitives.ReadUInt16LittleEndian(Data.AsSpan(ItemOffset + (0x04 * i))); + quantity = type is GiftType9A.BP ? BinaryPrimitives.ReadUInt32LittleEndian(Data.AsSpan(ItemOffset + (0x04 * i))) : + BinaryPrimitives.ReadUInt16LittleEndian(Data.AsSpan(QuantityOffset + (0x04 * i))); + } + + var gift = new OtherGift + { + Type = type, + Item = item, + Quantity = quantity, + Opt = opt, + }; + + if ((type is not GiftType9A.Clothing && gift.Item != ushort.MinValue) || (type is GiftType9A.Clothing && item != ushort.MaxValue)) + items.Add(gift); + } + return items; + } + + public override bool IsChecksumValid() + { + if (Data is not null) + { + var oldChecksum = BinaryPrimitives.ReadUInt16LittleEndian(Data.AsSpan(ChecksumOffset)); + var span = Data.ToArray().AsSpan(); + BinaryPrimitives.WriteUInt16LittleEndian(span[ChecksumOffset..], 0x0); + var newchecksum = ChecksumCalculator.CalcCcittFalse(span); + if (oldChecksum == newchecksum) + return true; + } + return false; + } + + public override void UpdateChecksum() + { + BinaryPrimitives.WriteUInt16LittleEndian(Data.AsSpan(ChecksumOffset), 0x0); + var checksum = ChecksumCalculator.CalcCcittFalse(Data.AsSpan()); + BinaryPrimitives.WriteUInt16LittleEndian(Data.AsSpan(ChecksumOffset), checksum); + } + + public override void SetID(ushort wcid) + { + BinaryPrimitives.WriteUInt16LittleEndian(Data.AsSpan(WondercardIDOffset), wcid); + WCID = wcid; + UpdateChecksum(); + } + + public override void SetRepeatable(bool repeatable) + { + Data![FlagOffset] = (byte)((Data![FlagOffset] & ~1) | (repeatable ? 0 : 1)); + IsRepeatable = repeatable; + UpdateChecksum(); + } +} \ No newline at end of file diff --git a/SwitchGiftDataManager.Core/Classes/WCManager/Wondercard.cs b/SwitchGiftDataManager.Core/Classes/WCManager/Wondercard.cs index 3ee434d..24e2a31 100644 --- a/SwitchGiftDataManager.Core/Classes/WCManager/Wondercard.cs +++ b/SwitchGiftDataManager.Core/Classes/WCManager/Wondercard.cs @@ -5,7 +5,6 @@ namespace SwitchGiftDataManager.Core; public abstract class Wondercard { - public static int GenOffset = 0x0F; protected const int MaxItemCount = 6; public Games Game { get; } @@ -22,8 +21,9 @@ public abstract class Wondercard WondercardSize.WB7 => Games.LGPE, WondercardSize.WC8 => Games.SWSH, WondercardSize.WB8 => Games.BDSP, - WondercardSize.WA8 when data[GenOffset] != 0 => Games.PLA, - WondercardSize.WC9 when data[GenOffset] == 0 => Games.SCVI, + WondercardSize.WA8 when data[0x0F] != 0 => Games.PLA, + WondercardSize.WC9 when data[0x0F] == 0 && data[0x2C0] == 0 => Games.SCVI, + WondercardSize.WA9 when data[0x2C0] != 0 => Games.ZA, _ => Games.None, }; Data = data.ToArray(); @@ -67,6 +67,7 @@ public abstract class Wondercard Games.BDSP => WondercardSize.WB8, Games.PLA => WondercardSize.WA8, Games.SCVI => WondercardSize.WC9, + Games.ZA => WondercardSize.WA9, _ => throw new ArgumentOutOfRangeException(nameof(game)), }; } diff --git a/SwitchGiftDataManager.Core/Enums/Enums.cs b/SwitchGiftDataManager.Core/Enums/Enums.cs index 8d9b402..1a8f57c 100644 --- a/SwitchGiftDataManager.Core/Enums/Enums.cs +++ b/SwitchGiftDataManager.Core/Enums/Enums.cs @@ -8,6 +8,7 @@ public enum Games : int BDSP = 3, PLA = 4, SCVI = 5, + ZA = 6, } public enum WCType @@ -23,6 +24,7 @@ public enum WondercardSize : ushort WB8 = 0x2DC, WA8 = 0x2C8, WC9 = 0x2C8, + WA9 = 0x2C8, } public enum GiftType7 : byte @@ -71,6 +73,15 @@ public enum GiftType9 : byte Clothing = 4, } +public enum GiftType9A : byte +{ + None = 0, + Pokemon = 1, + Item = 2, + BP = 3, + Clothing = 4, +} + public enum PIDType { RandomPID, diff --git a/SwitchGiftDataManager.Core/Resources/Items.txt b/SwitchGiftDataManager.Core/Resources/Items.txt index 2e11dbd..2784831 100644 --- a/SwitchGiftDataManager.Core/Resources/Items.txt +++ b/SwitchGiftDataManager.Core/Resources/Items.txt @@ -119,7 +119,7 @@ Shock Drive Burn Drive Chill Drive ??? -Pokémon Box Link (1) +Pokémon Box Link Medicine Pocket TM Case Candy Jar @@ -424,8 +424,8 @@ HM03 HM04 HM05 HM06 -HM07 (G4) -HM08 (G4) +??? +??? Explorer Kit Loot Sack Rule Book @@ -454,18 +454,18 @@ Oak’s Letter Lunar Feather Member Card Azure Flute -S.S. Ticket (HG/SS) +S.S. Ticket Contest Pass Magma Stone -Parcel (HG/SS) +Parcel Coupon 1 Coupon 2 Coupon 3 -Storage Key (DPPt) -Secret Medicine (G4) +Storage Key +Secret Medicine Vs. Recorder Gracidea -Secret Key (Pt) +Secret Key Apricorn Box Unown Report Berry Pots @@ -473,11 +473,11 @@ Dowsing Machine Blue Card Slowpoke Tail Clear Bell -Card Key (HG/SS) -Basement Key (HG/SS) +Card Key +Basement Key Squirt Bottle Red Scale -Lost Item (HG/SS) +Lost Item Pass Machine Part Silver Feather @@ -619,15 +619,15 @@ Dark Stone TM93 TM94 TM95 -Xtransceiver (M) +Xtransceiver ??? Gram 1 Gram 2 Gram 3 -Xtransceiver (F) +Xtransceiver Medal Box DNA Splicers -DNA Splicers (2) +DNA Splicers Permit Oval Charm Shiny Charm @@ -635,7 +635,7 @@ Plasma Card Grubby Hanky Colress Machine Dropped Item -Dropped Item (2) +Dropped Item Reveal Glass Weakness Policy Assault Vest @@ -692,7 +692,7 @@ TM96 TM97 TM98 TM99 -TM100 (G6-8) +TM100 Power Plant Pass Mega Ring Intriguing Stone @@ -705,14 +705,14 @@ Adventure Guide Strange Souvenir Lens Case Makeup Bag -Travel Trunk (2) +Travel Trunk Lumiose Galette Shalour Sable Jaw Fossil Sail Fossil Looker Ticket -Bike (2) -Holo Caster (2) +Bike +Holo Caster Fairy Gem Mega Charm Mega Glove @@ -721,24 +721,24 @@ Acro Bike Wailmer Pail Devon Parts Soot Sack -Basement Key (OR/AS) +Basement Key Pokéblock Kit Letter Eon Ticket Scanner Go-Goggles -Meteorite (1) +Meteorite Key to Room 1 Key to Room 2 Key to Room 4 Key to Room 6 -Storage Key (OR/AS) +Storage Key Devon Scope -S.S. Ticket (OR/AS) +S.S. Ticket HM07 Devon Scuba Gear Contest Costume -Contest Costume (2) +Contest Costume Magma Suit Aqua Suit Pair of Tickets @@ -749,7 +749,7 @@ Mega Anchor Mega Stickpin Mega Tiara Mega Anklet -Meteorite (2) +Meteorite Swampertite Sceptilite Sablenite @@ -769,8 +769,8 @@ Cameruptite Lopunnite Salamencite Beedrillite -Meteorite (3) -Meteorite (4) +Meteorite +Meteorite Key Stone Meteorite Shard Eon Flute @@ -805,42 +805,42 @@ Aloraichium Z Snorlium Z Eevium Z Mewnium Z -Normalium Z [Z] -Firium Z [Z] -Waterium Z [Z] -Electrium Z [Z] -Grassium Z [Z] -Icium Z [Z] -Fightinium Z [Z] -Poisonium Z [Z] -Groundium Z [Z] -Flyinium Z [Z] -Psychium Z [Z] -Buginium Z [Z] -Rockium Z [Z] -Ghostium Z [Z] -Dragonium Z [Z] -Darkinium Z [Z] -Steelium Z [Z] -Fairium Z [Z] -Pikanium Z [Z] -Decidium Z [Z] -Incinium Z [Z] -Primarium Z [Z] -Tapunium Z [Z] -Marshadium Z [Z] -Aloraichium Z [Z] -Snorlium Z [Z] -Eevium Z [Z] -Mewnium Z [Z] -Pikashunium Z [Z] +Normalium Z +Firium Z +Waterium Z +Electrium Z +Grassium Z +Icium Z +Fightinium Z +Poisonium Z +Groundium Z +Flyinium Z +Psychium Z +Buginium Z +Rockium Z +Ghostium Z +Dragonium Z +Darkinium Z +Steelium Z +Fairium Z +Pikanium Z +Decidium Z +Incinium Z +Primarium Z +Tapunium Z +Marshadium Z +Aloraichium Z +Snorlium Z +Eevium Z +Mewnium Z +Pikashunium Z Pikashunium Z ??? ??? ??? ??? Forage Bag -Fishing Rod (SM) +Fishing Rod Professor’s Mask Festival Ticket Sparkling Stone @@ -871,12 +871,12 @@ Golden Pinap Berry ??? ??? Secret Key -S.S. Ticket (GP/GE) +S.S. Ticket Silph Scope Parcel Card Key Gold Teeth -Lift Key (GP/GE) +Lift Key Terrain Extender Protective Pads Electric Seed @@ -892,8 +892,8 @@ Gold Leaf Silver Leaf Polished Mud Ball Tropical Shell -Leaf Letter (GP) -Leaf Letter (GE) +Leaf Letter +Leaf Letter Small Bouquet ??? ??? @@ -925,12 +925,12 @@ Ultranecrozium Z Mimikium Z Lycanium Z Kommonium Z -Solganium Z [Z] -Lunalium Z [Z] -Ultranecrozium Z [Z] -Mimikium Z [Z] -Lycanium Z [Z] -Kommonium Z [Z] +Solganium Z +Lunalium Z +Ultranecrozium Z +Mimikium Z +Lycanium Z +Kommonium Z Z-Power Ring Pink Petal Orange Petal @@ -943,8 +943,8 @@ Rainbow Flower Surge Badge N-Solarizer N-Lunarizer -N-Solarizer (2) -N-Lunarizer (2) +N-Solarizer +N-Lunarizer Ilima’s Normalium Z Left Poké Ball Roto Hatch @@ -1073,13 +1073,13 @@ Magmar Candy ??? ??? Endorsement -Pokémon Box Link (2) +Pokémon Box Link Wishing Star Dynamax Band ??? ??? -Fishing Rod (SW/SH) -Rotom Bike (1) +Fishing Rod +Rotom Bike ??? ??? Sausages @@ -1264,7 +1264,7 @@ Instant Noodles Precooked Burger Gigantamix Wishing Chip -Rotom Bike (2) +Rotom Bike Catching Charm ??? Old Letter @@ -1583,13 +1583,13 @@ Galarica Twig Galarica Cuff Style Card Armor Pass -Rotom Bike (3) -Rotom Bike (4) +Rotom Bike +Rotom Bike Exp. Charm Armorite Ore Mark Charm -Reins of Unity (1) -Reins of Unity (2) +Reins of Unity +Reins of Unity Galarica Wreath Legendary Clue 1 Legendary Clue 2 @@ -1605,7 +1605,7 @@ Shaderoot Carrot Dynite Ore Carrot Seeds Ability Patch -Reins of Unity (3) +Reins of Unity Time Balm Space Balm Mysterious Balm @@ -1614,13 +1614,13 @@ Hometown Muffin Apricorn Jubilife Muffin Aux Powerguard -Dire Hit (LA) +Dire Hit Choice Dumpling Twice-Spiced Radish Swap Snack Caster Fern Seed of Mastery -Poké Ball (-) +Poké Ball ??? Eternal Ice Uxie’s Claw @@ -1638,44 +1638,44 @@ Crunchy Salt Wood King’s Leaf Marsh Balm -Poké Ball (~) -Great Ball (~) -Ultra Ball (~) -Feather Ball (~) -Pokéshi Doll (~) +Poké Ball +Great Ball +Ultra Ball +Feather Ball +Pokéshi Doll ??? -Smoke Bomb (~) -Scatter Bang (~) -Sticky Glob (~) -Star Piece (~) -Mushroom Cake (~) +Smoke Bomb +Scatter Bang +Sticky Glob +Star Piece +Mushroom Cake Bugwort -Honey Cake (~) -Grain Cake (~) -Bean Cake (~) -Salt Cake (~) -Potion (~) -Super Potion (~) -Hyper Potion (~) -Max Potion (~) -Full Restore (~) -Remedy (~) -Fine Remedy (~) -Superb Remedy (~) -Old Gateau (~) -Jubilife Muffin (~) -Full Heal (~) -Revive (~) -Max Revive (~) -Max Ether (~) -Max Elixir (~) -Stealth Spray (~) +Honey Cake +Grain Cake +Bean Cake +Salt Cake +Potion +Super Potion +Hyper Potion +Max Potion +Full Restore +Remedy +Fine Remedy +Superb Remedy +Old Gateau +Jubilife Muffin +Full Heal +Revive +Max Revive +Max Ether +Max Elixir +Stealth Spray ??? -Aux Power (~) -Aux Guard (~) -Dire Hit (~) -Aux Evasion (~) -Aux Powerguard (~) +Aux Power +Aux Guard +Dire Hit +Aux Evasion +Aux Powerguard Forest Balm Iron Chunk ??? @@ -1687,7 +1687,7 @@ Ball of Mud Pop Pod Sootfoot Root Spoiled Apricorn -Snowball (LA) +Snowball Sticky Glob Black Augurite Peat Block @@ -1708,9 +1708,9 @@ Tempting Charm T Tempting Charm Y Candy Truffle Cake-Lure Base -Poké Ball (LA) -Great Ball (LA) -Ultra Ball (LA) +Poké Ball +Great Ball +Ultra Ball Feather Ball ??? ??? @@ -1727,9 +1727,9 @@ Grain Cake Bean Cake Mushroom Cake Salt Cake -Swap Snack (~) -Choice Dumpling (~) -Twice-Spiced Radish (~) +Swap Snack +Choice Dumpling +Twice-Spiced Radish Survival Charm R Survival Charm B Survival Charm P @@ -1746,12 +1746,12 @@ Basculegion Food Old Journal Wing Ball Jet Ball -Heavy Ball (LA) +Heavy Ball Leaden Ball Gigaton Ball -Wing Ball (~) -Jet Ball (~) -Heavy Ball (~) +Wing Ball +Jet Ball +Heavy Ball Hopo Berry Superb Remedy Aux Power @@ -1761,13 +1761,13 @@ Grit Dust Grit Gravel Grit Pebble Grit Rock -Secret Medicine (LA) +Secret Medicine Tempting Charm R -Lost Satchel (1) -Lost Satchel (2) -Lost Satchel (3) -Lost Satchel (4) -Lost Satchel (5) +Lost Satchel +Lost Satchel +Lost Satchel +Lost Satchel +Lost Satchel ??? Origin Ball ??? @@ -1781,8 +1781,8 @@ Griseous Core Blank Plate ??? Crafting Kit -Leaden Ball (~) -Gigaton Ball (~) +Leaden Ball +Gigaton Ball Strange Ball Pokédex Old Verse 1 @@ -1832,8 +1832,8 @@ Sandwich Koraidon’s Poké Ball Miraidon’s Poké Ball Tera Orb -Scarlet Book (1) -Violet Book (1) +Scarlet Book +Violet Book Kofu’s Wallet @@ -2311,24 +2311,24 @@ TM229 Picnic Set -Academy Bottle (1) -Academy Bottle (2) +Academy Bottle +Academy Bottle Polka-Dot Bottle Striped Bottle Diamond Bottle -Academy Cup (1) -Academy Cup (2) +Academy Cup +Academy Cup Striped Cup Polka-Dot Cup Flower Pattern Cup -Academy Tablecloth (1) -Academy Tablecloth (2) +Academy Tablecloth +Academy Tablecloth Whimsical Tablecloth Leafy Tablecloth Spooky Tablecloth -Academy Ball (1) -Academy Ball (2) +Academy Ball +Academy Ball Marill Ball Yarn Ball Cyber Ball @@ -2416,8 +2416,8 @@ Genius Mochi Clever Mochi Swift Mochi Simple Chairs -Academy Chairs (SL) -Academy Chairs (VL) +Academy Chairs +Academy Chairs Whimsical Chairs Leafy Chairs Spooky Chairs @@ -2553,6 +2553,83 @@ Blueberry Tablecloth Blueberry Chairs Synchro Machine Meteorite -Scarlet Book (2) -Violet Book (2) +Scarlet Book +Violet Book Briar’s Book +Seed of Mastery +Clefablite +Victreebelite +Starminite +Dragoninite +Meganiumite +Feraligite +Skarmorite +Froslassite + + +Emboarite +Excadrite +Scolipite +Scraftinite +Eelektrossite +Chandelurite +Chesnaughtite +Delphoxite +Greninjite +Pyroarite +Floettite +Malamarite +Barbaracite +Dragalgite +Hawluchanite +Zygardite +Drampanite + +Falinksite +Key to Room 202 +Super Lumiose Galette +Lab Key Card A +Lab Key Card B +Lab Key Card C + + +Pebble +Cherished Ring +Autographed Plush +Tasty Trash +Revitalizing Twig +Lida’s Things + + + + + + + + + + + + + + + + + +Mega Shard +Colorful Screw +Red Canari Plush +Red Canari Plush +Red Canari Plush +Gold Canari Plush +Gold Canari Plush +Gold Canari Plush +Pink Canari Plush +Pink Canari Plush +Pink Canari Plush +Green Canari Plush +Green Canari Plush +Green Canari Plush +Blue Canari Plush +Blue Canari Plush +Blue Canari Plush \ No newline at end of file diff --git a/SwitchGiftDataManager.WinForm/MainWindow.Designer.cs b/SwitchGiftDataManager.WinForm/MainWindow.Designer.cs index e075774..3c71ef2 100644 --- a/SwitchGiftDataManager.WinForm/MainWindow.Designer.cs +++ b/SwitchGiftDataManager.WinForm/MainWindow.Designer.cs @@ -62,6 +62,7 @@ partial class MainWindow ToolsToolStripMenu = new ToolStripMenuItem(); MenuItemMGDB = new ToolStripMenuItem(); toolTipRedemptionMethod = new ToolTip(components); + BtnZA = new Button(); GrpBCAT.SuspendLayout(); GrpContent.SuspendLayout(); ContextMenuStripWC.SuspendLayout(); @@ -76,7 +77,7 @@ partial class MainWindow BtnLGPE.FlatStyle = FlatStyle.Flat; BtnLGPE.Location = new Point(5, 37); BtnLGPE.Name = "BtnLGPE"; - BtnLGPE.Size = new Size(136, 60); + BtnLGPE.Size = new Size(111, 60); BtnLGPE.TabIndex = 0; BtnLGPE.TabStop = false; BtnLGPE.Text = "LGPE"; @@ -89,9 +90,9 @@ partial class MainWindow BtnSWSH.AccessibleName = ""; BtnSWSH.Cursor = Cursors.Hand; BtnSWSH.FlatStyle = FlatStyle.Flat; - BtnSWSH.Location = new Point(147, 37); + BtnSWSH.Location = new Point(122, 37); BtnSWSH.Name = "BtnSWSH"; - BtnSWSH.Size = new Size(136, 60); + BtnSWSH.Size = new Size(111, 60); BtnSWSH.TabIndex = 1; BtnSWSH.TabStop = false; BtnSWSH.Text = "SWSH"; @@ -104,9 +105,9 @@ partial class MainWindow BtnBDSP.AccessibleName = ""; BtnBDSP.Cursor = Cursors.Hand; BtnBDSP.FlatStyle = FlatStyle.Flat; - BtnBDSP.Location = new Point(289, 37); + BtnBDSP.Location = new Point(239, 37); BtnBDSP.Name = "BtnBDSP"; - BtnBDSP.Size = new Size(136, 60); + BtnBDSP.Size = new Size(111, 60); BtnBDSP.TabIndex = 2; BtnBDSP.TabStop = false; BtnBDSP.Text = "BDSP"; @@ -119,9 +120,9 @@ partial class MainWindow BtnSCVI.AccessibleName = ""; BtnSCVI.Cursor = Cursors.Hand; BtnSCVI.FlatStyle = FlatStyle.Flat; - BtnSCVI.Location = new Point(573, 37); + BtnSCVI.Location = new Point(473, 37); BtnSCVI.Name = "BtnSCVI"; - BtnSCVI.Size = new Size(136, 60); + BtnSCVI.Size = new Size(111, 60); BtnSCVI.TabIndex = 3; BtnSCVI.TabStop = false; BtnSCVI.Text = "SCVI"; @@ -134,9 +135,9 @@ partial class MainWindow BtnPLA.AccessibleName = ""; BtnPLA.Cursor = Cursors.Hand; BtnPLA.FlatStyle = FlatStyle.Flat; - BtnPLA.Location = new Point(431, 37); + BtnPLA.Location = new Point(356, 37); BtnPLA.Name = "BtnPLA"; - BtnPLA.Size = new Size(136, 60); + BtnPLA.Size = new Size(111, 60); BtnPLA.TabIndex = 4; BtnPLA.TabStop = false; BtnPLA.Text = "PLA"; @@ -148,7 +149,6 @@ partial class MainWindow ListBoxWC.AllowDrop = true; ListBoxWC.DrawMode = DrawMode.OwnerDrawFixed; ListBoxWC.FormattingEnabled = true; - ListBoxWC.ItemHeight = 20; ListBoxWC.Location = new Point(7, 96); ListBoxWC.Name = "ListBoxWC"; ListBoxWC.Size = new Size(214, 304); @@ -196,7 +196,7 @@ partial class MainWindow GrpBCAT.Enabled = false; GrpBCAT.Location = new Point(5, 103); GrpBCAT.Name = "GrpBCAT"; - GrpBCAT.Size = new Size(704, 409); + GrpBCAT.Size = new Size(696, 409); GrpBCAT.TabIndex = 8; GrpBCAT.TabStop = false; GrpBCAT.Text = "BCAT Manager"; @@ -404,7 +404,7 @@ partial class MainWindow MenuStrip.Items.AddRange(new ToolStripItem[] { ToolsToolStripMenu }); MenuStrip.Location = new Point(0, 0); MenuStrip.Name = "MenuStrip"; - MenuStrip.Size = new Size(715, 28); + MenuStrip.Size = new Size(709, 28); MenuStrip.TabIndex = 9; MenuStrip.Text = "menuStrip1"; // @@ -432,12 +432,28 @@ partial class MainWindow toolTipRedemptionMethod.ToolTipIcon = ToolTipIcon.Info; toolTipRedemptionMethod.ToolTipTitle = "Redemption Date"; // + // BtnZA + // + BtnZA.AccessibleDescription = ""; + BtnZA.AccessibleName = ""; + BtnZA.Cursor = Cursors.Hand; + BtnZA.FlatStyle = FlatStyle.Flat; + BtnZA.Location = new Point(590, 37); + BtnZA.Name = "BtnZA"; + BtnZA.Size = new Size(111, 60); + BtnZA.TabIndex = 10; + BtnZA.TabStop = false; + BtnZA.Text = "ZA"; + BtnZA.UseVisualStyleBackColor = true; + BtnZA.Click += BtnZA_Click; + // // MainWindow // AllowDrop = true; AutoScaleDimensions = new SizeF(8F, 20F); AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(715, 518); + ClientSize = new Size(709, 518); + Controls.Add(BtnZA); Controls.Add(MenuStrip); Controls.Add(GrpBCAT); Controls.Add(BtnPLA); @@ -498,4 +514,5 @@ partial class MainWindow private Label lblRedemptionMethod; private ToolTip toolTipRedemptionMethod; private ComboBox cmbRedemptionMethod; + private Button BtnZA; } \ No newline at end of file diff --git a/SwitchGiftDataManager.WinForm/MainWindow.cs b/SwitchGiftDataManager.WinForm/MainWindow.cs index 4ec677d..1e93974 100644 --- a/SwitchGiftDataManager.WinForm/MainWindow.cs +++ b/SwitchGiftDataManager.WinForm/MainWindow.cs @@ -17,6 +17,7 @@ public partial class MainWindow : Form private BCATManager PackageBDSP = new(Games.BDSP); private BCATManager PackagePLA = new(Games.PLA); private BCATManager PackageSCVI = new(Games.SCVI); + private BCATManager PackageZA = new(Games.ZA); private List Duplicated = new List(); public MainWindow() @@ -59,12 +60,14 @@ public partial class MainWindow : Form BtnBDSP.Enabled = true; BtnPLA.Enabled = true; BtnSCVI.Enabled = true; + BtnZA.Enabled = true; BtnLGPE.Font = new Font(BtnLGPE.Font.Name, BtnLGPE.Font.Size, FontStyle.Regular); BtnSWSH.Font = new Font(BtnSWSH.Font.Name, BtnSWSH.Font.Size, FontStyle.Regular); BtnBDSP.Font = new Font(BtnBDSP.Font.Name, BtnBDSP.Font.Size, FontStyle.Regular); BtnPLA.Font = new Font(BtnPLA.Font.Name, BtnPLA.Font.Size, FontStyle.Regular); BtnSCVI.Font = new Font(BtnSCVI.Font.Name, BtnSCVI.Font.Size, FontStyle.Regular); + BtnZA.Font = new Font(BtnZA.Font.Name, BtnZA.Font.Size, FontStyle.Regular); } private void EditFileFilter() @@ -76,6 +79,7 @@ public partial class MainWindow : Form Games.BDSP => "wb8 files (*.wb8)|*.wb8|All files (*.*)|*.*", Games.PLA => "wa8 files (*.wa8)|*.wa8|All files (*.*)|*.*", Games.SCVI => "wc9 files (*.wc9)|*.wc9|All files (*.*)|*.*", + Games.ZA => "wa9 files (*.wa9)|*.wa9|All files (*.*)|*.*", _ => "All files (*.*)|*.*", }; } @@ -89,6 +93,7 @@ public partial class MainWindow : Form Games.BDSP => BtnBDSP, Games.PLA => BtnPLA, Games.SCVI => BtnSCVI, + Games.ZA => BtnZA, _ => throw new ArgumentOutOfRangeException(), }; EditSelectedButton(btn); @@ -112,6 +117,7 @@ public partial class MainWindow : Form Games.BDSP => PackageBDSP.GetListNames(), Games.PLA => PackagePLA.GetListNames(), Games.SCVI => PackageSCVI.GetListNames(), + Games.ZA => PackageZA.GetListNames(), _ => throw new ArgumentOutOfRangeException(), }; @@ -144,6 +150,7 @@ public partial class MainWindow : Form Games.BDSP => PackageBDSP, Games.PLA => PackagePLA, Games.SCVI => PackageSCVI, + Games.ZA => PackageZA, _ => throw new ArgumentOutOfRangeException(), }; } @@ -190,6 +197,8 @@ public partial class MainWindow : Form private void BtnSCVI_Click(object sender, EventArgs e) => ChangeGame(Games.SCVI); + private void BtnZA_Click(object sender, EventArgs e) => ChangeGame(Games.ZA); + private void BtnSave_Click(object sender, EventArgs e) { this.Enabled = false; diff --git a/SwitchGiftDataManager.WinForm/MainWindow.resx b/SwitchGiftDataManager.WinForm/MainWindow.resx index d6ed672..b9d049d 100644 --- a/SwitchGiftDataManager.WinForm/MainWindow.resx +++ b/SwitchGiftDataManager.WinForm/MainWindow.resx @@ -1,7 +1,7 @@