Initial commit
This commit is contained in:
		
						commit
						87a199d7d1
					
				|  | @ -0,0 +1,2 @@ | |||
| # Auto detect text files and perform LF normalization | ||||
| * text=auto | ||||
|  | @ -0,0 +1,398 @@ | |||
| ## Ignore Visual Studio temporary files, build results, and | ||||
| ## files generated by popular Visual Studio add-ons. | ||||
| ## | ||||
| ## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore | ||||
| 
 | ||||
| # User-specific files | ||||
| *.rsuser | ||||
| *.suo | ||||
| *.user | ||||
| *.userosscache | ||||
| *.sln.docstates | ||||
| 
 | ||||
| # User-specific files (MonoDevelop/Xamarin Studio) | ||||
| *.userprefs | ||||
| 
 | ||||
| # Mono auto generated files | ||||
| mono_crash.* | ||||
| 
 | ||||
| # Build results | ||||
| [Dd]ebug/ | ||||
| [Dd]ebugPublic/ | ||||
| [Rr]elease/ | ||||
| [Rr]eleases/ | ||||
| x64/ | ||||
| x86/ | ||||
| [Ww][Ii][Nn]32/ | ||||
| [Aa][Rr][Mm]/ | ||||
| [Aa][Rr][Mm]64/ | ||||
| bld/ | ||||
| [Bb]in/ | ||||
| [Oo]bj/ | ||||
| [Ll]og/ | ||||
| [Ll]ogs/ | ||||
| 
 | ||||
| # Visual Studio 2015/2017 cache/options directory | ||||
| .vs/ | ||||
| # Uncomment if you have tasks that create the project's static files in wwwroot | ||||
| #wwwroot/ | ||||
| 
 | ||||
| # Visual Studio 2017 auto generated files | ||||
| Generated\ Files/ | ||||
| 
 | ||||
| # MSTest test Results | ||||
| [Tt]est[Rr]esult*/ | ||||
| [Bb]uild[Ll]og.* | ||||
| 
 | ||||
| # NUnit | ||||
| *.VisualState.xml | ||||
| TestResult.xml | ||||
| nunit-*.xml | ||||
| 
 | ||||
| # Build Results of an ATL Project | ||||
| [Dd]ebugPS/ | ||||
| [Rr]eleasePS/ | ||||
| dlldata.c | ||||
| 
 | ||||
| # Benchmark Results | ||||
| BenchmarkDotNet.Artifacts/ | ||||
| 
 | ||||
| # .NET Core | ||||
| project.lock.json | ||||
| project.fragment.lock.json | ||||
| artifacts/ | ||||
| 
 | ||||
| # ASP.NET Scaffolding | ||||
| ScaffoldingReadMe.txt | ||||
| 
 | ||||
| # StyleCop | ||||
| StyleCopReport.xml | ||||
| 
 | ||||
| # Files built by Visual Studio | ||||
| *_i.c | ||||
| *_p.c | ||||
| *_h.h | ||||
| *.ilk | ||||
| *.meta | ||||
| *.obj | ||||
| *.iobj | ||||
| *.pch | ||||
| *.pdb | ||||
| *.ipdb | ||||
| *.pgc | ||||
| *.pgd | ||||
| *.rsp | ||||
| *.sbr | ||||
| *.tlb | ||||
| *.tli | ||||
| *.tlh | ||||
| *.tmp | ||||
| *.tmp_proj | ||||
| *_wpftmp.csproj | ||||
| *.log | ||||
| *.tlog | ||||
| *.vspscc | ||||
| *.vssscc | ||||
| .builds | ||||
| *.pidb | ||||
| *.svclog | ||||
| *.scc | ||||
| 
 | ||||
| # Chutzpah Test files | ||||
| _Chutzpah* | ||||
| 
 | ||||
| # Visual C++ cache files | ||||
| ipch/ | ||||
| *.aps | ||||
| *.ncb | ||||
| *.opendb | ||||
| *.opensdf | ||||
| *.sdf | ||||
| *.cachefile | ||||
| *.VC.db | ||||
| *.VC.VC.opendb | ||||
| 
 | ||||
| # Visual Studio profiler | ||||
| *.psess | ||||
| *.vsp | ||||
| *.vspx | ||||
| *.sap | ||||
| 
 | ||||
| # Visual Studio Trace Files | ||||
| *.e2e | ||||
| 
 | ||||
| # TFS 2012 Local Workspace | ||||
| $tf/ | ||||
| 
 | ||||
| # Guidance Automation Toolkit | ||||
| *.gpState | ||||
| 
 | ||||
| # ReSharper is a .NET coding add-in | ||||
| _ReSharper*/ | ||||
| *.[Rr]e[Ss]harper | ||||
| *.DotSettings.user | ||||
| 
 | ||||
| # TeamCity is a build add-in | ||||
| _TeamCity* | ||||
| 
 | ||||
| # DotCover is a Code Coverage Tool | ||||
| *.dotCover | ||||
| 
 | ||||
| # AxoCover is a Code Coverage Tool | ||||
| .axoCover/* | ||||
| !.axoCover/settings.json | ||||
| 
 | ||||
| # Coverlet is a free, cross platform Code Coverage Tool | ||||
| coverage*.json | ||||
| coverage*.xml | ||||
| coverage*.info | ||||
| 
 | ||||
| # Visual Studio code coverage results | ||||
| *.coverage | ||||
| *.coveragexml | ||||
| 
 | ||||
| # NCrunch | ||||
| _NCrunch_* | ||||
| .*crunch*.local.xml | ||||
| nCrunchTemp_* | ||||
| 
 | ||||
| # MightyMoose | ||||
| *.mm.* | ||||
| AutoTest.Net/ | ||||
| 
 | ||||
| # Web workbench (sass) | ||||
| .sass-cache/ | ||||
| 
 | ||||
| # Installshield output folder | ||||
| [Ee]xpress/ | ||||
| 
 | ||||
| # DocProject is a documentation generator add-in | ||||
| DocProject/buildhelp/ | ||||
| DocProject/Help/*.HxT | ||||
| DocProject/Help/*.HxC | ||||
| DocProject/Help/*.hhc | ||||
| DocProject/Help/*.hhk | ||||
| DocProject/Help/*.hhp | ||||
| DocProject/Help/Html2 | ||||
| DocProject/Help/html | ||||
| 
 | ||||
| # Click-Once directory | ||||
| publish/ | ||||
| 
 | ||||
| # Publish Web Output | ||||
| *.[Pp]ublish.xml | ||||
| *.azurePubxml | ||||
| # Note: Comment the next line if you want to checkin your web deploy settings, | ||||
| # but database connection strings (with potential passwords) will be unencrypted | ||||
| *.pubxml | ||||
| *.publishproj | ||||
| 
 | ||||
| # Microsoft Azure Web App publish settings. Comment the next line if you want to | ||||
| # checkin your Azure Web App publish settings, but sensitive information contained | ||||
| # in these scripts will be unencrypted | ||||
| PublishScripts/ | ||||
| 
 | ||||
| # NuGet Packages | ||||
| *.nupkg | ||||
| # NuGet Symbol Packages | ||||
| *.snupkg | ||||
| # The packages folder can be ignored because of Package Restore | ||||
| **/[Pp]ackages/* | ||||
| # except build/, which is used as an MSBuild target. | ||||
| !**/[Pp]ackages/build/ | ||||
| # Uncomment if necessary however generally it will be regenerated when needed | ||||
| #!**/[Pp]ackages/repositories.config | ||||
| # NuGet v3's project.json files produces more ignorable files | ||||
| *.nuget.props | ||||
| *.nuget.targets | ||||
| 
 | ||||
| # Microsoft Azure Build Output | ||||
| csx/ | ||||
| *.build.csdef | ||||
| 
 | ||||
| # Microsoft Azure Emulator | ||||
| ecf/ | ||||
| rcf/ | ||||
| 
 | ||||
| # Windows Store app package directories and files | ||||
| AppPackages/ | ||||
| BundleArtifacts/ | ||||
| Package.StoreAssociation.xml | ||||
| _pkginfo.txt | ||||
| *.appx | ||||
| *.appxbundle | ||||
| *.appxupload | ||||
| 
 | ||||
| # Visual Studio cache files | ||||
| # files ending in .cache can be ignored | ||||
| *.[Cc]ache | ||||
| # but keep track of directories ending in .cache | ||||
| !?*.[Cc]ache/ | ||||
| 
 | ||||
| # Others | ||||
| ClientBin/ | ||||
| ~$* | ||||
| *~ | ||||
| *.dbmdl | ||||
| *.dbproj.schemaview | ||||
| *.jfm | ||||
| *.pfx | ||||
| *.publishsettings | ||||
| orleans.codegen.cs | ||||
| 
 | ||||
| # Including strong name files can present a security risk | ||||
| # (https://github.com/github/gitignore/pull/2483#issue-259490424) | ||||
| #*.snk | ||||
| 
 | ||||
| # Since there are multiple workflows, uncomment next line to ignore bower_components | ||||
| # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) | ||||
| #bower_components/ | ||||
| 
 | ||||
| # RIA/Silverlight projects | ||||
| Generated_Code/ | ||||
| 
 | ||||
| # Backup & report files from converting an old project file | ||||
| # to a newer Visual Studio version. Backup files are not needed, | ||||
| # because we have git ;-) | ||||
| _UpgradeReport_Files/ | ||||
| Backup*/ | ||||
| UpgradeLog*.XML | ||||
| UpgradeLog*.htm | ||||
| ServiceFabricBackup/ | ||||
| *.rptproj.bak | ||||
| 
 | ||||
| # SQL Server files | ||||
| *.mdf | ||||
| *.ldf | ||||
| *.ndf | ||||
| 
 | ||||
| # Business Intelligence projects | ||||
| *.rdl.data | ||||
| *.bim.layout | ||||
| *.bim_*.settings | ||||
| *.rptproj.rsuser | ||||
| *- [Bb]ackup.rdl | ||||
| *- [Bb]ackup ([0-9]).rdl | ||||
| *- [Bb]ackup ([0-9][0-9]).rdl | ||||
| 
 | ||||
| # Microsoft Fakes | ||||
| FakesAssemblies/ | ||||
| 
 | ||||
| # GhostDoc plugin setting file | ||||
| *.GhostDoc.xml | ||||
| 
 | ||||
| # Node.js Tools for Visual Studio | ||||
| .ntvs_analysis.dat | ||||
| node_modules/ | ||||
| 
 | ||||
| # Visual Studio 6 build log | ||||
| *.plg | ||||
| 
 | ||||
| # Visual Studio 6 workspace options file | ||||
| *.opt | ||||
| 
 | ||||
| # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) | ||||
| *.vbw | ||||
| 
 | ||||
| # Visual Studio 6 auto-generated project file (contains which files were open etc.) | ||||
| *.vbp | ||||
| 
 | ||||
| # Visual Studio 6 workspace and project file (working project files containing files to include in project) | ||||
| *.dsw | ||||
| *.dsp | ||||
| 
 | ||||
| # Visual Studio 6 technical files  | ||||
| *.ncb | ||||
| *.aps | ||||
| 
 | ||||
| # Visual Studio LightSwitch build output | ||||
| **/*.HTMLClient/GeneratedArtifacts | ||||
| **/*.DesktopClient/GeneratedArtifacts | ||||
| **/*.DesktopClient/ModelManifest.xml | ||||
| **/*.Server/GeneratedArtifacts | ||||
| **/*.Server/ModelManifest.xml | ||||
| _Pvt_Extensions | ||||
| 
 | ||||
| # Paket dependency manager | ||||
| .paket/paket.exe | ||||
| paket-files/ | ||||
| 
 | ||||
| # FAKE - F# Make | ||||
| .fake/ | ||||
| 
 | ||||
| # CodeRush personal settings | ||||
| .cr/personal | ||||
| 
 | ||||
| # Python Tools for Visual Studio (PTVS) | ||||
| __pycache__/ | ||||
| *.pyc | ||||
| 
 | ||||
| # Cake - Uncomment if you are using it | ||||
| # tools/** | ||||
| # !tools/packages.config | ||||
| 
 | ||||
| # Tabs Studio | ||||
| *.tss | ||||
| 
 | ||||
| # Telerik's JustMock configuration file | ||||
| *.jmconfig | ||||
| 
 | ||||
| # BizTalk build output | ||||
| *.btp.cs | ||||
| *.btm.cs | ||||
| *.odx.cs | ||||
| *.xsd.cs | ||||
| 
 | ||||
| # OpenCover UI analysis results | ||||
| OpenCover/ | ||||
| 
 | ||||
| # Azure Stream Analytics local run output | ||||
| ASALocalRun/ | ||||
| 
 | ||||
| # MSBuild Binary and Structured Log | ||||
| *.binlog | ||||
| 
 | ||||
| # NVidia Nsight GPU debugger configuration file | ||||
| *.nvuser | ||||
| 
 | ||||
| # MFractors (Xamarin productivity tool) working folder | ||||
| .mfractor/ | ||||
| 
 | ||||
| # Local History for Visual Studio | ||||
| .localhistory/ | ||||
| 
 | ||||
| # Visual Studio History (VSHistory) files | ||||
| .vshistory/ | ||||
| 
 | ||||
| # BeatPulse healthcheck temp database | ||||
| healthchecksdb | ||||
| 
 | ||||
| # Backup folder for Package Reference Convert tool in Visual Studio 2017 | ||||
| MigrationBackup/ | ||||
| 
 | ||||
| # Ionide (cross platform F# VS Code tools) working folder | ||||
| .ionide/ | ||||
| 
 | ||||
| # Fody - auto-generated XML schema | ||||
| FodyWeavers.xsd | ||||
| 
 | ||||
| # VS Code files for those working on multiple tools | ||||
| .vscode/* | ||||
| !.vscode/settings.json | ||||
| !.vscode/tasks.json | ||||
| !.vscode/launch.json | ||||
| !.vscode/extensions.json | ||||
| *.code-workspace | ||||
| 
 | ||||
| # Local History for Visual Studio Code | ||||
| .history/ | ||||
| 
 | ||||
| # Windows Installer files from build outputs | ||||
| *.cab | ||||
| *.msi | ||||
| *.msix | ||||
| *.msm | ||||
| *.msp | ||||
| 
 | ||||
| # JetBrains Rider | ||||
| *.sln.iml | ||||
|  | @ -0,0 +1,11 @@ | |||
| <Project Sdk="Microsoft.NET.Sdk"> | ||||
| 
 | ||||
|   <PropertyGroup> | ||||
|     <OutputType>Exe</OutputType> | ||||
|     <TargetFramework>net8.0</TargetFramework> | ||||
|     <RootNamespace>Feilds_Of_Battle_Extractor</RootNamespace> | ||||
|     <ImplicitUsings>enable</ImplicitUsings> | ||||
|     <Nullable>enable</Nullable> | ||||
|   </PropertyGroup> | ||||
| 
 | ||||
| </Project> | ||||
|  | @ -0,0 +1,25 @@ | |||
|  | ||||
| Microsoft Visual Studio Solution File, Format Version 12.00 | ||||
| # Visual Studio Version 17 | ||||
| VisualStudioVersion = 17.8.34309.116 | ||||
| MinimumVisualStudioVersion = 10.0.40219.1 | ||||
| Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Fields-Of-Battle-Extractor", "Fields-Of-Battle-Extractor.csproj", "{7742166B-E64B-492D-878D-264897B79D81}" | ||||
| EndProject | ||||
| Global | ||||
| 	GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||||
| 		Debug|Any CPU = Debug|Any CPU | ||||
| 		Release|Any CPU = Release|Any CPU | ||||
| 	EndGlobalSection | ||||
| 	GlobalSection(ProjectConfigurationPlatforms) = postSolution | ||||
| 		{7742166B-E64B-492D-878D-264897B79D81}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||||
| 		{7742166B-E64B-492D-878D-264897B79D81}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||
| 		{7742166B-E64B-492D-878D-264897B79D81}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||
| 		{7742166B-E64B-492D-878D-264897B79D81}.Release|Any CPU.Build.0 = Release|Any CPU | ||||
| 	EndGlobalSection | ||||
| 	GlobalSection(SolutionProperties) = preSolution | ||||
| 		HideSolutionNode = FALSE | ||||
| 	EndGlobalSection | ||||
| 	GlobalSection(ExtensibilityGlobals) = postSolution | ||||
| 		SolutionGuid = {BF8008A8-1BE1-4B4F-A65C-12CB1ACF453F} | ||||
| 	EndGlobalSection | ||||
| EndGlobal | ||||
|  | @ -0,0 +1,29 @@ | |||
| BSD 3-Clause License | ||||
| 
 | ||||
| Copyright (c) 2024, NintenHero | ||||
| All rights reserved. | ||||
| 
 | ||||
| Redistribution and use in source and binary forms, with or without | ||||
| modification, are permitted provided that the following conditions are met: | ||||
| 
 | ||||
| 1. Redistributions of source code must retain the above copyright notice, this | ||||
|    list of conditions and the following disclaimer. | ||||
| 
 | ||||
| 2. Redistributions in binary form must reproduce the above copyright notice, | ||||
|    this list of conditions and the following disclaimer in the documentation | ||||
|    and/or other materials provided with the distribution. | ||||
| 
 | ||||
| 3. Neither the name of the copyright holder nor the names of its | ||||
|    contributors may be used to endorse or promote products derived from | ||||
|    this software without specific prior written permission. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | ||||
| AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||||
| IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||
| DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | ||||
| FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||
| DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | ||||
| SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | ||||
| CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | ||||
| OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||||
| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  | @ -0,0 +1,59 @@ | |||
| namespace Fields_Of_Battle_Extractor | ||||
| { | ||||
|     internal class Program | ||||
|     { | ||||
|         static BinaryReader br; | ||||
|         static void Main(string[] args) | ||||
|         { | ||||
|             br = new(File.OpenRead(args[0])); | ||||
|             if (new string(br.ReadChars(4)) != "PAK ") | ||||
|                 throw new Exception("Not a Fields of Battle pak file."); | ||||
| 
 | ||||
|             int dataStart = br.ReadInt32(); | ||||
|             br.BaseStream.Position = 18; | ||||
|             int fileCount = br.ReadInt32(); | ||||
|             br.BaseStream.Position = 22; | ||||
| 
 | ||||
|             List<Subfile> subfiles = new(); | ||||
| 
 | ||||
|             for (int i = 0; i < fileCount; i++) | ||||
|                 subfiles.Add(ReadSub()); | ||||
| 
 | ||||
|             string path = Path.GetDirectoryName(args[0]) + "//" + Path.GetFileNameWithoutExtension(args[0]); | ||||
|             Directory.CreateDirectory(path); | ||||
| 
 | ||||
|             foreach (Subfile file in subfiles) | ||||
|             { | ||||
|                 br.BaseStream.Position = file.start; | ||||
|                 BinaryWriter bw = new(File.Create(path + "//" + file.name)); | ||||
|                 bw.Write(br.ReadBytes(file.size)); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         struct Subfile | ||||
|         { | ||||
|             public string name; | ||||
|             public int start; | ||||
|             public int size; | ||||
|             public byte isCompressed; | ||||
|         } | ||||
| 
 | ||||
|         static Subfile ReadSub() | ||||
|         { | ||||
|             br.ReadInt16();//usually 4 | ||||
|             string name = new string(br.ReadChars(64)).Trim('\0'); | ||||
|             br.ReadInt16(); | ||||
|             Subfile subfile = new Subfile() | ||||
|             { | ||||
|                 name = name, | ||||
|                 start = br.ReadInt32(), | ||||
|                 size = br.ReadInt32() | ||||
|             }; | ||||
|             br.ReadInt32(); | ||||
|             br.ReadInt32(); | ||||
|             br.ReadInt32(); | ||||
|             subfile.isCompressed = br.ReadByte(); | ||||
|             return subfile; | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Loading…
	
		Reference in New Issue