Skip to content

Commit

Permalink
Merge pull request #7 from UncleClapton/console-automation
Browse files Browse the repository at this point in the history
Add features to make interfacing with WorldChunkTool easier
  • Loading branch information
mhvuze authored Nov 29, 2018
2 parents 2423062 + f51c2c0 commit 158a411
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 19 deletions.
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@ Tool to decompress Monster Hunter: World chunkN.bin files and extract the result
```
WorldChunkTool by MHVuze
Usage: WorldChunkTool <chunkN_file|PKG_file> (PKGext)
Usage: WorldChunkTool <chunkN_file|PKG_file> (PKGext) (AutoConf)
PKGext: use 'false' to turn off PKG file extraction, defaults to 'true'
AutoConf: Use 'true' to bypass confirmation prompts, defaults to 'false'
```

*oo2core_5_win64.dll* required. Copy it from the install directory of Monster Hunter: World to the same folder as the WorldChunkTool executable.
Expand Down
13 changes: 8 additions & 5 deletions WorldChunkTool/Chunk.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ namespace WorldChunkTool
{
class Chunk
{
public static void DecompressChunks(String FileInput, bool FlagPKGExtraction)
public static void DecompressChunks(String FileInput, bool FlagPKGExtraction, bool FlagAutoConfirm)
{
string NamePKG = $"{Environment.CurrentDirectory}\\{Path.GetFileNameWithoutExtension(FileInput)}.pkg";
BinaryReader Reader = new BinaryReader(File.Open(FileInput, FileMode.Open));
Expand Down Expand Up @@ -68,13 +68,16 @@ public static void DecompressChunks(String FileInput, bool FlagPKGExtraction)

Utils.Print("Finished.", true);
Utils.Print($"Output at: {NamePKG}", false);
Console.WriteLine("The PKG file will now be extracted. Press Enter to continue or close window to quit.");
Console.Read();

if (!FlagAutoConfirm) {
Console.WriteLine("The PKG file will now be extracted. Press Enter to continue or close window to quit.");
Console.Read();
}

Console.SetCursorPosition(0, Console.CursorTop - 1);
Console.WriteLine("==============================");
PKG.ExtractPKG(NamePKG, FlagPKGExtraction);
Console.Read();
PKG.ExtractPKG(NamePKG, FlagPKGExtraction, FlagAutoConfirm);
if (!FlagAutoConfirm) { Console.Read(); }
}
}
}
4 changes: 2 additions & 2 deletions WorldChunkTool/PKG.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ namespace WorldChunkTool
{
class PKG
{
public static void ExtractPKG(string FileInput, bool FlagPKGExtraction)
public static void ExtractPKG(string FileInput, bool FlagPKGExtraction, bool FlagAutoConfirm)
{
string OutputDirectory = $"{Environment.CurrentDirectory}\\{Path.GetFileNameWithoutExtension(FileInput)}";
BinaryReader Reader = new BinaryReader(File.Open(FileInput, FileMode.Open));
Expand Down Expand Up @@ -90,7 +90,7 @@ public static void ExtractPKG(string FileInput, bool FlagPKGExtraction)

Utils.Print("Finished.", true);
Utils.Print($"Output at: {OutputDirectory}", false);
Console.WriteLine("Press Enter to quit");
if (!FlagAutoConfirm) { Console.WriteLine("Press Enter to quit"); }
}
}
}
52 changes: 41 additions & 11 deletions WorldChunkTool/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,56 +5,86 @@ namespace WorldChunkTool
{
class Program
{
static void Main(string[] args)
/* Exit Codes:
* 0 - No error
* 1 - Input file missing
* 2 - oo2core_5_win64.dll file missing
* 3 - Other exception
*/
static int Main(string[] args)
{
int MagicChunk = 0x00504D43;
int MagicPKG = 0x20474B50;
int MagicInputFile;

string FileInput = "";
string StrPKGExtraction = "";
string AutoConfirm = "";
bool FlagPKGExtraction = true;
bool FlagAutoConfirm = false;

Console.WriteLine("==============================");
Utils.Print("WorldChunkTool v1.1.1 by MHVuze", false);

// Display commands
if (args.Length == 0)
{
Console.WriteLine("Usage: WorldChunkTool <chunkN_file|PKG_file> (PKGext)");
Console.WriteLine("Usage: WorldChunkTool <chunkN_file|PKG_file> (PKGext) (AutoConf)");
Console.WriteLine("PKGext: use 'false' to turn off PKG file extraction, defaults to 'true'");
Console.WriteLine("AutoConf: Use 'true' to bypass confirmation prompts, defaults to 'false'");
Console.Read();
return;
return 0;
}

// Check file
FileInput = args[0];
if (!File.Exists(FileInput)) { Console.WriteLine("ERROR: Specified file doesn't exist."); Console.Read(); return; }
if (!File.Exists(FileInput)) { Console.WriteLine("ERROR: Specified file doesn't exist."); Console.Read(); return 1; }

// Turn PKG extraction output on or off
if (args.Length > 1) StrPKGExtraction = args[1];
if (StrPKGExtraction.Equals("false", StringComparison.InvariantCultureIgnoreCase)) { FlagPKGExtraction = false; Console.WriteLine("PKG extraction turned off."); }

// Accept confirmation prompts
if (args.Length > 2) AutoConfirm = args[2];
if (AutoConfirm.Equals("true", StringComparison.InvariantCultureIgnoreCase)) { FlagAutoConfirm = true; Console.WriteLine("Auto Confirmation turned on."); }


// Determine action based on file magic
try
{
using (BinaryReader Reader = new BinaryReader(File.Open(FileInput, FileMode.Open))) MagicInputFile = Reader.ReadInt32();
if (MagicInputFile == MagicChunk)
{
Console.WriteLine("Chunk file detected.");
if (!File.Exists($"{AppDomain.CurrentDomain.BaseDirectory}\\oo2core_5_win64.dll")) { Console.WriteLine("ERROR: oo2core_5_win64.dll is missing. Can't decompress chunk file."); Console.Read(); return; }
Chunk.DecompressChunks(FileInput, FlagPKGExtraction);
Console.Read();
if (!File.Exists($"{AppDomain.CurrentDomain.BaseDirectory}\\oo2core_5_win64.dll")) {
Console.WriteLine("ERROR: oo2core_5_win64.dll is missing. Can't decompress chunk file.");
if (!FlagAutoConfirm) { Console.Read(); }
return 2;
}
Chunk.DecompressChunks(FileInput, FlagPKGExtraction, FlagAutoConfirm);
if (!FlagAutoConfirm) { Console.Read(); }
return 0;
}
else if (MagicInputFile == MagicPKG)
{
Console.WriteLine("PKG file detected.");
PKG.ExtractPKG(FileInput, FlagPKGExtraction, FlagAutoConfirm);
if (!FlagAutoConfirm) { Console.Read(); }
return 0;
}
else
{
Console.WriteLine($"ERROR: Invalid magic {MagicInputFile.ToString("X8")}.");
if (!FlagAutoConfirm) { Console.Read(); }
return 0;
}
else if (MagicInputFile == MagicPKG) { Console.WriteLine("PKG file detected."); PKG.ExtractPKG(FileInput, FlagPKGExtraction); Console.Read(); }
else { Console.WriteLine($"ERROR: Invalid magic {MagicInputFile.ToString("X8")}."); Console.Read(); return; }
}
catch (Exception e)
{
Console.WriteLine("ERROR: The following exception was caught.");
Console.WriteLine(e);
Console.Read();
return;
if (!FlagAutoConfirm) { Console.Read(); }
return 3;
}
}
}
Expand Down

0 comments on commit 158a411

Please sign in to comment.