Prepare for public release

This commit is contained in:
Manu 2022-11-06 20:15:35 +01:00
parent 74b5201d61
commit ed6f28be1e
14 changed files with 117 additions and 20 deletions

1
.gitignore vendored
View File

@ -1,4 +1,5 @@
.git
.vs
.vscode
**/bin
**/obj

View File

@ -5,39 +5,43 @@ This tool aims to make past Mystery Gift event contents back again in all the Po
Since those games won't allow event injection in the SAV file, this tool creates a forged BCAT package, injectable with homebrews like [JKSV](https://github.com/J-D-K/JKSV/releases).
This does not involve hacking the game ROM nor hacking the game SAV.
### Compatible files:
### Compatible files
* Let's Go Pikachu and Let's Go Eevee wondercard full files (.wb7full)
* Sword and Shield wondercard files (.wc8)
* Brilliant Diamond and Shining Pearl wondercard files (.wb8)
* Legends Arceus wondercard files (.wa8)
* BCAT wondercard files, either with mutiple or single wondercards (no file format extension)
### Compatible games:
### Compatible games
* Pokémon Let's Go Pikachu and Eevee
* Pokémon Sword and Shield
* Pokémon Brilliant Diamond and Shining Pearl
* Pokémon Legends Arceus
* A support for Pokémon Scarlet and Violet is planned for the future - no guarantee here - don't ask for eta.
* Support for Pokémon Scarlet and Violet is planned for the future - no guarantee here - don't ask for eta.
## Disclosure
Neither I nor the Project Pokémon staff takes any responsibility for possible adverse outcomes or bans due to the use of this tool. Use at your own discretion.
**N.B:** Some BCAT files contain sensible console-specific informations, which you should keep safe. Don't share your BCAT to others!
## Usage
This paragraph refers to the Windows Form app. The Command Line app usage is similar and should be fairly intuitive.
* Ensure to have the required [.NET 6.0 runtimes](https://dotnet.microsoft.com/en-us/download/dotnet/6.0) correctly installed
* Ensure you have the required [.NET 6.0 runtimes](https://dotnet.microsoft.com/en-us/download/dotnet/6.0) correctly installed
* Dump your game's BCAT with [JKSV](https://github.com/J-D-K/JKSV/releases) and keep some copies somewhere safe
* Open the tool and select your game of choice
* Import wondercard files of your choice (by drag & drop or by clicking the `Open Files` button)
* Eventually edit the wondercard id (WCID) if you have duplicated WCs and click `Apply`
* Click the `Save as BCAT Package` button and browse to your dumped BCAT
* A folder called "Forged_BCAT_{Game}" should appear next to your dumped BCAT
* Restore the Forged Bcat with JKSV and enjoy the old events
* Restore the Forged Bcat with JKSV
* To redeem the old fashion events, open your game -> Menu -> Mystery Gift -> redeem via Internet
* When you're done, restore your original BCAT package with JKSV (not doing so may cause sync issues)
**N.B**: BCAT Sync usually occurs between 12:00 AM (UTC) and 01:00 AM (UTC). I strongly suggest to not follow this procedure during that timeframe to avoid a desync.
If you experience a desync, download the latest BCAT for your game from my [bcat_updates](https://github.com/Manu098vm/bcat_updates) repo or from [citrusbolt](https://github.com/citrusbolt)'s [website](http://citrusbolt.net/bcat/) and add the missing files to your dumped BCAT, then restore it with JKSV.
**N.B**: BCAT Sync usually occurs between 12:00 AM (UTC) and 01:00 AM (UTC). I suggest to not follow this procedure during that timeframe to avoid a desync.
If you experience a desync, follow one of these methods to resync:
* Open JKSV, select BCAT, hover over your game and press X to open the menu, then click `Reset Save Data`.
* Download the latest BCAT for your game from my [bcat_updates](https://github.com/Manu098vm/bcat_updates) repo or from [citrusbolt](https://github.com/citrusbolt)'s [website](http://citrusbolt.net/bcat/) and add the missing files to your dumped BCAT, then restore it with JKSV.
If you find any bug or you need support, please write in the relevant topic in the Project Pokémon forums.
If you find any bug or you need support, please write in the [relevant topic in the Project Pokémon forums](https://projectpokemon.org/home/forums/topic/62491-switch-gift-data-manager-import-wondercards-into-switch-games-by-faking-bcat-packages/).
Alternatively, feel free to contact me on Discord by DMs (SkyLink98#5946 - **only for bug reports**) or in my [server](https://discord.gg/F9nMfvw9sS).
## Building

View File

@ -20,13 +20,13 @@ namespace SwitchGiftDataManager.CommandLine
Log(msg);
Games game = (Games)int.Parse(Console.ReadLine()!);
if(game is Games.None || game > Games.SCVI)
if (game is Games.None || game > Games.SCVI)
{
Log("Invalid input. Aborted.");
Console.ReadKey();
return;
}
else if(game is Games.SCVI)
else if (game is Games.SCVI)
{
Log("Scarlet and Violet are still not supported by this program. Please wait patiently.");
Console.ReadKey();
@ -44,7 +44,7 @@ namespace SwitchGiftDataManager.CommandLine
if (File.Exists(path))
bcat.TryAddWondercards(File.ReadAllBytes(path));
else if (CheckValidPath(path))
foreach(var file in Directory.GetFiles(path))
foreach (var file in Directory.GetFiles(path))
if (!bcat.TryAddWondercards(File.ReadAllBytes(file)))
Log($"{file} could not be loaded.");
@ -58,7 +58,7 @@ namespace SwitchGiftDataManager.CommandLine
bcat.Sort();
Log($"{Environment.NewLine}Enter the source (full) path to your dumped BCAT:");
var sourcepath = Console.ReadLine()!;
if(!CheckValidBcatPath(sourcepath))
if (!CheckValidBcatPath(sourcepath))
{
Log("Not a valid BCAT folder path. Aborted.");
Console.ReadKey();
@ -74,7 +74,7 @@ namespace SwitchGiftDataManager.CommandLine
return;
}
if (game is not Games.LGPE)
if (game is not (Games.LGPE or Games.BDSP))
{
msg = $"{Environment.NewLine}Select a build option:{Environment.NewLine}{Environment.NewLine}" +
$"1 - Merge as one file{Environment.NewLine}" +
@ -82,7 +82,12 @@ namespace SwitchGiftDataManager.CommandLine
Log(msg);
}
var opt = game is not Games.LGPE ? int.Parse(Console.ReadLine()!) : 2;
var opt = game switch {
Games.LGPE => 2,
Games.BDSP => 1,
_ => int.Parse(Console.ReadLine()!),
};
if(opt < 1 || opt > 2)
{
Log("Invalid input. Aborted.");

View File

@ -0,0 +1,12 @@
{
"profiles": {
"SwitchGiftDataManager.CommandLine": {
"commandName": "Project",
"remoteDebugEnabled": false
},
"WSL": {
"commandName": "WSL2",
"distributionName": ""
}
}
}

View File

@ -2,7 +2,7 @@
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net6.0-windows</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<Authors>Manu098vm</Authors>
@ -14,12 +14,17 @@
<PackageProjectUrl>https://github.com/Manu098vm/Switch-Gift-Data-Manager</PackageProjectUrl>
<RepositoryUrl>https://github.com/Manu098vm/Switch-Gift-Data-Manager</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<Configurations>Debug;Release;WSL</Configurations>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DebugType>embedded</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='WSL|AnyCPU'">
<DebugType>embedded</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<DebugType>embedded</DebugType>
</PropertyGroup>

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DebuggerFlavor>ProjectDebugger</DebuggerFlavor>
</PropertyGroup>
<PropertyGroup>
<ActiveDebugProfile>SwitchGiftDataManager.CommandLine</ActiveDebugProfile>
</PropertyGroup>
</Project>

View File

@ -133,7 +133,7 @@ namespace SwitchGiftDataManager.Core
if (WCList is not null && WCList.Count > 0)
foreach (var wc in WCList)
{
var str = wc.Type!.ToString()!.Equals("Pokemon") ? ((PokemonGift)wc.Content!).GetSpeciesName() : ((List<OtherGift>)wc.Content!)[0].Type!.ToString()!;
var str = wc.Type!.ToString()!.Equals("Pokemon") ? ((PokemonGift)wc.Content!).GetSpeciesName() : wc.Type!.ToString()!;
list.Add($"{Game} #{wc.WCID}: {str}");
}
return list;
@ -148,7 +148,7 @@ namespace SwitchGiftDataManager.Core
var el4 = "";
var el5 = "";
if (WCList is not null && WCList.Count > 0 && WCList.Count >= index - 1)
if (WCList is not null && WCList.Count > 0 && WCList.Count >= index)
{
var wc = WCList.ElementAt(index);
wcid = wc.WCID.ToString();

View File

@ -14,12 +14,17 @@
<PackageProjectUrl>https://github.com/Manu098vm/Switch-Gift-Data-Manager</PackageProjectUrl>
<RepositoryUrl>https://github.com/Manu098vm/Switch-Gift-Data-Manager</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<Configurations>Debug;Release;WSL</Configurations>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DebugType>embedded</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='WSL|AnyCPU'">
<DebugType>embedded</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<DebugType>embedded</DebugType>
</PropertyGroup>

View File

@ -171,7 +171,14 @@ namespace SwitchGiftDataManager.WinForm
MessageBox.Show("Scarlet and Violet features still not available.");
}
private void BtnSave_Click(object sender, EventArgs e) => new SaveWindow(GetCurrentList(), CurrentGame).Show();
private void BtnSave_Click(object sender, EventArgs e)
{
this.Enabled = false;
var saveForm = new SaveWindow(GetCurrentList(), CurrentGame);
saveForm.FormClosed += (s, e) => this.Enabled = true;
saveForm.Location = this.Location;
saveForm.Show();
}
private void BtnApply_Click(object sender, EventArgs e)
{

View File

@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace SwitchGiftDataManager.WinForm.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.3.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}

View File

@ -0,0 +1,6 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
</SettingsFile>

View File

@ -172,6 +172,7 @@
this.MinimizeBox = false;
this.Name = "SaveWindow";
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
this.Text = "Save BCAT Package";
this.GrpBuild.ResumeLayout(false);
this.GrpBuild.PerformLayout();
@ -180,7 +181,6 @@
this.groupBox2.ResumeLayout(false);
this.groupBox2.PerformLayout();
this.ResumeLayout(false);
}
#endregion

View File

@ -16,11 +16,13 @@ namespace SwitchGiftDataManager.WinForm
Package = bcat;
Game = game;
if(Game is Games.LGPE)
if (Game is Games.LGPE)
{
RadioUnique.Checked = true;
RadioMultiple.Enabled = false;
}
else if (Game is Games.BDSP)
RadioUnique.Enabled = false;
}
private void BtnCancel_Click(object sender, EventArgs e) => this.Close();

View File

@ -17,6 +17,7 @@
<Company>Project Pokémon</Company>
<PackageProjectUrl>https://github.com/Manu098vm/Switch-Gift-Data-Manager</PackageProjectUrl>
<RepositoryUrl>https://github.com/Manu098vm/Switch-Gift-Data-Manager</RepositoryUrl>
<Configurations>Debug;Release;WSL</Configurations>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
@ -24,6 +25,11 @@
<Optimize>True</Optimize>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='WSL|AnyCPU'">
<DebugType>embedded</DebugType>
<Optimize>True</Optimize>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<DebugType>embedded</DebugType>
</PropertyGroup>
@ -55,6 +61,11 @@
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Update="Properties\Settings.Designer.cs">
<DesignTimeSharedInput>True</DesignTimeSharedInput>
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
@ -65,6 +76,10 @@
</ItemGroup>
<ItemGroup>
<None Update="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<None Update="Resources\icon.png">
<Pack>True</Pack>
<PackagePath>\</PackagePath>