This commit is contained in:
2025-11-08 14:05:46 -07:00
parent 976150ab4b
commit 4c4e2622f0
17 changed files with 331 additions and 202 deletions

View File

@@ -1,3 +1,9 @@
Version 1.5.8 - 2025-11-08
* Update nuspec
* Update docs
* Minor changes
Version 1.5.7 - 2025-07-21
* Update repository info and related URLs

View File

@@ -1,5 +1,3 @@
# @PatchEmAll
### The Original Automated ROM Patcher
## Contributing
Let's work better together. We are looking to collaborate with like-minded people who want to contribute in any capacity. Collaboration is open to everyone and we need your help if you are a:
* Collector
@@ -22,4 +20,4 @@ Feel free to:
GitEmAll: [https://gitemall.devemall.int.eu.org/TommySalami/PatchEmAll](https://gitemall.devemall.int.eu.org/TommySalami/PatchEmAll "GitEmAll")
---
###### Copyright (c) 2016-2025 PatchEmAll - All Rights Reserved v2025-07-21-00
###### Copyright (c) 2016-2025 PatchEmAll - All Rights Reserved

View File

@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.5.7")]
[assembly: AssemblyFileVersion("1.5.7")]
[assembly: AssemblyVersion("1.5.8")]
[assembly: AssemblyFileVersion("1.5.8")]

View File

@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.5.7")]
[assembly: AssemblyFileVersion("1.5.7")]
[assembly: AssemblyVersion("1.5.8")]
[assembly: AssemblyFileVersion("1.5.8")]

View File

@@ -580,7 +580,7 @@
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
"AssemblyAsmDisplayName" = "8:PatchEmAll, Version=1.5.6.0, Culture=neutral, processorArchitecture=MSIL"
"AssemblyAsmDisplayName" = "8:PatchEmAll, Version=1.5.7.0, Culture=neutral, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_4C0F2A0B4C9B0B74687ADB49ADF7A58C"
@@ -1288,15 +1288,15 @@
{
"Name" = "8:Microsoft Visual Studio"
"ProductName" = "8:PatchEmAll"
"ProductCode" = "8:{2F487C4C-1C6B-4945-B9C5-E2F876A7A555}"
"PackageCode" = "8:{FF7179C4-C373-47C6-B58D-DCC216D69073}"
"ProductCode" = "8:{450DA261-4119-4EAD-B42B-59B7A76FDB5D}"
"PackageCode" = "8:{60F70314-491D-4CD2-837B-459745A58BCB}"
"UpgradeCode" = "8:{7036F923-824D-4931-AE8A-8971E40A9645}"
"AspNetVersion" = "8:4.0.30319.0"
"RestartWWWService" = "11:FALSE"
"RemovePreviousVersions" = "11:TRUE"
"DetectNewerInstalledVersion" = "11:TRUE"
"InstallAllUsers" = "11:FALSE"
"ProductVersion" = "8:1.5.7"
"ProductVersion" = "8:1.5.8"
"Manufacturer" = "8:PatchEmAll"
"ARPHELPTELEPHONE" = "8:"
"ARPHELPLINK" = "8:"

View File

@@ -1,130 +1,135 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<Import Project="..\packages\ILMerge.3.0.41\build\ILMerge.props" Condition="Exists('..\packages\ILMerge.3.0.41\build\ILMerge.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{D40C2F3F-E3A2-47EB-8EF3-9C2C707B4FFB}</ProjectGuid>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<OutputPath>bin\Debug\</OutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<OutputPath>bin\Release\</OutputPath>
</PropertyGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<ReleaseName>PatchEmAll</ReleaseName>
<ReleaseVersion>1.5.7</ReleaseVersion>
<ReleasePortableName>PatchEmAll-Portable</ReleasePortableName>
<ReleaseInstallerName>PatchEmAll-Installer</ReleaseInstallerName>
<ReleasePackageName>PatchEmAll-Package</ReleasePackageName>
<ReleaseSourceName>PatchEmAll-Source</ReleaseSourceName>
<ReleaseDLLName>PatchEmAll</ReleaseDLLName>
<ReleaseCLIName>PatchEmAll-CLI</ReleaseCLIName>
<ReleaseGUIName>PatchEmAll-GUI</ReleaseGUIName>
<PortableDir>$(OutputPath)Portable\</PortableDir>
<ILMergeDir>$(OutputPath)ILMerge\</ILMergeDir>
<PackageDir>$(OutputPath)Package\</PackageDir>
<InstallerDir>$(OutputPath)Installer\</InstallerDir>
<SourceDir>$(OutputPath)Source\</SourceDir>
<ReleasesDir>$(OutputPath)Releases\</ReleasesDir>
</PropertyGroup>
<Target Name="Build">
<CallTarget Targets="Clean" />
<CallTarget Condition="$(Configuration) == 'Release'" Targets="CreateILMergeFiles" />
<CallTarget Targets="CreatePortableFiles" />
<!-- <CallTarget Targets="CreateOptionsFile" /> -->
<CallTarget Targets="CreatePackageFiles" />
<CallTarget Targets="CreateInstallerFiles" />
<CallTarget Targets="CreateSourceFiles" />
<CallTarget Targets="CreateReleasesFiles" />
</Target>
<Target Name="Clean">
<RemoveDir Condition="$(Configuration) == 'Release'" Directories="$(ILMergeDir)" />
<MakeDir Condition="$(Configuration) == 'Release'" Directories="$(ILMergeDir)" />
<RemoveDir Directories="$(PortableDir)" />
<MakeDir Directories="$(PortableDir)" />
<RemoveDir Directories="$(PackageDir)" />
<MakeDir Directories="$(PackageDir)" />
<RemoveDir Directories="$(InstallerDir)" />
<MakeDir Directories="$(InstallerDir)" />
<RemoveDir Directories="$(SourceDir)" />
<MakeDir Directories="$(SourceDir)" />
<RemoveDir Directories="$(ReleasesDir)" />
<MakeDir Directories="$(ReleasesDir)" />
</Target>
<Target Name="CreateILMergeFiles">
<Exec Command="%22$(SolutionDir)packages\ILMerge.3.0.41\tools\net452\ILMerge.exe%22 /out:%22$(ILMergeDir)$(ReleaseCLIName).exe%22 %22$(SolutionDir)$(ReleaseCLIName)\bin\$(Configuration)\$(ReleaseCLIName).exe%22 %22$(SolutionDir)$(ReleaseCLIName)\bin\$(Configuration)\*.dll%22 /wildcards" />
<Exec Command="%22$(SolutionDir)packages\ILMerge.3.0.41\tools\net452\ILMerge.exe%22 /out:%22$(ILMergeDir)$(ReleaseGUIName).exe%22 %22$(SolutionDir)$(ReleaseGUIName)\bin\$(Configuration)\$(ReleaseGUIName).exe%22 %22$(SolutionDir)$(ReleaseGUIName)\bin\$(Configuration)\*.dll%22 /wildcards" />
</Target>
<Target Name="CreatePortableFiles">
<ItemGroup>
<MySourceBINs Condition="$(Configuration) == 'Debug'" Include="$(SolutionDir)$(ReleaseCLIName)\bin\$(Configuration)\**\*.*;$(SolutionDir)$(ReleaseGUIName)\bin\$(Configuration)\**\*.*;$(SolutionDir)$(ReleaseDLLName)\bin\$(Configuration)\**\*.*;" />
<MySourceBINs Condition="$(Configuration) == 'Release'" Include="$(ILMergeDir)\**\*.exe;" />
<MySourceBatches Include="$(SolutionDir)$(ReleaseCLIName)\Resources\Batches\**\*.*;" />
<MySourceBASHes Include="$(SolutionDir)$(ReleaseCLIName)\Resources\BASHes\**\*.*;" />
<MySourceDocs Include="$(SolutionDir)$(ReleaseDLLName)\Resources\Docs\**\*.txt;" />
<MySourceDats Include="$(SolutionDir)$(ReleaseDLLName)\Resources\Output\Dats\**\*.txt;" />
<MySourceLogs Include="$(SolutionDir)$(ReleaseDLLName)\Resources\Output\Logs\**\*.txt;" />
<MySourceOptions Include="$(SolutionDir)$(ReleaseDLLName)\Resources\Output\Options\**\*.txt;" />
<MySourcePatches Include="$(SolutionDir)$(ReleaseDLLName)\Resources\Output\Patches\**\*.txt;" />
<MySourceROMs Include="$(SolutionDir)$(ReleaseDLLName)\Resources\Output\ROMs\**\*.txt;" />
<MySourceXdeltas Include="$(SolutionDir)$(ReleaseDLLName)\Resources\Libs\**\*.exe;$(SolutionDir)$(ReleaseDLLName)\Resources\Output\Xdelta\**\*.*;" />
</ItemGroup>
<Copy SourceFiles="@(MySourceBINs)" DestinationFiles="@(MySourceBINs->'$(PortableDir)\%(RecursiveDir)%(Filename)%(Extension)')" />
<Copy SourceFiles="@(MySourceBatches)" DestinationFiles="@(MySourceBatches->'$(PortableDir)\Batches\%(RecursiveDir)%(Filename)%(Extension)')" />
<Copy SourceFiles="@(MySourceBASHes)" DestinationFiles="@(MySourceBASHes->'$(PortableDir)\BASHes\%(RecursiveDir)%(Filename)%(Extension)')" />
<Copy SourceFiles="@(MySourceDats)" DestinationFiles="@(MySourceDats->'$(PortableDir)\Dats\%(RecursiveDir)%(Filename)%(Extension)')" />
<Copy SourceFiles="@(MySourceDocs)" DestinationFiles="@(MySourceDocs->'$(PortableDir)\Docs\%(RecursiveDir)%(Filename)%(Extension)')" />
<Copy SourceFiles="@(MySourceLogs)" DestinationFiles="@(MySourceLogs->'$(PortableDir)\Logs\%(RecursiveDir)%(Filename)%(Extension)')" />
<Copy SourceFiles="@(MySourceOptions)" DestinationFiles="@(MySourceOptions->'$(PortableDir)\Options\%(RecursiveDir)%(Filename)%(Extension)')" />
<Copy SourceFiles="@(MySourcePatches)" DestinationFiles="@(MySourcePatches->'$(PortableDir)\Patches\%(RecursiveDir)%(Filename)%(Extension)')" />
<Copy SourceFiles="@(MySourceROMs)" DestinationFiles="@(MySourceROMs->'$(PortableDir)\ROMs\%(RecursiveDir)%(Filename)%(Extension)')" />
<Copy SourceFiles="@(MySourceXdeltas)" DestinationFiles="@(MySourceXdeltas->'$(PortableDir)\Xdelta\%(RecursiveDir)%(Filename)%(Extension)')" />
</Target>
<Target Name="CreateOptionsFile">
<Exec Command="$(PortableDir)$(ReleaseCLIName).exe -saveoptions" />
</Target>
<Target Name="CreatePackageFiles">
<Delete Files="$(PackageDir)$(ReleaseName).$(ReleaseVersion).nuget" />
<Exec Command="nuget pack %22$(SolutionDir)$(ReleaseDLLName)\$(ReleaseDLLName).csproj%22 -Properties Configuration=$(Configuration) -OutputDirectory $(PackageDir) -Version $(ReleaseVersion)" />
</Target>
<Target Name="CreateInstallerFiles">
<ItemGroup>
<MySourceInstallerFiles Condition="$(Configuration) == 'Debug'" Include="$(SolutionDir)$(ReleaseInstallerName)\bin\$(Configuration)\**\*.*" />
<MySourceInstallerFiles Condition="$(Configuration) == 'Release'" Include="$(SolutionDir)$(ReleaseInstallerName)\bin\$(Configuration)\**\*.*" />
</ItemGroup>
<Copy SourceFiles="@(MySourceInstallerFiles)" DestinationFiles="@(MySourceInstallerFiles->'$(InstallerDir)\%(RecursiveDir)%(Filename)%(Extension)')" />
</Target>
<Target Name="CreateSourceFiles">
<ItemGroup>
<MySourceSourceFiles Include="$(SolutionDir)**\*;" Exclude="$(SolutionDir)**\obj\**\*.*;$(SolutionDir)**\bin\**\*.*;$(SolutionDir)**\misc\**\*.*;$(SolutionDir)**\packages\**\*.*;$(SolutionDir)**\.git\**\*.*;$(SolutionDir)**\.vs\**\*.*;" />
</ItemGroup>
<Copy SourceFiles="@(MySourceSourceFiles)" DestinationFiles="@(MySourceSourceFiles->'$(SourceDir)\%(RecursiveDir)%(Filename)%(Extension)')" />
</Target>
<Target Name="CreateReleasesFiles">
<Delete Files="$(ReleasesDir)$(ReleasePortableName).$(ReleaseVersion).zip" />
<ZipDirectory SourceDirectory="$(PortableDir)" DestinationFile="$(ReleasesDir)$(ReleasePortableName).$(ReleaseVersion).zip" />
<Delete Files="$(ReleasesDir)$(ReleaseInstallerName).$(ReleaseVersion).zip" />
<ZipDirectory SourceDirectory="$(InstallerDir)" DestinationFile="$(ReleasesDir)$(ReleaseInstallerName).$(ReleaseVersion).zip" />
<Delete Files="$(ReleasesDir)$(ReleasePackageName).$(ReleaseVersion).zip" />
<ZipDirectory SourceDirectory="$(PackageDir)" DestinationFile="$(ReleasesDir)$(ReleasePackageName).$(ReleaseVersion).zip" />
<Delete Files="$(ReleasesDir)$(ReleaseSourceName).$(ReleaseVersion).zip" />
<ZipDirectory SourceDirectory="$(SourceDir)" DestinationFile="$(ReleasesDir)$(ReleaseSourceName).$(ReleaseVersion).zip" />
</Target>
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\ILMerge.3.0.41\build\ILMerge.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\ILMerge.3.0.41\build\ILMerge.props'))" />
</Target>
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<Import Project="..\packages\ILMerge.3.0.41\build\ILMerge.props" Condition="Exists('..\packages\ILMerge.3.0.41\build\ILMerge.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{D40C2F3F-E3A2-47EB-8EF3-9C2C707B4FFB}</ProjectGuid>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<OutputPath>bin\Debug\</OutputPath>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<OutputPath>bin\Release\</OutputPath>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<None Include="app.config" />
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<ReleaseName>PatchEmAll</ReleaseName>
<ReleaseVersion>1.5.8</ReleaseVersion>
<ReleasePortableName>PatchEmAll-Portable</ReleasePortableName>
<ReleaseInstallerName>PatchEmAll-Installer</ReleaseInstallerName>
<ReleasePackageName>PatchEmAll-Package</ReleasePackageName>
<ReleaseSourceName>PatchEmAll-Source</ReleaseSourceName>
<ReleaseDLLName>PatchEmAll</ReleaseDLLName>
<ReleaseCLIName>PatchEmAll-CLI</ReleaseCLIName>
<ReleaseGUIName>PatchEmAll-GUI</ReleaseGUIName>
<PortableDir>$(OutputPath)Portable\</PortableDir>
<ILMergeDir>$(OutputPath)ILMerge\</ILMergeDir>
<PackageDir>$(OutputPath)Package\</PackageDir>
<InstallerDir>$(OutputPath)Installer\</InstallerDir>
<SourceDir>$(OutputPath)Source\</SourceDir>
<ReleasesDir>$(OutputPath)Releases\</ReleasesDir>
</PropertyGroup>
<Target Name="Build">
<CallTarget Targets="Clean" />
<CallTarget Condition="$(Configuration) == 'Release'" Targets="CreateILMergeFiles" />
<CallTarget Targets="CreatePortableFiles" />
<!-- <CallTarget Targets="CreateOptionsFile" /> -->
<CallTarget Targets="CreatePackageFiles" />
<CallTarget Targets="CreateInstallerFiles" />
<CallTarget Targets="CreateSourceFiles" />
<CallTarget Targets="CreateReleasesFiles" />
</Target>
<Target Name="Clean">
<RemoveDir Condition="$(Configuration) == 'Release'" Directories="$(ILMergeDir)" />
<MakeDir Condition="$(Configuration) == 'Release'" Directories="$(ILMergeDir)" />
<RemoveDir Directories="$(PortableDir)" />
<MakeDir Directories="$(PortableDir)" />
<RemoveDir Directories="$(PackageDir)" />
<MakeDir Directories="$(PackageDir)" />
<RemoveDir Directories="$(InstallerDir)" />
<MakeDir Directories="$(InstallerDir)" />
<RemoveDir Directories="$(SourceDir)" />
<MakeDir Directories="$(SourceDir)" />
<RemoveDir Directories="$(ReleasesDir)" />
<MakeDir Directories="$(ReleasesDir)" />
</Target>
<Target Name="CreateILMergeFiles">
<Exec Command="%22$(SolutionDir)packages\ILMerge.3.0.41\tools\net452\ILMerge.exe%22 /out:%22$(ILMergeDir)$(ReleaseCLIName).exe%22 %22$(SolutionDir)$(ReleaseCLIName)\bin\$(Configuration)\$(ReleaseCLIName).exe%22 %22$(SolutionDir)$(ReleaseCLIName)\bin\$(Configuration)\*.dll%22 /wildcards" />
<Exec Command="%22$(SolutionDir)packages\ILMerge.3.0.41\tools\net452\ILMerge.exe%22 /out:%22$(ILMergeDir)$(ReleaseGUIName).exe%22 %22$(SolutionDir)$(ReleaseGUIName)\bin\$(Configuration)\$(ReleaseGUIName).exe%22 %22$(SolutionDir)$(ReleaseGUIName)\bin\$(Configuration)\*.dll%22 /wildcards" />
</Target>
<Target Name="CreatePortableFiles">
<ItemGroup>
<MySourceBINs Condition="$(Configuration) == 'Debug'" Include="$(SolutionDir)$(ReleaseCLIName)\bin\$(Configuration)\**\*.*;$(SolutionDir)$(ReleaseGUIName)\bin\$(Configuration)\**\*.*;$(SolutionDir)$(ReleaseDLLName)\bin\$(Configuration)\**\*.*;" />
<MySourceBINs Condition="$(Configuration) == 'Release'" Include="$(ILMergeDir)\**\*.exe;" />
<MySourceBatches Include="$(SolutionDir)$(ReleaseCLIName)\Resources\Batches\**\*.*;" />
<MySourceBASHes Include="$(SolutionDir)$(ReleaseCLIName)\Resources\BASHes\**\*.*;" />
<MySourceDocs Include="$(SolutionDir)$(ReleaseDLLName)\Resources\Docs\**\*.txt;" />
<MySourceDats Include="$(SolutionDir)$(ReleaseDLLName)\Resources\Output\Dats\**\*.txt;" />
<MySourceLogs Include="$(SolutionDir)$(ReleaseDLLName)\Resources\Output\Logs\**\*.txt;" />
<MySourceOptions Include="$(SolutionDir)$(ReleaseDLLName)\Resources\Output\Options\**\*.txt;" />
<MySourcePatches Include="$(SolutionDir)$(ReleaseDLLName)\Resources\Output\Patches\**\*.txt;" />
<MySourceROMs Include="$(SolutionDir)$(ReleaseDLLName)\Resources\Output\ROMs\**\*.txt;" />
<MySourceXdeltas Include="$(SolutionDir)$(ReleaseDLLName)\Resources\Libs\**\*.exe;$(SolutionDir)$(ReleaseDLLName)\Resources\Output\Xdelta\**\*.*;" />
</ItemGroup>
<Copy SourceFiles="@(MySourceBINs)" DestinationFiles="@(MySourceBINs->'$(PortableDir)\%(RecursiveDir)%(Filename)%(Extension)')" />
<Copy SourceFiles="@(MySourceBatches)" DestinationFiles="@(MySourceBatches->'$(PortableDir)\Batches\%(RecursiveDir)%(Filename)%(Extension)')" />
<Copy SourceFiles="@(MySourceBASHes)" DestinationFiles="@(MySourceBASHes->'$(PortableDir)\BASHes\%(RecursiveDir)%(Filename)%(Extension)')" />
<Copy SourceFiles="@(MySourceDats)" DestinationFiles="@(MySourceDats->'$(PortableDir)\Dats\%(RecursiveDir)%(Filename)%(Extension)')" />
<Copy SourceFiles="@(MySourceDocs)" DestinationFiles="@(MySourceDocs->'$(PortableDir)\Docs\%(RecursiveDir)%(Filename)%(Extension)')" />
<Copy SourceFiles="@(MySourceLogs)" DestinationFiles="@(MySourceLogs->'$(PortableDir)\Logs\%(RecursiveDir)%(Filename)%(Extension)')" />
<Copy SourceFiles="@(MySourceOptions)" DestinationFiles="@(MySourceOptions->'$(PortableDir)\Options\%(RecursiveDir)%(Filename)%(Extension)')" />
<Copy SourceFiles="@(MySourcePatches)" DestinationFiles="@(MySourcePatches->'$(PortableDir)\Patches\%(RecursiveDir)%(Filename)%(Extension)')" />
<Copy SourceFiles="@(MySourceROMs)" DestinationFiles="@(MySourceROMs->'$(PortableDir)\ROMs\%(RecursiveDir)%(Filename)%(Extension)')" />
<Copy SourceFiles="@(MySourceXdeltas)" DestinationFiles="@(MySourceXdeltas->'$(PortableDir)\Xdelta\%(RecursiveDir)%(Filename)%(Extension)')" />
</Target>
<Target Name="CreateOptionsFile">
<Exec Command="$(PortableDir)$(ReleaseCLIName).exe -saveoptions" />
</Target>
<Target Name="CreatePackageFiles">
<Delete Files="$(PackageDir)$(ReleaseName).$(ReleaseVersion).nuget" />
<Exec Command="nuget pack %22$(SolutionDir)$(ReleaseDLLName)\$(ReleaseDLLName).csproj%22 -Properties Configuration=$(Configuration) -OutputDirectory $(PackageDir) -Version $(ReleaseVersion)" />
</Target>
<Target Name="CreateInstallerFiles">
<ItemGroup>
<MySourceInstallerFiles Condition="$(Configuration) == 'Debug'" Include="$(SolutionDir)$(ReleaseInstallerName)\bin\$(Configuration)\**\*.*" />
<MySourceInstallerFiles Condition="$(Configuration) == 'Release'" Include="$(SolutionDir)$(ReleaseInstallerName)\bin\$(Configuration)\**\*.*" />
</ItemGroup>
<Copy SourceFiles="@(MySourceInstallerFiles)" DestinationFiles="@(MySourceInstallerFiles->'$(InstallerDir)\%(RecursiveDir)%(Filename)%(Extension)')" />
</Target>
<Target Name="CreateSourceFiles">
<ItemGroup>
<MySourceSourceFiles Include="$(SolutionDir)**\*;" Exclude="$(SolutionDir)**\obj\**\*.*;$(SolutionDir)**\bin\**\*.*;$(SolutionDir)**\misc\**\*.*;$(SolutionDir)**\packages\**\*.*;$(SolutionDir)**\.git\**\*.*;$(SolutionDir)**\.vs\**\*.*;" />
</ItemGroup>
<Copy SourceFiles="@(MySourceSourceFiles)" DestinationFiles="@(MySourceSourceFiles->'$(SourceDir)\%(RecursiveDir)%(Filename)%(Extension)')" />
</Target>
<Target Name="CreateReleasesFiles">
<Delete Files="$(ReleasesDir)$(ReleasePortableName).$(ReleaseVersion).zip" />
<ZipDirectory SourceDirectory="$(PortableDir)" DestinationFile="$(ReleasesDir)$(ReleasePortableName).$(ReleaseVersion).zip" />
<Delete Files="$(ReleasesDir)$(ReleaseInstallerName).$(ReleaseVersion).zip" />
<ZipDirectory SourceDirectory="$(InstallerDir)" DestinationFile="$(ReleasesDir)$(ReleaseInstallerName).$(ReleaseVersion).zip" />
<Delete Files="$(ReleasesDir)$(ReleasePackageName).$(ReleaseVersion).zip" />
<ZipDirectory SourceDirectory="$(PackageDir)" DestinationFile="$(ReleasesDir)$(ReleasePackageName).$(ReleaseVersion).zip" />
<Delete Files="$(ReleasesDir)$(ReleaseSourceName).$(ReleaseVersion).zip" />
<ZipDirectory SourceDirectory="$(SourceDir)" DestinationFile="$(ReleasesDir)$(ReleaseSourceName).$(ReleaseVersion).zip" />
</Target>
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\ILMerge.3.0.41\build\ILMerge.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\ILMerge.3.0.41\build\ILMerge.props'))" />
</Target>
</Project>

View File

@@ -0,0 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/></startup></configuration>

View File

@@ -20,12 +20,15 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PatchEmAll-Release", "Patch
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{EF51289A-9DF0-4262-9867-D4E6F9C321EE}"
ProjectSection(SolutionItems) = preProject
.gitattributes = .gitattributes
.gitignore = .gitignore
CHANGELOG.md = CHANGELOG.md
CODE_OF_CONDUCT.md = CODE_OF_CONDUCT.md
CONTRIBUTING.md = CONTRIBUTING.md
LICENSE = LICENSE
README.md = README.md
TODO.md = TODO.md
screenshot1.png = screenshot1.png
screenshot2.png = screenshot2.png
EndProjectSection
EndProject
Global

View File

@@ -83,6 +83,7 @@
<None Include="PatchEmAll.snk" />
<None Include="packages.config" />
<None Include="Resources\Docs\PatchEmAll-DONATIONS.txt" />
<None Include="Resources\Docs\PatchEmAll-HELP.md" />
<None Include="Resources\Docs\PatchEmAll-HELP.txt" />
<None Include="Resources\Docs\PatchEmAll-HELP-CMD.txt" />
<None Include="Resources\Docs\PatchEmAll-LICENSE.rtf" />

View File

@@ -4,20 +4,19 @@
<id>PatchEmAll</id>
<title>PatchEmAll</title>
<version>0.0.0</version>
<description>
Use the PatchEmAll Library (.dll) to patch ROMs from anywhere in your application.
First, install or add the PatchEmAll Nuget Package to your application by downloading the [nuget.nupkg](https://gitemall.devemall.int.eu.org/TommySalami/PatchEmAll/packages) to your project folder and opening a Nuget Package Manager Console in Visual Studio and type:
```
Install-Package nuget.nupkg
```
Then, create and use a new PatchEmAll Object from anywhere in your application like the following:
```
PatchEmAll.PatchEmAll pea = new PatchEmAll.PatchEmAll();
```
<description>Use the PatchEmAll Library (.dll) to patch ROMs from anywhere in your application.
First, where x.x.x is the version you are installing, install or add the PatchEmAll Nuget Package to your application by downloading the [patchemall.x.x.x.nupkg](https://gitemall.devemall.int.eu.org/TommySalami/PatchEmAll/packages) to your project folder and opening a Nuget Package Manager Console in Visual Studio and type:
```
Install-Package patchemall.x.x.x.nupkg
```
Then, create and use a new PatchEmAll Object from anywhere in your application like the following:
```
PatchEmAll.PatchEmAll pea = new PatchEmAll.PatchEmAll();
```
</description>
<authors>PatchEmAll</authors>
<license type="file">LICENSE.txt</license>
@@ -29,13 +28,6 @@
<copyright>Copyright (c) 2016-2025 PatchEmAll - All Rights Reserved</copyright>
<tags>PatchEmAll Automated ROM Patcher Patch ROMs</tags>
<repository type="git" url="https://gitemall.devemall.int.eu.org/TommySalami/PatchEmAll.git" />
<dependencies>
<group targetFramework=".NETFramework4.8">
<dependency id="Serilog" version="2.12.0" />
<dependency id="Serilog.Sinks.Console" version="4.1.0" />
<dependency id="Serilog.Sinks.LogEmAll" version="0.0.5" />
</group>
</dependencies>
</metadata>
<files>
<file src="Resources\Docs\PatchEmAll-LICENSE.txt" target="LICENSE.txt" />

View File

@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.5.7")]
[assembly: AssemblyFileVersion("1.5.7")]
[assembly: AssemblyVersion("1.5.8")]
[assembly: AssemblyFileVersion("1.5.8")]

View File

@@ -0,0 +1,131 @@
# @PatchEmAll
### The Original Automated ROM Patcher
## About
PatchEmAll or PEA is the original software application for automating the process of building ROMs from patches and building patches from ROMs.
Are you a ROM collector who wants to save vast amounts of time and bandwidth? Are you a patcher who is tired of working like an octopussy? If so, PatchEmAll is for you. It's easy and fun to use.
PatchEmAll comes with both a command line interface and a graphical interface. No matter which interface you choose, building ROMs and patches is easy. Just run PatchEmAll to build all of the ROMs or patches.
PatchEmAll uses Xdelta to create a patch containing the diff data between two ROMs. The resulting patch is usually very small and can be used to recreate an exact image of a second ROM.
Although PatchEmAll has more than one purpose, it's main purpose is to automate the process of building ROMs and patches. This automated process not only saves you vast amounts of time and bandwidth, but also creates a uniform set of patches.
PatchEmAll makes life simpler and easier. Just run PatchEmAll and go eat dinner, go to work or go to sleep. When you return, PatchEmAll has built every possible ROM or patch that it can... Or at least it's still working on it.
Using PatchEmAll, the sky is the limit as to how many patches and datafiles you create.
## Notes
1) The ROMs, patches and datafiles directories should be as close to the drive's root directory as possible. The nature of things dictates that there will be very long filenames, on occasion. Keep in mind that some things may not work correctly if you choose too long of a path to put your files.
2) This software does not work on Zip, 7zip, TZip or any kind of archived ROMs. You must unzip or unarchive them into the appropriate directories.
3) Patch names and ROM names that do not exactly match the names in all official datafiles may break this software and may cause havoc, serious injury or death.
4) This software is not recursive. That means it won't find patches or ROMs inside of sub directories.
5) This software is not a ROM manager. Use a ROM manager for renaming, checking and managing your ROMs and patches.
6) This software is not a datafile tool. It doesn't have the ability to recognize every kind of datafile in existence. It should only be used with officially supported PatchEmAll datafiles.
## Installation
This software is designed to run on various operating systems, using .NET or Mono. Windows already comes with .NET Framework, but you can still install and use Mono if you'd like.
First, if you are installing Mono, you should switch to the root user or System Administrator to install and use Mono and then switch to your downloademall user to install and use DownloadEmAll.
Next, download and unzip the software to any new location that you wish to use. However, this software should be installed as close to the drive's root directory as possible.
I like to put my installation in a directory called PEA on my Windows C:\ drive or in my Linux ~/ (home) directory. My installation layout looks like this:
C:\PEA\BASHes\
C:\PEA\Batches\
C:\PEA\Dats\
C:\PEA\Docs\
C:\PEA\Logs\
C:\PEA\Options\
C:\PEA\Patches\
C:\PEA\ROMs\
C:\PEA\Xdelta\
C:\PEA\PatchEmAll-CLI.exe
C:\PEA\PatchEmAll-GUI.exe
or
~/PEA/BASHes/
~/PEA/Batches/
~/PEA/Dats/
~/PEA/Docs/
~/PEA/Logs/
~/PEA/Options/
~/PEA/Patches/
~/PEA/ROMs/
~/PEA/Xdelta/
~/PEA/PatchEmAll-CLI.exe
~/PEA/PatchEmAll-GUI.exe
After this software is installed, you can create a new options file using the GUI or CLI version.
PatchEmAll will try to automatically load the saved default options file. If it is not found, it will load some default options.
PatchEmAll allows you to save many sets of options for numerous sets of patches and prepatches and quickly switch between them.
## How To Build ROMs, Patches and Datafiles
The CLI or GUI version can be used to build ROMs, patches and datafiles.
1) Download the official PatchEmAll patches (.dat) and prepatches (.ppd) datafiles and unzip them into the Dats folder.
2) Set the options according to the following requirements:
* Building ROMs requires a ROMs directory, a patches directory, an Xdelta file and a delimiter.
* Building patches requires a ROMs directory, a patches directory, an Xdelta file, an Xdelta build command, a delimiter and a Dat/PPD/XML file.
* Building an official datafile requires a patches directory, an Xdelta file, an Xdelta build command, a machine name, a dats directory, and optionally a comment.
3) Place all of the unzipped, unarchived ROMs into the ROMs directory.
4) Place all of the unzipped, unarchived patches into the patches directory.
5) Click the button with the action that you want to perform.
## How To Build PPDs
Only the GUI version can be used to build PPDs.
1) Click the Load Dat button to load a datafile into the ROMs boxes.
2) Select a ROM on the left to patch from. Select a ROM on the right to patch to. Click the Add Prepatch button. Add as many prepatches as you want.
3) Set the machine name and a comment in the options.
4) Save your PPD file.
## FAQ
Q1: What is PatchEmAll?
A1: PatchEmAll is a software application that automates the processes of building ROMs from patches and building patches from ROMs.
Q2: Why do I need PatchEmAll?
A2: To automate the process of building ROMs and patches. Working like an octopussy is needless and senseless, when you can just run BuildEmall to build everything possible and all at once. A better question is, why would anyone want to build one ROM or one patch at a time, unless he only needs one ROM or patch?
Q3: What makes PatchEmAll different?
A3: PatchEmAll is a software project, not a patching project. PatchEmAll is used by groups or individuals who operate and maintain patching projects.
Q4: How do I get my datafiles included in the official PatchEmAll datafiles?
A4: Simply submit them to be included in the official datafiles. The official PatchEmAll datafiles should only contain 100% working patches. Each set has it's own datafile and there is no mess.
Q5: I only want to build a few ROMs or patches. Do I have to build the entire set?
A5: Certainly not! Just put the few ROMs and patches into the ROMs and Patches directories and run PatchEmAll. It will only build the ROMs and patches that are possible out of the ROMs and patches that you supplied it with.
## Contributing
Let's work better together. We are looking to collaborate with like-minded people who want to contribute in any capacity. Collaboration is open to everyone and we need your help if you are a:
* Collector
* Database Administrator
* Datter
* Developer
* Dumper
* Graphic Artist
* Translator
* Player
* Tester
Feel free to:
* Fork the repository
* Create an issue
* Branch your repository with the issue number and a meaningful name related to the changes you are making
* Create a pull request
## Contact
GitEmAll: [https://gitemall.devemall.int.eu.org/TommySalami/PatchEmAll](https://gitemall.devemall.int.eu.org/TommySalami/PatchEmAll "GitEmAll")
## Disclaimers
We do not upload, share or distribute ROMs, patches, files or links.
This software includes Xdelta software, freely available from http://www.xdelta.org/
---
###### Copyright (c) 2016-2025 PatchEmAll - All Rights Reserved

View File

@@ -1,5 +1,5 @@
-------------------------------------------------------------------------------
PatchEmAll - Help version 20250721
PatchEmAll - Help version 20251026
Copyright (c) 2016-2025 PatchEmAll - All Rights Reserved
-------------------------------------------------------------------------------
@@ -82,44 +82,30 @@ PatchEmAll allows you to save many sets of options for numerous sets of patches
[IV] How To Build ROMs, Patches and Datafiles
-------------------------------------------------------------------------------
Step 1)
Download the official PatchEmAll patches (.dat) and prepatches (.ppd) datafiles and unzip them into the Dats folder.
The CLI or GUI version can be used to build ROMs, patches and datafiles.
Step 2)
Set the options according to the following requirements:
A) Building ROMs requires a ROMs directory, a patches directory, an Xdelta file and a delimiter.
B) Building patches requires a ROMs directory, a patches directory, an Xdelta file, an Xdelta build command, a delimiter and a Dat/PPD/XML file.
C) Building an official datafile requires a patches directory, an Xdelta file, an Xdelta build command, a machine name, a dats directory, and optionally a comment.
Step 3)
Place all of the unzipped, unarchived ROMs into the ROMs directory.
Step 4)
Place all of the unzipped, unarchived patches into the patches directory.
Step 5)
Click the button with the action that you want to perform.
1) Download the official PatchEmAll patches (.dat) and prepatches (.ppd) datafiles and unzip them into the Dats folder.
2) Set the options according to the following requirements:
* Building ROMs requires a ROMs directory, a patches directory, an Xdelta file and a delimiter.
* Building patches requires a ROMs directory, a patches directory, an Xdelta file, an Xdelta build command, a delimiter and a Dat/PPD/XML file.
* Building an official datafile requires a patches directory, an Xdelta file, an Xdelta build command, a machine name, a dats directory, and optionally a comment.
3) Place all of the unzipped, unarchived ROMs into the ROMs directory.
4) Place all of the unzipped, unarchived patches into the patches directory.
5) Click the button with the action that you want to perform.
[V] How To Build PPDs
-------------------------------------------------------------------------------
* The GUI version must be used to build PPDs. *
Only the GUI version can be used to build PPDs.
Step 1)
Click the Load Dat button to load a datafile into the ROMs boxes.
Step 2)
Select a ROM on the left to patch from. Select a ROM on the right to patch to. Click the Add Prepatch button. Add as many prepatches as you want.
Step 3)
Set the machine name and a comment in the options.
Step 4)
Save your PPD file.
1) Click the Load Dat button to load a datafile into the ROMs boxes.
2) Select a ROM on the left to patch from. Select a ROM on the right to patch to. Click the Add Prepatch button. Add as many prepatches as you want.
3) Set the machine name and a comment in the options.
4) Save your PPD file.
[VI] FAQ
-------------------------------------------------------------------------------
Q1: What is PatchEmAll?
A1: PatchEmAll is a software tool that automates the processes of building ROMs from patches and building patches from ROMs.
A1: PatchEmAll is a software application that automates the processes of building ROMs from patches and building patches from ROMs.
Q2: Why do I need PatchEmAll?
A2: To automate the process of building ROMs and patches. Working like an octopussy is needless and senseless, when you can just run BuildEmall to build everything possible and all at once. A better question is, why would anyone want to build one ROM or one patch at a time, unless he only needs one ROM or patch?
@@ -158,6 +144,6 @@ GitEmAll: https://gitemall.devemall.int.eu.org/TommySalami/PatchEmAll
[IX] Disclaimers
-------------------------------------------------------------------------------
We do not upload, share, distribute or provide links to anything illegal, including ROMs or patches.
We do not upload, share or distribute ROMs, patches, files or links.
This software includes Xdelta software, freely available from http://www.xdelta.org/

View File

@@ -1,5 +1,6 @@
# @PatchEmAll
### The Original Automated ROM Patcher
## About
PatchEmAll or PEA is the original software application for automating the process of building ROMs from patches and building patches from ROMs.
@@ -14,23 +15,31 @@ Although PatchEmAll has more than one purpose, it's main purpose is to automate
PatchEmAll makes life simpler and easier. Just run PatchEmAll and go eat dinner, go to work or go to sleep. When you return, PatchEmAll has built every possible ROM or patch that it can... Or at least it's still working on it.
Using PatchEmAll, the sky is the limit as to how many patches and datafiles you create.
## Screenshots
![PatchEmAll Screenshot 1](screenshot1.png?raw=true "PatchEmAll Screenshot 1")
![PatchEmAll Screenshot 2](screenshot2.png?raw=true "PatchEmAll Screenshot 2")
## Dependencies
.NET Framework 4.8
The following frameworks and SDKs are required to develop and build this app:
* .NET Framework 4.8 or Mono compatible
The following NuGet Packages are required to build a Debug and/or Release version of this app:
The following NuGet Packages are required to develop and build this app:
* ILMerge
* Serilog
* Serilog.Sinks.Console
* Serilog.Sinks.LogEmAll
The following tools and extensions are required to be installed in your Visual Sudio IDE:
The following tools and extensions are required to develop and build this app:
* Microsoft Visual Studio Installer Projects
## Projects
* PatchEmAll - Class Library
* PatchEmAll-CLI - Console App
* PatchEmAll-GUI - Windows Forms App
* PatchEmAll-Release - Release Project
* PatchEmAll-Installer - Installer Project
## Contributing
Let's work better together. We are looking to collaborate with like-minded people who want to contribute in any capacity. Collaboration is open to everyone and we need your help if you are a:
* Collector
@@ -53,4 +62,4 @@ Feel free to:
GitEmAll: [https://gitemall.devemall.int.eu.org/TommySalami/PatchEmAll](https://gitemall.devemall.int.eu.org/TommySalami/PatchEmAll "GitEmAll")
---
###### Copyright (c) 2016-2025 PatchEmAll - All Rights Reserved v2025-07-21-00
###### Copyright (c) 2016-2025 PatchEmAll - All Rights Reserved

View File

@@ -1,5 +0,0 @@
### To Do
* Nothing to do
### Completed Tasks
* Develop initial release

BIN
screenshot1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

BIN
screenshot2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB