Compatibility with Legends ZA

This commit is contained in:
Manu 2025-10-27 17:26:14 +01:00
parent e872275c99
commit 81cf6514f8
11 changed files with 451 additions and 178 deletions

View File

@ -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();

View File

@ -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)),
};
}

View File

@ -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<uint, string> Clothing9A = new()
{
{ 0x2E1937, "Trench Coat and Pants Set (Beige)" },
};
}

View File

@ -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<byte> 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<OtherGift> GetItems()
{
List<OtherGift> 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();
}
}

View File

@ -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)),
};
}

View File

@ -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,

View File

@ -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 @@ Oaks 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
Professors 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
Ilimas 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
Uxies Claw
@ -1638,44 +1638,44 @@ Crunchy Salt
Wood
Kings 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
Koraidons Poké Ball
Miraidons Poké Ball
Tera Orb
Scarlet Book (1)
Violet Book (1)
Scarlet Book
Violet Book
Kofus 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
Briars 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
Lidas 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

View File

@ -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;
}

View File

@ -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<ushort> Duplicated = new List<ushort>();
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;

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Microsoft ResX Schema
Version 2.0
@ -18,7 +18,7 @@
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing"">Blue</data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
@ -48,7 +48,7 @@
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter

View File

@ -87,9 +87,9 @@ public partial class MgdbForm : Form
var swshPath = Path.Combine(Path.Combine(genPath, "Gen 8"), "SwSh");
Directory.Delete(Path.Combine(swshPath, "Wild Area Events"), true);
var gen9Path = Path.Combine(genPath, "Gen 9");
Directory.Delete(Path.Combine(gen9Path, "Raid Events"), true);
Directory.Delete(Path.Combine(gen9Path, "Outbreak Events"), true);
var svPath = Path.Combine(genPath, "Gen 9", "SV");
Directory.Delete(Path.Combine(svPath, "Raid Events"), true);
Directory.Delete(Path.Combine(svPath, "Outbreak Events"), true);
Directory.Move(tmpMgbdPath, mgdbPath);
Directory.Delete(path, true);