diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..8bb671c
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,7 @@
+.vs/
+Debug/
+Release/
+X64/
+mgs/3rdparty/zlib/zconf.h
+mgs/3rdparty/zlib/zlib.h
+mgs/3rdparty/zlib/zlib.lib
diff --git a/Arsenal.sln b/Arsenal.sln
new file mode 100644
index 0000000..2b34614
--- /dev/null
+++ b/Arsenal.sln
@@ -0,0 +1,31 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.30907.101
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Arsenal", "Arsenal.vcxproj", "{8C944FD4-90E3-4FC2-9143-CDA2A21FF96D}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {8C944FD4-90E3-4FC2-9143-CDA2A21FF96D}.Debug|x64.ActiveCfg = Debug|x64
+ {8C944FD4-90E3-4FC2-9143-CDA2A21FF96D}.Debug|x64.Build.0 = Debug|x64
+ {8C944FD4-90E3-4FC2-9143-CDA2A21FF96D}.Debug|x86.ActiveCfg = Debug|Win32
+ {8C944FD4-90E3-4FC2-9143-CDA2A21FF96D}.Debug|x86.Build.0 = Debug|Win32
+ {8C944FD4-90E3-4FC2-9143-CDA2A21FF96D}.Release|x64.ActiveCfg = Release|x64
+ {8C944FD4-90E3-4FC2-9143-CDA2A21FF96D}.Release|x64.Build.0 = Release|x64
+ {8C944FD4-90E3-4FC2-9143-CDA2A21FF96D}.Release|x86.ActiveCfg = Release|Win32
+ {8C944FD4-90E3-4FC2-9143-CDA2A21FF96D}.Release|x86.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {48227280-F7AF-4A74-A5C7-1CD24EB09673}
+ EndGlobalSection
+EndGlobal
diff --git a/Arsenal.vcxproj b/Arsenal.vcxproj
new file mode 100644
index 0000000..6c29f48
--- /dev/null
+++ b/Arsenal.vcxproj
@@ -0,0 +1,182 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Release
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ 16.0
+ Win32Proj
+ {8c944fd4-90e3-4fc2-9143-cda2a21ff96d}
+ Arsenal
+ 10.0
+
+
+
+ Application
+ true
+ v142
+ Unicode
+
+
+ Application
+ false
+ v142
+ true
+ Unicode
+
+
+ Application
+ true
+ v142
+ Unicode
+
+
+ Application
+ false
+ v142
+ true
+ Unicode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+
+ Level3
+ true
+ WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ stdcpp17
+
+
+ Console
+ true
+ "mgs/3rdparty/zlib/zlib.lib";%(AdditionalDependencies)
+
+
+
+
+ Level3
+ true
+ true
+ true
+ WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ stdcpp17
+
+
+ Console
+ true
+ true
+ true
+ "mgs/3rdparty/zlib/zlib.lib";%(AdditionalDependencies)
+ false
+
+
+
+
+ Level3
+ true
+ _DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ stdcpp17
+
+
+ Console
+ true
+ "mgs/3rdparty/zlib/zlib.lib";%(AdditionalDependencies)
+
+
+
+
+ Level3
+ true
+ true
+ true
+ NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ stdcpp17
+
+
+ Console
+ true
+ true
+ true
+ "mgs/3rdparty/zlib/zlib.lib";%(AdditionalDependencies)
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Arsenal.vcxproj.filters b/Arsenal.vcxproj.filters
new file mode 100644
index 0000000..2018c19
--- /dev/null
+++ b/Arsenal.vcxproj.filters
@@ -0,0 +1,93 @@
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd
+
+
+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
+
+
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+
\ No newline at end of file
diff --git a/Arsenal.vcxproj.user b/Arsenal.vcxproj.user
new file mode 100644
index 0000000..a8b9ca7
--- /dev/null
+++ b/Arsenal.vcxproj.user
@@ -0,0 +1,10 @@
+
+
+
+ true
+
+
+ "STAGE2.DAT"
+ WindowsLocalDebugger
+
+
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..e6b0405
--- /dev/null
+++ b/README.md
@@ -0,0 +1,38 @@
+
+# Arsenal
+
+
+Arsenal is a free open source tool designed to be used with the PS2 version of the game Metal Gear Solid 2. It allows the user to extract Face and Stage archive files packaged with the game. The dictionary provided is thanks to [GirianSeed](https://github.com/GirianSeed) you can check out his mgs dictionary project [here](https://github.com/Joy-Division/JoyDict)
+
+This project uses [Zlib](https://github.com/madler/zlib) by [Mark Adler](https://github.com/madler)
+
+### To Do
+ - Add multithreaded extract
+ - Add error handling
+ - Create GUI variant
+ - Clean up the code
+
+## Usage
+
+Currently only a CLI version of the application exists. An optional output directory can also be added. it is also possible to just drag the file you wish to extract on the executable. A dictionary file is also included in order to resolve a lot of the hashes.
+
+If you wish to use the dictionary to resolve filenames place it alonside Arsenal.exe, please note this program is currently only designed to work with the PS2 version of MGS2.
+
+```
+Arsenal.exe "path\to\STAGE.DAT"
+```
+The above instruction will extract all files from STAGE.DAT to the current directory.
+
+```
+Arsenal.exe -sub "path\to\STAGE.DAT"
+```
+The above instruction will extract all files from STAGE.DAT for the subsistence version of the game.
+
+```
+Arsenal.exe "path\to\FACE.DAT" "path\to\output"
+```
+The same can be used for Face files. An optional output path can be added at the end, if it is not included then it will extract to the directory of the file being extracted.
+
+## License
+[MIT](LICENSE.md)
+This project falls under the MIT license.
\ No newline at end of file
diff --git a/dictionary/dictionary.cpp b/dictionary/dictionary.cpp
new file mode 100644
index 0000000..88b909a
--- /dev/null
+++ b/dictionary/dictionary.cpp
@@ -0,0 +1,16 @@
+#include "dictionary.h"
+#include "../mgs/common/strcode.h"
+
+std::map FileNames;
+
+void loadDictionary(const std::string& dictionary) {
+ std::string str;
+ std::ifstream file(dictionary);
+
+ if (!file) return;
+
+ while (std::getline(file, str)) {
+ int hashed = strcode(str.c_str());
+ FileNames[hashed] = str;
+ }
+}
\ No newline at end of file
diff --git a/dictionary/dictionary.h b/dictionary/dictionary.h
new file mode 100644
index 0000000..0ed12ec
--- /dev/null
+++ b/dictionary/dictionary.h
@@ -0,0 +1,8 @@
+#pragma once
+
+#include